UNPKG

2.11 MBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack:///packages/perspective-viewer/webpack/universalModuleDefinition","webpack:///packages/perspective-viewer/webpack/bootstrap","webpack:///node_modules/chevrotain/lib_esm/src/utils/utils.js","webpack:///node_modules/core-js/internals/global.js","webpack:///node_modules/core-js/internals/well-known-symbol.js","webpack:///node_modules/core-js/internals/has.js","webpack:///node_modules/core-js/internals/fails.js","webpack:///node_modules/core-js/internals/create-non-enumerable-property.js","webpack:///node_modules/core-js/internals/descriptors.js","webpack:///node_modules/core-js/internals/object-define-property.js","webpack:///node_modules/core-js/internals/is-object.js","webpack:///node_modules/core-js/internals/an-object.js","webpack:///node_modules/lodash/_root.js","webpack:///node_modules/core-js/internals/to-length.js","webpack:///node_modules/core-js/modules/web.dom-collections.iterator.js","webpack:///node_modules/regexp-to-ast/lib/regexp-to-ast.js","webpack:///node_modules/core-js/internals/to-integer.js","webpack:///node_modules/core-js/internals/internal-state.js","webpack:///node_modules/core-js/internals/redefine.js","webpack:///node_modules/core-js/internals/to-object.js","webpack:///../src/js/config/index.js","webpack:///node_modules/webpack/buildin/global.js","webpack:///node_modules/core-js/internals/create-property-descriptor.js","webpack:///node_modules/lodash/_getNative.js","webpack:///node_modules/core-js/internals/iterators.js","webpack:///node_modules/core-js/internals/export.js","webpack:///node_modules/core-js/internals/set-to-string-tag.js","webpack:///node_modules/core-js/internals/object-set-prototype-of.js","webpack:///node_modules/lodash/_baseGetTag.js","webpack:///node_modules/lodash/isObjectLike.js","webpack:///node_modules/core-js/internals/to-indexed-object.js","webpack:///node_modules/core-js/internals/classof-raw.js","webpack:///node_modules/core-js/internals/require-object-coercible.js","webpack:///node_modules/core-js/internals/is-pure.js","webpack:///node_modules/core-js/internals/to-primitive.js","webpack:///node_modules/core-js/internals/object-create.js","webpack:///node_modules/core-js/internals/get-built-in.js","webpack:///node_modules/core-js/internals/object-get-prototype-of.js","webpack:///node_modules/lodash/isObject.js","webpack:///node_modules/lodash/_ListCache.js","webpack:///node_modules/lodash/_assocIndexOf.js","webpack:///node_modules/lodash/_nativeCreate.js","webpack:///node_modules/lodash/_getMapData.js","webpack:///node_modules/core-js/internals/classof.js","webpack:///node_modules/core-js/internals/an-instance.js","webpack:///node_modules/core-js/internals/get-iterator-method.js","webpack:///node_modules/core-js/internals/function-bind-context.js","webpack:///../src/js/api/dispatch.js","webpack:///src/js/utils.js","webpack:///../src/js/api/view_api.js","webpack:///../src/js/api/table_api.js","webpack:///../src/js/api/client.js","webpack:///packages/perspective/dist/esm/psp.async.wasm.js","webpack:///node_modules/core-js/internals/indexed-object.js","webpack:///node_modules/core-js/internals/set-global.js","webpack:///node_modules/core-js/internals/uid.js","webpack:///node_modules/core-js/internals/hidden-keys.js","webpack:///node_modules/core-js/internals/enum-bug-keys.js","webpack:///node_modules/core-js/internals/shared-key.js","webpack:///node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack:///node_modules/core-js/internals/object-get-own-property-names.js","webpack:///node_modules/core-js/modules/es.string.replace.js","webpack:///node_modules/core-js/internals/regexp-exec.js","webpack:///node_modules/core-js/internals/string-multibyte.js","webpack:///node_modules/lodash/_Symbol.js","webpack:///node_modules/lodash/_Map.js","webpack:///node_modules/lodash/isArray.js","webpack:///node_modules/core-js/internals/array-buffer-view-core.js","webpack:///node_modules/core-js/modules/es.array.iterator.js","webpack:///node_modules/core-js/internals/add-to-unscopables.js","webpack:///node_modules/core-js/internals/shared.js","webpack:///node_modules/core-js/internals/shared-store.js","webpack:///node_modules/core-js/internals/ie8-dom-define.js","webpack:///node_modules/core-js/internals/document-create-element.js","webpack:///node_modules/core-js/internals/native-symbol.js","webpack:///node_modules/core-js/internals/object-define-properties.js","webpack:///node_modules/core-js/internals/object-keys.js","webpack:///node_modules/core-js/internals/object-keys-internal.js","webpack:///node_modules/core-js/internals/to-absolute-index.js","webpack:///node_modules/core-js/internals/inspect-source.js","webpack:///node_modules/core-js/internals/define-iterator.js","webpack:///node_modules/core-js/internals/object-property-is-enumerable.js","webpack:///node_modules/core-js/internals/object-get-own-property-symbols.js","webpack:///node_modules/core-js/internals/create-iterator-constructor.js","webpack:///node_modules/core-js/internals/iterators-core.js","webpack:///packages/perspective-webpack-plugin/src/js/utils.js","webpack:///node_modules/lodash/_freeGlobal.js","webpack:///node_modules/lodash/eq.js","webpack:///node_modules/lodash/isFunction.js","webpack:///node_modules/lodash/_toSource.js","webpack:///node_modules/lodash/_MapCache.js","webpack:///node_modules/lodash/_equalArrays.js","webpack:///node_modules/lodash/isBuffer.js","webpack:///node_modules/webpack/buildin/module.js","webpack:///node_modules/lodash/isTypedArray.js","webpack:///node_modules/lodash/isLength.js","webpack:///node_modules/core-js/internals/array-buffer-native.js","webpack:///node_modules/core-js/internals/redefine-all.js","webpack:///node_modules/core-js/internals/to-index.js","webpack:///node_modules/core-js/internals/is-array-iterator-method.js","webpack:///node_modules/core-js/internals/native-url.js","webpack:///node_modules/chevrotain/lib_esm/src/version.js","webpack:///node_modules/chevrotain/lib_esm/src/scan/reg_exp_parser.js","webpack:///node_modules/chevrotain/lib_esm/src/scan/reg_exp.js","webpack:///node_modules/chevrotain/lib_esm/src/scan/lexer.js","webpack:///node_modules/chevrotain/lib_esm/src/scan/tokens.js","webpack:///node_modules/chevrotain/lib_esm/src/scan/lexer_errors_public.js","webpack:///node_modules/chevrotain/lib_esm/src/scan/lexer_public.js","webpack:///node_modules/chevrotain/lib_esm/src/scan/tokens_public.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/gast/gast_public.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/rest.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/gast/gast_visitor_public.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/gast/gast.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/first.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/constants.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/follow.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/keys.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/cst/cst.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/interpreter.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/lookahead.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/checks.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/errors_public.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/resolver.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/grammar/gast/gast_resolver_public.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/exceptions_public.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/recoverable.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/looksahead.js","webpack:///node_modules/chevrotain/lib_esm/src/lang/lang_extensions.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/cst/cst_visitor.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/tree_builder.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/lexer_adapter.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/recognizer_api.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/recognizer_engine.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/error_handler.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/context_assist.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/gast_recorder.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/traits/perf_tracer.js","webpack:///node_modules/chevrotain/lib_esm/src/parse/parser/parser.js","webpack:///node_modules/chevrotain/lib_esm/src/diagrams/render_public.js","webpack:///node_modules/chevrotain/lib_esm/src/generate/generate.js","webpack:///node_modules/chevrotain/lib_esm/src/generate/generate_public.js","webpack:///node_modules/chevrotain/lib_esm/src/api.js","webpack:///../src/js/api/server.js","webpack:///packages/perspective/dist/esm/perspective.wasm.js","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/webpack/universalModuleDefinition","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/webpack/bootstrap","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"chevrotain\"","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"lit-html\"","webpack:///packages/perspective-viewer/webpack:/src/js/utils.js","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"core-js/modules/web.dom-collections.iterator\"","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"@finos/perspective/dist/esm/config\"","webpack:///packages/perspective-viewer/webpack:/src/js/viewer/renderers.js","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"@finos/perspective\"","webpack:///packages/perspective-viewer/webpack:/node_modules/css-loader/lib/css-base.js","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"core-js/modules/es.string.replace\"","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"lodash/debounce\"","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"awesomplete\"","webpack:///packages/perspective-viewer/webpack:/node_modules/webpack/buildin/global.js","webpack:///packages/perspective-viewer/webpack:/node_modules/awesomplete/awesomplete.css","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/html/row.html","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/less/row.less","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/html/autocomplete_widget.html","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/less/autocomplete_widget.less","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/html/expression_editor.html","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/less/expression_editor.less","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/html/computed_expression_widget.html","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/less/computed_expression_widget.less","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/html/viewer.html","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/less/viewer.less","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/dist/less/default.less","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"lodash/isEqual\"","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"core-js/modules/es.typed-array.uint8-array\"","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"core-js/modules/web.url\"","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"@webcomponents/webcomponentsjs\"","webpack:///packages/perspective-viewer/webpack:/src/js/polyfill.js","webpack:///packages/perspective-viewer/webpack:/packages/perspective-viewer/external \"core-js/modules/es.array.unscopables.flat-map\"","webpack:///packages/perspective-viewer/webpack:/src/js/row.js","webpack:///packages/perspective-viewer/webpack:/src/js/autocomplete_widget.js","webpack:///packages/perspective-viewer/webpack:/src/js/expression_editor.js","webpack:///packages/perspective-viewer/webpack:/src/js/computed_expressions/error.js","webpack:///packages/perspective-viewer/webpack:/src/js/computed_expressions/lexer.js","webpack:///packages/perspective-viewer/webpack:/src/js/computed_expressions/parser.js","webpack:///packages/perspective-viewer/webpack:/src/js/computed_expressions/formatter.js","webpack:///packages/perspective-viewer/webpack:/src/js/computed_expressions/computed_expression_parser.js","webpack:///packages/perspective-viewer/webpack:/src/js/computed_expressions/widget.js","webpack:///packages/perspective-viewer/webpack:/src/js/viewer/dragdrop.js","webpack:///packages/perspective-viewer/webpack:/src/js/viewer/cancel_task.js","webpack:///packages/perspective-viewer/webpack:/src/js/viewer/state_element.js","webpack:///packages/perspective-viewer/webpack:/src/js/viewer/perspective_element.js","webpack:///packages/perspective-viewer/webpack:/src/js/viewer/dom_element.js","webpack:///packages/perspective-viewer/webpack:/src/js/viewer/action_element.js","webpack:///packages/perspective-viewer/webpack:/src/js/viewer.js","webpack:///node_modules/core-js/internals/dom-iterables.js","webpack:///node_modules/core-js/internals/use-symbol-as-uid.js","webpack:///node_modules/core-js/internals/array-includes.js","webpack:///node_modules/core-js/internals/html.js","webpack:///node_modules/core-js/internals/path.js","webpack:///node_modules/core-js/internals/native-weak-map.js","webpack:///node_modules/core-js/internals/copy-constructor-properties.js","webpack:///node_modules/core-js/internals/own-keys.js","webpack:///node_modules/core-js/internals/is-forced.js","webpack:///node_modules/core-js/internals/correct-prototype-getter.js","webpack:///node_modules/core-js/internals/a-possible-prototype.js","webpack:///../src/js/config/settings.js","webpack:///packages/perspective/dist/esm/config/__node.js","webpack:///packages/perspective/dist/umd/perspective.inline.js","webpack:///node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack:///node_modules/core-js/modules/es.regexp.exec.js","webpack:///node_modules/core-js/internals/regexp-flags.js","webpack:///node_modules/core-js/internals/regexp-sticky-helpers.js","webpack:///node_modules/core-js/internals/advance-string-index.js","webpack:///node_modules/core-js/internals/regexp-exec-abstract.js","webpack:///node_modules/detectie/detectie.js","webpack:///src/js/websocket.js","webpack:///node_modules/lodash/debounce.js","webpack:///node_modules/lodash/now.js","webpack:///node_modules/lodash/toNumber.js","webpack:///node_modules/lodash/isSymbol.js","webpack:///node_modules/lodash/_getRawTag.js","webpack:///node_modules/lodash/_objectToString.js","webpack:///node_modules/awesomplete/awesomplete.js","webpack:///node_modules/lodash/isEqual.js","webpack:///node_modules/lodash/_baseIsEqual.js","webpack:///node_modules/lodash/_baseIsEqualDeep.js","webpack:///node_modules/lodash/_Stack.js","webpack:///node_modules/lodash/_listCacheClear.js","webpack:///node_modules/lodash/_listCacheDelete.js","webpack:///node_modules/lodash/_listCacheGet.js","webpack:///node_modules/lodash/_listCacheHas.js","webpack:///node_modules/lodash/_listCacheSet.js","webpack:///node_modules/lodash/_stackClear.js","webpack:///node_modules/lodash/_stackDelete.js","webpack:///node_modules/lodash/_stackGet.js","webpack:///node_modules/lodash/_stackHas.js","webpack:///node_modules/lodash/_stackSet.js","webpack:///node_modules/lodash/_baseIsNative.js","webpack:///node_modules/lodash/_isMasked.js","webpack:///node_modules/lodash/_coreJsData.js","webpack:///node_modules/lodash/_getValue.js","webpack:///node_modules/lodash/_mapCacheClear.js","webpack:///node_modules/lodash/_Hash.js","webpack:///node_modules/lodash/_hashClear.js","webpack:///node_modules/lodash/_hashDelete.js","webpack:///node_modules/lodash/_hashGet.js","webpack:///node_modules/lodash/_hashHas.js","webpack:///node_modules/lodash/_hashSet.js","webpack:///node_modules/lodash/_mapCacheDelete.js","webpack:///node_modules/lodash/_isKeyable.js","webpack:///node_modules/lodash/_mapCacheGet.js","webpack:///node_modules/lodash/_mapCacheHas.js","webpack:///node_modules/lodash/_mapCacheSet.js","webpack:///node_modules/lodash/_SetCache.js","webpack:///node_modules/lodash/_setCacheAdd.js","webpack:///node_modules/lodash/_setCacheHas.js","webpack:///node_modules/lodash/_arraySome.js","webpack:///node_modules/lodash/_cacheHas.js","webpack:///node_modules/lodash/_equalByTag.js","webpack:///node_modules/lodash/_Uint8Array.js","webpack:///node_modules/lodash/_mapToArray.js","webpack:///node_modules/lodash/_setToArray.js","webpack:///node_modules/lodash/_equalObjects.js","webpack:///node_modules/lodash/_getAllKeys.js","webpack:///node_modules/lodash/_baseGetAllKeys.js","webpack:///node_modules/lodash/_arrayPush.js","webpack:///node_modules/lodash/_getSymbols.js","webpack:///node_modules/lodash/_arrayFilter.js","webpack:///node_modules/lodash/stubArray.js","webpack:///node_modules/lodash/keys.js","webpack:///node_modules/lodash/_arrayLikeKeys.js","webpack:///node_modules/lodash/_baseTimes.js","webpack:///node_modules/lodash/isArguments.js","webpack:///node_modules/lodash/_baseIsArguments.js","webpack:///node_modules/lodash/stubFalse.js","webpack:///node_modules/lodash/_isIndex.js","webpack:///node_modules/lodash/_baseIsTypedArray.js","webpack:///node_modules/lodash/_baseUnary.js","webpack:///node_modules/lodash/_nodeUtil.js","webpack:///node_modules/lodash/_baseKeys.js","webpack:///node_modules/lodash/_isPrototype.js","webpack:///node_modules/lodash/_nativeKeys.js","webpack:///node_modules/lodash/_overArg.js","webpack:///node_modules/lodash/isArrayLike.js","webpack:///node_modules/lodash/_getTag.js","webpack:///node_modules/lodash/_DataView.js","webpack:///node_modules/lodash/_Promise.js","webpack:///node_modules/lodash/_Set.js","webpack:///node_modules/lodash/_WeakMap.js","webpack:///node_modules/core-js/modules/es.typed-array.uint8-array.js","webpack:///node_modules/core-js/internals/typed-array-constructor.js","webpack:///node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","webpack:///node_modules/core-js/internals/check-correctness-of-iteration.js","webpack:///node_modules/core-js/internals/to-string-tag-support.js","webpack:///node_modules/core-js/internals/array-buffer.js","webpack:///node_modules/core-js/internals/ieee754.js","webpack:///node_modules/core-js/internals/array-fill.js","webpack:///node_modules/core-js/internals/to-offset.js","webpack:///node_modules/core-js/internals/to-positive-integer.js","webpack:///node_modules/core-js/internals/typed-array-from.js","webpack:///node_modules/core-js/internals/a-function.js","webpack:///node_modules/core-js/internals/array-iteration.js","webpack:///node_modules/core-js/internals/array-species-create.js","webpack:///node_modules/core-js/internals/is-array.js","webpack:///node_modules/core-js/internals/set-species.js","webpack:///node_modules/core-js/internals/inherit-if-required.js","webpack:///node_modules/core-js/modules/web.url.js","webpack:///node_modules/core-js/modules/es.string.iterator.js","webpack:///node_modules/core-js/internals/object-assign.js","webpack:///node_modules/core-js/internals/array-from.js","webpack:///node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack:///node_modules/core-js/internals/create-property.js","webpack:///node_modules/core-js/internals/string-punycode-to-ascii.js","webpack:///node_modules/core-js/modules/web.url-search-params.js","webpack:///node_modules/core-js/internals/get-iterator.js","webpack:///packages/webcomponents-platform/webcomponents-platform.js","webpack:///packages/perspective-viewer/ [synthetic:util/defineproperty] ","webpack:///packages/perspective-viewer/ [synthetic:util/global] ","webpack:///packages/perspective-viewer/ [synthetic:es6/symbol] ","webpack:///packages/perspective-viewer/ [synthetic:es6/util/setprototypeof] ","webpack:///packages/perspective-viewer/ [synthetic:es6/util/makeiterator] ","webpack:///packages/perspective-viewer/ [synthetic:es6/generator_engine] ","webpack:///packages/perspective-viewer/src/symbol.js","webpack:///packages/template/template.js","webpack:///promise-polyfill/src/index.js","webpack:///packages/perspective-viewer/src/promise.js","webpack:///promise-polyfill/src/finally.js","webpack:///es-symbol/dist/symbol.js","webpack:///packages/perspective-viewer/src/flag-parser.js","webpack:///packages/shadydom/src/shady-data.js","webpack:///packages/shadydom/src/utils.js","webpack:///packages/shadydom/src/flush.js","webpack:///packages/shadydom/src/observe-changes.js","webpack:///packages/shadydom/src/native-methods.js","webpack:///packages/shadydom/src/innerHTML.js","webpack:///packages/shadydom/src/native-tree-walker.js","webpack:///packages/shadydom/src/native-tree-accessors.js","webpack:///packages/shadydom/src/native-tree.js","webpack:///packages/shadydom/src/patch-accessors.js","webpack:///packages/shadydom/src/logical-tree.js","webpack:///packages/shadydom/src/logical-mutation.js","webpack:///packages/shadydom/src/attach-shadow.js","webpack:///packages/perspective-viewer/ [synthetic:es6/util/arrayfromiterable] ","webpack:///packages/perspective-viewer/ [synthetic:es6/util/arrayfromiterator] ","webpack:///packages/shadydom/src/patch-events.js","webpack:///packages/shadydom/src/array-splice.js","webpack:///packages/shadydom/src/patch-builtins.js","webpack:///packages/shadydom/src/shadydom.js","webpack:///packages/custom-elements/src/Utilities.js","webpack:///packages/custom-elements/src/CustomElementInternals.js","webpack:///packages/custom-elements/src/CustomElementState.js","webpack:///packages/custom-elements/src/DocumentConstructionObserver.js","webpack:///packages/custom-elements/src/CustomElementRegistry.js","webpack:///packages/custom-elements/src/Deferred.js","webpack:///packages/custom-elements/src/Patch/Native.js","webpack:///packages/custom-elements/src/AlreadyConstructedMarker.js","webpack:///packages/custom-elements/src/Patch/Interface/ParentNode.js","webpack:///packages/custom-elements/src/custom-elements.js","webpack:///packages/custom-elements/src/Patch/HTMLElement.js","webpack:///packages/custom-elements/src/Patch/Document.js","webpack:///packages/custom-elements/src/Patch/DocumentFragment.js","webpack:///packages/custom-elements/src/Patch/Node.js","webpack:///packages/custom-elements/src/Patch/Element.js","webpack:///packages/custom-elements/src/Patch/Interface/ChildNode.js","webpack:///packages/shadycss/src/css-parse.js","webpack:///packages/shadycss/src/style-settings.js","webpack:///packages/shadycss/src/common-regex.js","webpack:///packages/shadycss/src/unscoped-style-handler.js","webpack:///packages/shadycss/src/style-util.js","webpack:///packages/shadycss/src/style-transformer.js","webpack:///packages/shadycss/src/style-info.js","webpack:///packages/shadycss/src/style-properties.js","webpack:///packages/shadycss/src/style-placeholder.js","webpack:///packages/shadycss/src/style-cache.js","webpack:///packages/shadycss/src/document-watcher.js","webpack:///packages/shadycss/src/template-map.js","webpack:///packages/shadycss/src/apply-shim-utils.js","webpack:///packages/shadycss/src/scoping-shim.js","webpack:///packages/shadycss/src/common-utils.js","webpack:///packages/shadycss/entrypoints/scoping-shim.js","webpack:///packages/url/url.js","webpack:///packages/perspective-viewer/src/baseuri.js","webpack:///packages/perspective-viewer/src/unresolved.js","webpack:///packages/perspective-viewer/entrypoints/webcomponents-bundle-index.js","webpack:///node_modules/timers-browserify/main.js","webpack:///node_modules/setimmediate/setImmediate.js","webpack:///node_modules/process/browser.js","webpack:///node_modules/core-js/modules/es.array.unscopables.flat-map.js","webpack:///packages/src/lib/directive.ts","webpack:///packages/src/lib/dom.ts","webpack:///packages/src/lib/part.ts","webpack:///packages/src/lib/template.ts","webpack:///packages/src/lib/template-instance.ts","webpack:///packages/src/lib/template-result.ts","webpack:///packages/src/lib/parts.ts","webpack:///packages/src/lib/default-template-processor.ts","webpack:///packages/src/lib/template-factory.ts","webpack:///packages/src/lib/render.ts","webpack:///packages/perspective-viewer/src/lit-html.ts","webpack:///../src/js/config/constants.js","webpack:///src/js/perspective.parallel.js"],"names":["root","factory","exports","module","define","amd","a","i","window","installedModules","__webpack_require__","moduleId","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","isEmpty","arr","length","keys","obj","values","vals","push","mapValues","callback","result","objKeys","idx","currKey","map","flatten","currItem","Array","isArray","concat","first","undefined","last","len","forEach","collection","iteratorCallback","isObject","Error","colKeys","isString","item","isUndefined","isFunction","Function","drop","howMuch","slice","dropRight","filter","predicate","reject","pick","has","prop","contains","find","cloneArr","newArr","cloneObj","clonedObj","findAll","found","reduce","arrOrObj","iterator","initial","isArr","accumulator","compact","uniq","identity","identities","currIdentity","partial","func","restArgs","_i","arguments","allArgs","apply","isRegExp","RegExp","every","difference","some","indexOf","sortBy","orderFunc","sort","b","zipObject","assign","target","sources","curSource","currSourceKeys","j","assignNoOverwrite","defaults","groupBy","groupKeyFunc","currGroupKey","currGroupArr","merge","obj1","obj2","keys2","NOOP","IDENTITY","packArray","holeyArr","orgValue","PRINT_ERROR","msg","console","error","PRINT_WARNING","warn","isES2015MapSupported","Map","applyMixins","derivedCtor","baseCtors","baseCtor","baseProto","getOwnPropertyNames","propName","basePropDescriptor","getOwnPropertyDescriptor","set","toFastProperties","toBecomeFast","FakeConstructor","fakeInstance","fakeAccess","bar","peek","timer","start","Date","getTime","val","time","it","Math","check","globalThis","self","global","shared","uid","NATIVE_SYMBOL","USE_SYMBOL_AS_UID","WellKnownSymbolsStore","createWellKnownSymbol","withoutSetter","exec","DESCRIPTORS","definePropertyModule","createPropertyDescriptor","f","fails","IE8_DOM_DEFINE","anObject","toPrimitive","nativeDefineProperty","O","P","Attributes","TypeError","String","freeGlobal","freeSelf","toInteger","min","argument","DOMIterables","ArrayIteratorMethods","createNonEnumerableProperty","wellKnownSymbol","ITERATOR","TO_STRING_TAG","ArrayValues","COLLECTION_NAME","Collection","CollectionPrototype","METHOD_NAME","RegExpParser","saveState","this","input","groupIdx","restoreState","newState","pattern","consumeChar","disjunction","flags","type","ignoreCase","multiLine","unicode","sticky","isRegExpFlag","popChar","addFlag","substring","alts","alternative","peekChar","terms","isTerm","term","isAssertion","assertion","atom","ASSERT_EXISTS","ASSERT_NEVER_REACH_HERE","quantifier","isBacktracking","range","atLeast","atMost","Infinity","integerIncludingZero","isDigit","greedy","dotAll","atomEscape","characterClass","group","isPatternCharacter","patternCharacter","isQuantifier","complement","cc","decimalEscapeAtom","characterClassEscape","controlEscapeAtom","controlLetterEscapeAtom","nulCharacterAtom","hexEscapeSequenceAtom","regExpUnicodeEscapeSequenceAtom","identityEscapeAtom","positiveInteger","digitsCharCodes","whitespaceCodes","wordCharCodes","escapeCode","letter","test","toUpperCase","charCodeAt","parseHexDigits","classPatternCharacterAtom","isClassAtom","from","classAtom","isRangeDash","to","insertToSet","classEscape","capturing","groupAst","number","decimalPatternNoZero","decimalPattern","parseInt","nextChar","isAtom","prevState","e","howMany","hexString","hexChar","hexDigitPattern","char","subItem","flagObj","flagKey","BaseRegExpVisitor","visitChildren","node","child","visit","subChild","visitPattern","visitFlags","visitDisjunction","visitAlternative","visitStartAnchor","visitEndAnchor","visitWordBoundary","visitNonWordBoundary","visitLookahead","visitNegativeLookahead","visitCharacter","visitSet","visitGroup","visitGroupBackReference","visitQuantifier","VERSION","ceil","floor","isNaN","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","WeakMap","store","wmget","wmhas","wmset","metadata","STATE","enforce","getterFor","TYPE","state","setGlobal","inspectSource","InternalStateModule","getInternalState","enforceInternalState","TEMPLATE","split","options","unsafe","simple","noTargetGet","source","join","requireObjectCoercible","DEFAULT_CONFIG","require","default","get_config_file","mergeDeep","shift","get_types","get_config","types","get_type_config","config","props","__PERSPECTIVE_CONFIG__","override_config","g","bitmap","configurable","writable","baseIsNative","getValue","redefine","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","forced","sham","TAG","aPossiblePrototype","setPrototypeOf","setter","CORRECT_SETTER","proto","__proto__","getRawTag","objectToString","nullTag","undefinedTag","symToStringTag","IndexedObject","toString","PREFERRED_STRING","fn","valueOf","activeXDocument","defineProperties","enumBugKeys","html","documentCreateElement","IE_PROTO","EmptyConstructor","scriptTag","content","LT","NullProtoObject","document","domain","ActiveXObject","iframeDocument","iframe","write","close","temp","parentWindow","NullProtoObjectViaActiveX","style","display","appendChild","src","contentWindow","open","F","Properties","path","aFunction","variable","namespace","method","toObject","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","getPrototypeOf","constructor","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","entries","index","clear","entry","eq","array","nativeCreate","getNative","isKeyable","data","__data__","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tag","tryGet","callee","Constructor","classof","Iterators","that","__CALLBACK_CACHE__","__CALLBACK_INDEX__","unsubscribe","cmd","resolve","args","splice","callback_id","delete","_name","subscribe","_worker","post","async_queue","Promise","bindall","view","worker","table_name","random","view_name","proxy_view","table","to_arrow","then","arrow","on_update","updated","update","delta","proxy_table","includes","search","searchElement","fromIndex","x","y","k","max","abs","to_json","to_columns","to_csv","schema","computed_schema","column_paths","num_columns","num_rows","set_depth","get_row_expanded","expand","collapse","col_to_js_typed_array","remove_update","on_delete","remove_delete","make_port","remove_port","compute","get_computation_input_types","get_computed_functions","is_valid_filter","size","columns","replace","remove","execute","Client","_initialized","initialized","transferable","msg_id","handlers","messages","handler","keep_alive","id","send","initialize_profile_thread","open_table","open_view","_handle","event","createEvent","initEvent","dispatchEvent","msgs","terminate","utils","publicPath","propertyIsEnumerable","postfix","propertyIsEnumerableModule","toIndexedObject","nativeGetOwnPropertyDescriptor","internalObjectKeys","fixRegExpWellKnownSymbolLogic","toLength","advanceStringIndex","regExpExec","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","REPLACE","nativeReplace","maybeCallNative","reason","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","REPLACE_KEEPS_$0","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","regexp","res","done","rx","S","functionalReplace","fullUnicode","lastIndex","results","accumulatedResult","nextSourcePosition","matched","position","captures","namedCaptures","groups","replacerArgs","replacement","getSubstitution","str","tailPos","symbols","match","ch","capture","charAt","re1","re2","regexpFlags","stickyHelpers","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","re","charsAdded","strCopy","multiline","createMethod","CONVERT_TO_STRING","$this","pos","second","codeAt","NAME","NATIVE_ARRAY_BUFFER","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","isPrototypeOf","TYPED_ARRAY_TAG","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Uint8Array","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","isTypedArray","aTypedArray","aTypedArrayConstructor","C","ARRAY","TypedArrayConstructor","exportTypedArrayMethod","KEY","exportTypedArrayStaticMethod","isView","klass","addToUnscopables","defineIterator","setInternalState","iterated","kind","Arguments","UNSCOPABLES","ArrayPrototype","IS_PURE","version","copyright","createElement","EXISTS","getOwnPropertySymbols","objectKeys","names","integer","functionToString","$","createIteratorConstructor","setToStringTag","IteratorsCore","IteratorPrototype","BUGGY_SAFARI_ITERATORS","returnThis","Iterable","IteratorConstructor","next","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","nativePropertyIsEnumerable","NASHORN_BUG","1","V","PrototypeOfArrayIteratorPrototype","arrayIterator","__SCRIPT_PATH__","pathParts","stackLines","stack","callerIndex","Number","fullPath","location","origin","pathname","host","hostname","file","isCrossOrigin","webpackOrigin","link","href","startsWith","BlobWorker","responseText","ready","blob","Blob","URL","createObjectURL","Worker","XHRWorker","url","oReq","XMLHttpRequest","addEventListener","other","baseGetTag","asyncTag","funcTag","genTag","proxyTag","funcToString","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","bitmask","customizer","equalFunc","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","stubFalse","freeExports","nodeType","freeModule","Buffer","isBuffer","webpackPolyfill","deprecate","paths","children","baseIsTypedArray","baseUnary","nodeUtil","nodeIsTypedArray","MAX_SAFE_INTEGER","ArrayBuffer","DataView","RangeError","searchParams","toJSON","URLSearchParams","username","hash","regExpAstCache","regExpParser","getRegExpAst","regExp","regExpStr","regExpAst","extendStatics","__extends","__","complementErrorMessage","failedOptimizationPrefixMsg","getOptimizedStartCodesIndices","ensureOptimizations","ast","firstCharOptimizedIndices","addOptimizedIdxToResult","code","rangeCode","minOptimizationVal","minUnOptVal","maxUnOptVal","minOptIdx","charCodeToOptimizedIndex","maxOptIdx","currOptIdx","isOptionalQuantifier","isWholeOptional","message","msgSuffix","optimizedCharIdx","fromCharCode","upperChar","lowerChar","toLowerCase","handleIgnoreCase","findCode","setNode","targetCharCodes","codeOrRange","range_1","targetCode","_super","CharCodeFinder","_this","canMatchCharCode","charCodes","charCodeFinder","PATTERN","DEFAULT_MODE","MODES","SUPPORT_STICKY","analyzeTokenTypes","tokenTypes","onlyRelevantTypes","tracer","useSticky","debug","safeMode","positionTracking","lineTerminatorCharacters","action","charCodeToOptimizedIdxMap","initCharCodeToOptimizedIndexMap","currType","NA","allTransformedPatterns","patternIdxToType","patternIdxToGroup","patternIdxToLongerAltIdx","patternIdxToPushMode","patternIdxToPopMode","patternIdxToCanLineTerminator","patternIdxToIsCustom","patternIdxToShort","emptyGroups","patternIdxToConfig","hasCustom","currPattern","regExpSource","addStickyFlag","addStartOfInput","escapedRegExpString","wrappedRegExp","tokenTypeIdx","clazz","groupName","GROUP","SKIPPED","longerAltType","LONGER_ALT","PUSH_MODE","lineTerminatorCharCodes","getCharCodes","tokType","LINE_BREAKS","checkLineBreaksIssues","isCustomPattern","isShortPattern","acc","longerAlt","canLineTerminator","isCustom","short","pop","tokenType","canBeOptimized","charCodeToPatternIdxToConfig","currTokType","optimizedIdx","addToMapOfArrays","START_CHARS_HINT","lastOptimizedIdx_1","charOrInt","currOptimizedIdx","optimizedCodes","validatePatterns","validModesNames","errors","missingResult","tokenTypesWithMissingPattern","LexerDefinitionErrorType","MISSING_PATTERN","valid","findMissingPatterns","invalidResult","tokenTypesWithInvalidPattern","INVALID_PATTERN","findInvalidPatterns","validTokenTypes","withRegExpPatterns","EndAnchorFinder","invalidRegex","regexpAst","endAnchorVisitor","end_of_input","EOI_ANCHOR_FOUND","findEndOfInputAnchor","StartAnchorFinder","startAnchorVisitor","start_of_input","SOI_ANCHOR_FOUND","findStartOfInputAnchor","invalidFlags","UNSUPPORTED_FLAGS_FOUND","findUnsupportedFlags","identicalPatterns","outerType","innerType","duplicatePatterns","currIdenticalSet","setOfIdentical","tokenTypeNames","DUPLICATE_PATTERNS_FOUND","findDuplicatePatterns","matchesEmptyString","EMPTY_MATCH_PATTERN","findEmptyMatchRegExps","validateRegExpPattern","invalidTypes","INVALID_GROUP_TYPE_FOUND","findInvalidGroupType","validModes","invalidModes","PUSH_MODE_DOES_NOT_EXIST","findModesThatDoNotExist","canBeTested","testIdx","_a","regExpArray","testTokenType","UNREACHABLE_PATTERN","findUnreachablePatterns","performWarningRuntimeChecks","lexerDefinition","trackLines","warnings","hasAnyLineBreak","allTokenTypes","modes","tokTypes","concreteTokenTypes","terminatorCharCodes","currIssue","warningDescriptor","details","issue","IDENTIFY_TERMINATOR","errMsg","CUSTOM_LINE_BREAK","buildLineBreakIssueMessage","NO_LINE_BREAKS_FLAGS","LineTerminatorOptimizedTester","text","charsOrCodes","numOrString","charCode","tokenStructuredMatcher","tokInstance","tokConstructor","instanceType","isParent","categoryMatchesMap","tokenStructuredMatcherNoCategories","token","tokenShortNameIdx","tokenIdxToClass","augmentTokenTypes","tokenTypesAndParents","categories","searching","CATEGORIES","newCategories","expandCategories","hasShortKeyProperty","hasCategoriesProperty","categoryMatches","hasExtendingTokensTypesMapProperty","assignTokenDefaultProps","singleAssignCategoriesToksMap","nextNode","pathNode","nextCategory","newPath","assignCategoriesMapProp","assignCategoriesTokensProp","isTokenType","defaultLexerErrorProvider","buildUnableToPopLexerModeMessage","image","buildUnexpectedCharactersMessage","fullText","startOffset","line","column","DEFAULT_LEXER_CONFIG","deferDefinitionErrorsHandling","lineTerminatorsPattern","errorMessageProvider","traceInitPerf","skipValidations","freeze","Lexer","lexerDefinitionErrors","lexerDefinitionWarning","trackStartLines","trackEndLines","canModeBeOptimized","traceInitVal","traceInitMaxIdent","traceInitIndent","TRACE_INIT","actualDefinition","hasOnlySingleMode","MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE","MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY","defaultMode","MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST","currModeValue","currModeName","currIdx","LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED","performRuntimeChecks","allModeNames","currModDef","currModName","currAnalyzeResult_1","allErrMessagesString","chopInput","matchWithTest","updateLastIndex","matchWithExec","handleModes","computeNewColumn","updateTokenEndLineColumnLocation","createTokenInstance","createFullToken","createStartOnlyToken","createOffsetOnlyToken","addToken","addTokenUsingPush","handlePayload","handlePayloadWithCustom","addTokenUsingMemberAccess","handlePayloadNoCustom","unOptimizedModes","cannotBeOptimized","modeName","tokenize","initialMode","tokenizeInternal","matchAltImage","longerAltIdx","matchedImage","payload","altPayload","imageLength","newToken","errLength","clonedResult","groupKeys","orgText","orgLength","offset","matchedTokensIndex","guessedNumberOfTokens","matchedTokens","currGroupValue","lineTerminatorPattern","currModePatternsLength","currCharCodeToPatternIdxToConfig","modeStack","emptyArray","getPossiblePatterns","getPossiblePatternsSlow","getPossiblePatternsOptimized","possiblePatterns","currConfig","pop_mode","popToken","msg_1","startLine","startColumn","newMode","modeCanBeOptimized","push_mode","nextCharCode","chosenPatternIdxToConfig","chosenPatternsLength","singleCharCode","longerAltConfig","longerAltPattern","numOfLTsInMatch","foundTerminator","lastLTEndOffset","errorStartOffset","errorLine","errorColumn","foundResyncPoint","currConfig_1","tokens","pushMode","newLastIndex","lastLTIdx","lastCharIsLT","fixForEndingInLT","endLine","endColumn","oldColumn","endOffset","tokenVector","tokenToAdd","phaseDesc","phaseImpl","indent","log","traceMethod","tokenLabel","hasTokenLabel","LABEL","tokenName","PARENT","POP_MODE","createToken","createTokenInternal","EOF","AbstractProduction","definition","accept","visitor","prod","NonTerminal","v","referencedRule","Rule","Flat","ignoreAmbiguities","Option","RepetitionMandatory","RepetitionMandatoryWithSeparator","Repetition","RepetitionWithSeparator","Alternation","hasPredicates","Terminal","serializeGrammar","topRules","serializeProduction","convertDefinition","nonTerminalName","separator","terminalType","serializedTerminal","label","RestWalker","walk","prevRest","subProd","currRest","walkProdRef","walkTerminal","walkFlat","walkOption","walkAtLeastOne","walkAtLeastOneSep","walkManySep","walkMany","walkOr","terminal","refProd","flatProd","fullOrRest","optionProd","atLeastOneProd","fullAtLeastOneRest","atLeastOneSepProd","fullAtLeastOneSepRest","restForRepetitionWithSeparator","manyProd","fullManyRest","manySepProd","fullManySepRest","orProd","alt","prodWrapper","repSepProd","GAstVisitor","nodeAny","visitNonTerminal","visitFlat","visitOption","visitRepetitionMandatory","visitRepetitionMandatoryWithSeparator","visitRepetitionWithSeparator","visitRepetition","visitAlternation","visitTerminal","visitRule","isOptionalProd","alreadyVisited","getProductionDslName","DslMethodsCollectorVisitor","dslMethods","option","alternation","repetition","repetitionWithSeparator","repetitionMandatory","repetitionMandatoryWithSeparator","reset","subrule","manySep","atLeastOne","atLeastOneSep","many","or","isSequenceProd","currSubProd","firstSet","seq","nextSubProdIdx","hasInnerProdsRemaining","isLastInnerProdOptional","firstForSequence","isBranchingProd","allAlternativesFirsts","innerProd","firstForBranching","IN","ResyncFollowsWalker","topProd","follows","startWalking","inner","occurenceInParent","followName","fullRest","t_in_topProd_follows","getKeyForAutomaticLookahead","ruleIdx","dslMethodIdx","occurrence","BITS_START_FOR_ALT_IDX","getKeyForAltIndex","altIdx","altIdxBitMap","setNodeLocationOnlyOffset","currNodeLocation","newLocationInfo","setNodeLocationFull","addNoneTerminalToCst","ruleName","ruleResult","NamedDSLMethodsCollectorVisitor","collectNamedDSLMethod","newNodeConstructor","methodIdx","nameLessNode","def","orgProd","hasMoreThanOneAlternative","currFlatAlt","NextAfterTokenWalker","nextTerminalName","nextTerminalOccurrence","lastTok","lastTokOccurrence","isAtEndOfPath","restProd","possibleTokTypes","AbstractNextPossibleTokensWalker","nextProductionName","nextProductionOccurrence","ruleStack","reverse","occurrenceStack","updateExpectedNext","AbstractNextTerminalAfterProductionWalker","topRule","isEndOfRule","NextTerminalAfterManyWalker","firstAfterMany","NextTerminalAfterManySepWalker","firstAfterManySep","NextTerminalAfterAtLeastOneWalker","firstAfterAtLeastOne","NextTerminalAfterAtLeastOneSepWalker","atleastOneSepProd","firstAfterfirstAfterAtLeastOneSep","possiblePathsFrom","targetDef","maxLength","currPath","getAlternativesForProd","alternatives","newDef","currAlt","partialPath","suffixDef","nextPossibleTokensAfter","initialDef","tokMatcher","maxLookAhead","EXIT_NON_TERMINAL_ARR","foundCompletePath","tokenVectorLength","minimalAlternativesIndex","possiblePaths","currDef","currRuleStack","currOccurrenceStack","nextPath","nextIdx","nextTokenType","nextTokenOccurrence","newRuleStack","newOccurrenceStack","nextPathWithout","nextPathWith","secondIteration","separatorGast","nthRepetition","currAltPath","expandTopLevelRule","newCurrOccurrenceStack","PROD_TYPE","RestDefinitionFinderWalker","targetOccurrence","targetProdType","restDef","checkIsTarget","expectedProdType","OPTION","REPETITION_MANDATORY","REPETITION_MANDATORY_WITH_SEPARATOR","REPETITION","REPETITION_WITH_SEPARATOR","InsideDefinitionFinderVisitor","targetRef","expectedProdName","ALTERNATION","initializeArrayOfArrays","pathToHashKeys","longerKeys","currShorterKey","categoriesKeySuffix","isUniquePrefixHash","altKnownPathsKeys","searchPathKeys","currAltIdx","otherAltKnownPathsKeys","searchIdx","lookAheadSequenceFromAlternatives","altsDefs","partialAlts","finalResult","altsHashes","currAltPaths","dict","newData","pathLength","currDataset","_loop_1","currAltPathsAndSuffixes","currPathIdx","currPathPrefix","prefixKeys","currAltResult","containsPath","newPartialPathsAndSuffixes","getLookaheadPathsForOr","ruleGrammar","getLookaheadPathsForOptionalProd","prodType","insideDefVisitor","insideDef","afterDef","searchPath","compareOtherPath","otherPath","searchTok","otherTok","areTokenCategoriesNotUsed","lookAheadPaths","singleAltPaths","singlePath","validateGrammar","topLevels","globalMaxLookahead","ignoredIssues","errMsgProvider","grammarName","duplicateErrors","currTopLevel","topLevelRule","collectorVisitor","OccurrenceValidationCollector","allRuleProductions","allProductions","productionGroups","identifyProductionForDuplicates","duplicates","currGroup","currDuplicates","firstProd","buildDuplicateFoundError","dslName","defError","ParserDefinitionErrorType","DUPLICATE_PRODUCTIONS","param","parameter","validateDuplicateProductions","leftRecursionErrors","currTopRule","validateNoLeftRecursion","currRule","nextNonTerminals","getFirstNoneTerminal","currSubDef","isFirstOptional","hasMore","rest","buildLeftRecursionError","leftRecursionPath","LEFT_RECURSION","validNextSteps","errorsFromNextSteps","currRefRule","emptyAltErrors","ambiguousAltsErrors","emptyRepetitionErrors","orCollector","OrCollector","ors","alternations","currOr","exceptLast","currErrors","currAlternative","possibleFirstInAlt","buildEmptyAlternationError","emptyChoiceIdx","NONE_LAST_EMPTY_ALT","validateEmptyOrAlternative","ignoredIssuesForCurrentRule","currOccurrence","actualMaxLookahead","maxLookahead","altsAmbiguityErrors","rule","foundAmbiguousPaths","identicalAmbiguities","altsCurrPathAppearsIn","currOtherAlt","currOtherAltIdx","currAmbDescriptor","ambgIndices","buildAlternationAmbiguityError","ambiguityIndices","prefixPath","AMBIGUOUS_ALTS","checkAlternativesAmbiguities","altsPrefixAmbiguityErrors","pathsAndIndices","currPathsAndIdx","currPathAndIdx","targetIdx","targetPath","prefixAmbiguitiesPathsAndIndices","searchPathAndIdx","prefix","otherTokType","currPathPrefixErrors","currAmbPathAndIdx","buildAlternationPrefixAmbiguityError","AMBIGUOUS_PREFIX_ALTS","checkPrefixAlternativesAmbiguities","validateAmbiguousAlternationAlternatives","topLevelRules","RepetionCollector","currProd","getProdType","pathsInsideProduction","buildEmptyRepetitionError","NO_NON_EMPTY_LOOKAHEAD","validateSomeNonEmptyLookaheadPath","termsNamespaceConflictErrors","tokenNames","currToken","currRuleName","buildNamespaceConflictError","CONFLICT_TOKENS_RULES_NAMESPACE","checkTerminalAndNoneTerminalsNameSpace","tokenNameErrors","validTermsPattern","buildTokenNameError","expectedPattern","INVALID_TOKEN_NAME","validateTokenName","nestedRulesNameErrors","curTopLevel","namedCollectorVisitor","nestedProds","currNestedProd","topLevel","nestedProd","validNestedRuleName","buildInvalidNestedRuleNameError","INVALID_NESTED_RULE_NAME","validateNestedRuleName","validateNestedRulesNames","nestedRulesDuplicateErrors","prodsByGroup","currDupGroup","currDupProds","dupGroup","buildDuplicateNestedRuleNameError","DUPLICATE_NESTED_NAME","validateDuplicateNestedRules","tooManyAltsErrors","curRule","buildTooManyAlternativesError","TOO_MANY_ALTS","validateTooManyAlts","ruleNameErrors","buildInvalidRuleNameError","INVALID_RULE_NAME","validateRuleName","duplicateRulesError","allRules","className","buildDuplicateRuleNameError","DUPLICATE_RULE_NAME","validateRuleDoesNotAlreadyExist","defaultParserErrorProvider","buildMismatchTokenMessage","expected","actual","previous","buildNotAllInputParsedMessage","firstRedundant","buildNoViableAltMessage","expectedPathsPerAlt","customUserDescription","errSuffix","allLookAheadPaths","nextValidTokenSequences","currTokenType","itemMsg","buildEarlyExitMessage","expectedIterationPaths","defaultGrammarResolverErrorProvider","buildRuleNotFoundError","undefinedRule","defaultGrammarValidatorErrorProvider","duplicateProds","topLevelName","duplicateProd","extraArgument","pathMsg","currTok","currtok","currMessage","GastRefResolverVisitor","nameToTopRule","resolveRefs","ref","UNRESOLVED_SUBRULE_REF","unresolvedRefName","refResolver","topRulesTable","rules","assignOccurrenceIndices","methodsCollector","currMethod","arrIdx","MISMATCHED_TOKEN_EXCEPTION","NO_VIABLE_ALT_EXCEPTION","EARLY_EXIT_EXCEPTION","NOT_ALL_INPUT_PARSED_EXCEPTION","RECOGNITION_EXCEPTION_NAMES","isRecognitionException","MismatchedTokenException","previousToken","resyncedTokens","NoViableAltException","NotAllInputParsedException","EarlyExitException","EOF_FOLLOW_KEY","IN_RULE_RECOVERY_EXCEPTION","InRuleRecoveryException","Recoverable","initRecoverable","firstAfterRepMap","resyncFollows","recoveryEnabled","DEFAULT_PARSER_CONFIG","attemptInRepetitionRecovery","getTokenToInsert","tokToInsert","NaN","isInsertedInRecovery","canTokenTypeBeInsertedInRecovery","tryInRepetitionRecovery","grammarRule","grammarRuleArgs","lookAheadFunc","expectedTokType","reSyncTokType","findReSyncTokenType","savedLexerState","exportLexerState","passedResyncPoint","nextTokenWithoutResync","LA","generateErrorMessage","getCurrRuleFullName","SAVE_ERROR","tokenMatcher","SKIP_TOKEN","addToResyncTokens","importLexerState","shouldInRepetitionRecoveryBeTried","expectTokAfterLastMatch","nextTokIdx","notStuck","isBackTracking","canPerformInRuleRecovery","getFollowsForInRuleRecovery","tokIdxInRule","grammarPath","getCurrentGrammarPath","getNextPossibleTokenTypes","tryInRuleRecovery","canRecoverWithSingleTokenInsertion","canRecoverWithSingleTokenDeletion","nextTok","consumeToken","expectedToken","mismatchedTok","possibleFollowsTokType","isInCurrentRuleReSyncSet","followKey","getCurrFollowKey","currentRuleReSyncSet","getFollowSetFromFollowKey","allPossibleReSyncTokTypes","flattenFollowSet","nextToken","RULE_STACK","currRuleShortName","getLastExplicitRuleShortName","currRuleIdx","getLastExplicitRuleOccurrenceIndex","prevRuleShortName","getPreviousExplicitRuleShortName","shortRuleNameToFullName","idxInCallingRule","inRule","buildFullFollowKeyStack","explicitRuleStack","explicitOccurrenceStack","RULE_OCCURRENCE_STACK","LAST_EXPLICIT_RULE_STACK","followStack","resyncTokens","reSyncTo","prodFunc","lookaheadFunc","prodOccurrence","nextToksWalker","getHumanReadableRuleStack","currShortName","firstAfterRepInfo","getGAstProductions","LooksAhead","initLooksAhead","dynamicTokensEnabled","lookAheadFuncsCache","getLaFuncFromCache","getLaFuncFromMap","setLaFuncCache","setLaFuncCacheUsingMap","getLaFuncFromObj","setLaFuncUsingObj","preComputeLookaheadFunctions","collectMethods","prodIdx","laFuncBuilder","laFunc","lookAheadBuilderForAlternatives","fullRuleNameToShort","computeLookaheadFunc","prodKey","prodMaxLookahead","dslMethodName","lookaheadBuilder","buildLookaheadFuncForOptionalProd","lookAheadBuilderForOptional","areAllOneTokenLookahead","numOfPaths","singleTokensTypes","expectedTokenUniqueKey_1","choiceToAlt_2","currExtendingType","currPathLength","buildSingleAlternativeLookaheadFunction","numOfAlts","orAlts","predicates","GATE","currNumOfPaths","currPredicate","singleTokenAlts","choiceToAlt_1","buildAlternativesLookAheadFunc","CstVisitorDefinitionError","FUNC_NAME_REGEXP","functionName","existingNameProp","defineNameProp","nameValue","namePropDescriptor","defaultVisit","ctx","childrenNames","childrenNamesLength","currChildArray","currChildArrayLength","currChild","fullName","createBaseSemanticVisitorConstructor","ruleNames","derivedConstructor","cstNode","validateVisitor","semanticDefinitionErrors","visitorInstance","missingErrors","MISSING_METHOD","methodName","validateMissingCstMethods","redundantErrors","VALID_PROP_NAMES","REDUNDANT_METHOD","validateRedundantMethods","errorMessages","currDefError","_RULE_NAMES","TreeBuilder","initTreeBuilder","CST_STACK","outputCst","nodeLocationTracking","setNodeLocationFromToken","setNodeLocationFromNode","cstPostRule","setInitialNodeLocation","setInitialNodeLocationFullRecovery","cstPostRuleFull","setInitialNodeLocationFullRegular","setInitialNodeLocationOnlyOffsetRecovery","cstPostRuleOnlyOffset","setInitialNodeLocationOnlyOffsetRegular","cstInvocationStateUpdate","cstFinallyStateUpdate","cstPostTerminal","cstPostNonTerminal","getLastExplicitRuleShortNameNoCst","getPreviousExplicitRuleShortNameNoCst","getLastExplicitRuleOccurrenceIndexNoCst","manyInternal","manyInternalNoCst","orInternal","orInternalNoCst","optionInternal","optionInternalNoCst","atLeastOneInternal","atLeastOneInternalNoCst","manySepFirstInternal","manySepFirstInternalNoCst","atLeastOneSepFirstInternal","atLeastOneSepFirstInternalNoCst","cstNestedInvocationStateUpdate","nestedName","shortName","shortRuleNameToFull","fullRuleName","cstNestedFinallyStateUpdate","lastCstNode","ruleCstNode","prevToken","loc","consumedToken","tokenTypeName","rootCst","ruleCstResult","preCstNode","getBaseCstVisitorConstructor","baseCstVisitorConstructor","newBaseCstVisitorConstructor","allRuleNames","getBaseCstVisitorConstructorWithDefaults","baseCstVisitorWithDefaultsConstructor","newConstructor","baseConstructor","withDefaultsProto","createBaseVisitorConstructorWithDefaults","nestedRuleBeforeClause","methodOpts","laKey","nestedRuleInvocationStateUpdate","nestedAltBeforeClause","methodKeyIdx","nestedRuleFinallyClause","cstStack","nestedRuleCst","nestedRuleFinallyStateUpdate","parentCstNode","lastExplictIndex","lastExplicitIndex","nestedRuleName","shortNameKey","LexerAdapter","initLexerAdapter","tokVector","tokVectorLength","newInput","selfAnalysisDone","END_OF_FILE","soughtIdx","resetLexerState","moveToTerminatedState","getLexerPosition","RecognizerApi","ACTION","impl","consume","consumeInternal","ruleToCall","subruleInternal","actionORMethodDef","altsOrOpts","CONSUME","CONSUME1","CONSUME2","CONSUME3","CONSUME4","CONSUME5","CONSUME6","CONSUME7","CONSUME8","CONSUME9","SUBRULE","SUBRULE1","SUBRULE2","SUBRULE3","SUBRULE4","SUBRULE5","SUBRULE6","SUBRULE7","SUBRULE8","SUBRULE9","OPTION1","OPTION2","OPTION3","OPTION4","OPTION5","OPTION6","OPTION7","OPTION8","OPTION9","OR","OR1","OR2","OR3","OR4","OR5","OR6","OR7","OR8","OR9","MANY","MANY1","MANY2","MANY3","MANY4","MANY5","MANY6","MANY7","MANY8","MANY9","MANY_SEP","MANY_SEP1","MANY_SEP2","MANY_SEP3","MANY_SEP4","MANY_SEP5","MANY_SEP6","MANY_SEP7","MANY_SEP8","MANY_SEP9","AT_LEAST_ONE","AT_LEAST_ONE1","AT_LEAST_ONE2","AT_LEAST_ONE3","AT_LEAST_ONE4","AT_LEAST_ONE5","AT_LEAST_ONE6","AT_LEAST_ONE7","AT_LEAST_ONE8","AT_LEAST_ONE9","AT_LEAST_ONE_SEP","AT_LEAST_ONE_SEP1","AT_LEAST_ONE_SEP2","AT_LEAST_ONE_SEP3","AT_LEAST_ONE_SEP4","AT_LEAST_ONE_SEP5","AT_LEAST_ONE_SEP6","AT_LEAST_ONE_SEP7","AT_LEAST_ONE_SEP8","AT_LEAST_ONE_SEP9","RULE","implementation","DEFAULT_RULE_CONFIG","definedRulesNames","definitionErrors","ruleImplementation","defineRule","OVERRIDE_RULE","ruleErrors","INVALID_RULE_OVERRIDE","BACKTRACK","isBackTrackingStack","orgState","saveRecogState","reloadRecogState","gastProductionsCache","getSerializedGastProductions","RecognizerEngine","initRecognizerEngine","tokenVocabulary","ruleShortNameIdx","tokensMap","uniqueTokens","noTokenCategoriesUsed","tokenConstructor","wrappedGrammarRule","resyncEnabled","recoveryValueFunc","invokeRuleWithTry","cst","invokeRuleCatch","ruleFinallyStateUpdate","ruleInvocationStateUpdate","resyncEnabledConfig","isFirstInvokedRule","reSyncEnabled","recogError","partialCstResult","recoveredNode","optionInternalLogic","DEF","orgLookaheadFunction_1","atLeastOneInternalLogic","orgLookaheadFunction_2","raiseEarlyExitException","ERR_MSG","doSingleRepetition","atLeastOneSepFirstInternalLogic","SEP","separatorLookAheadFunc","repetitionSepSecondInternal","manyInternalLogic","lookaheadFunction","orgLookaheadFunction_3","manySepFirstInternalLogic","nextTerminalAfterWalker","beforeIteration","altIdxToTake","ALT","raiseNoAltException","chosenAlternative","nestedAltBeforeClauseResult","isAtEndOfInput","firstRedundantTok","ARGS","subruleInternalError","consumeInternalError","eFromConsumption","consumeInternalRecovery","eFromInRuleRecovery","savedErrors","savedRuleStack","lexerState","ErrorHandler","initErrorHandler","_errors","context","ruleOccurrenceStack","newErrors","userDefinedErrMsg","insideProdPaths","actualTokens","errMsgTypes","lookAheadPathsPerAlternative","ContentAssist","initContentAssist","computeContentAssist","startRuleName","precedingInput","startRuleGast","topRuleName","topProduction","RECORDING_NULL_OBJECT","description","MAX_METHOD_IDX","pow","RFT","RECORDING_PHASE_TOKEN","RECORDING_PHASE_CSTNODE","GastRecorder","initGastRecorder","recordingProdStack","RECORDING_PHASE","enableRecording","arg1","arg2","consumeInternalRecord","subruleInternalRecord","optionInternalRecord","orInternalRecord","manyInternalRecord","manySepFirstInternalRecord","atLeastOneInternalRecord","atLeastOneSepFirstInternalRecord","ACTION_RECORD","BACKTRACK_RECORD","LA_RECORD","disableRecording","topLevelRuleRecord","newTopLevelRule","originalError","KNOWN_RECORDER_ERROR","mutabilityError","recordProd","recordOrProd","assertMethodIdxIsValid","getIdxSuffix","JSON","stringify","prevProd","newNoneTerminal","prodConstructor","mainProdArg","handleSep","grammarAction","newProd","MAX_LOOKAHEAD","hasOptions","newOrProd","IGNORE_AMBIGUITIES","currAltFlat","PerformanceTracer","initPerformanceTracer","userTraceInitPerf","traceIsNumber","EMPTY_ALT","Parser","performSelfAnalysis","parserInstance","defErrorsMsgs","originalGrammarAction","recordedRuleGast","resolverErrors","validationErrors","topProductions","reSyncFollows","allFollows","currRefsFollow","fullToShortName","cstAnalysisResult","currTopRuleShortName","DEFER_DEFINITION_ERRORS_HANDLING","CstParser","configClone","EmbeddedActionsParser","createSyntaxDiagramsCode","grammar","_b","_c","resourceBase","_d","css","NL","genClass","genDefinition","genAlternation","altDef","genSingleAlt","genProd","genNonTerminal","genDSLRule","genTerminal","genDefFunction","generateParserFactory","wrapperText","genWrapperFunction","constructorWrapper","generateParserModule","genUmdModule","clearCache","error_to_json","Server","perspective","_tables","_views","_callback_cache","init","clear_views","client_id","process","eval","tbl","process_method_call","process_error","process_subscribe","ev","remove_method","process_method_call_response","catch","workerPath","__WEBPACK_EXTERNAL_MODULE__0__","__WEBPACK_EXTERNAL_MODULE__1__","__WEBPACK_EXTERNAL_MODULE__3__","__WEBPACK_EXTERNAL_MODULE__4__","__WEBPACK_EXTERNAL_MODULE__6__","__WEBPACK_EXTERNAL_MODULE__8__","__WEBPACK_EXTERNAL_MODULE__9__","__WEBPACK_EXTERNAL_MODULE__10__","__WEBPACK_EXTERNAL_MODULE__24__","__WEBPACK_EXTERNAL_MODULE__25__","__WEBPACK_EXTERNAL_MODULE__26__","__WEBPACK_EXTERNAL_MODULE__27__","__WEBPACK_EXTERNAL_MODULE__29__","bindTemplate","template","styleStrings","cls","templateString","styleString","div","innerHTML","createDocumentFragment","firstChild","Node","getAttribute","old","hasAttribute","_initializing","setAttribute","customElements","attributeChangedCallback","connectedCallback","importNode","attachShadow","shadowRoot","super","registerElement","_attribute","_default","desc","old_set","attr","parse","copy_to_clipboard","csv","element","body","select","execCommand","removeChild","invertPromise","promise","_resolve","throttlePromise","lock","async","swap","container","elems","classList","insertBefore","json_attribute","array_attribute","RENDERERS","renderers","registerPlugin","plugin","old_plugin","getPlugin","getInstance","__perspective_plugins__","register_debug_plugin","_view","delimiter","_render_time","render","selectMode","resize","useSourceMap","list","sourceMap","cssMapping","btoa","sourceMapping","unescape","encodeURIComponent","sourceURLs","sourceRoot","mediaQuery","alreadyImportedModules","EVENT_DRAG_DRAGSTART_PENDING","EVENT_PREFIX","EVENT_DRAG_DRAGSTART_CANCEL","ALLOWED_EFFECTS","DROP_EFFECTS","supportsPassive","supportsPassiveEventListeners","opts","isDOMElement","tagName","addDocumentListener","passive","removeDocumentListener","removeEventListener","onEvt","el","off","average","isTouchIdentifierContainedInTouchEvent","touchEvent","touchIdentifier","changedTouches","identifier","updateCentroidCoordinatesOfTouchesIn","coordinateProp","outPoint","pageXs","pageYs","touches","touch","TRANSFORM_CSS_VENDOR_PREFIXES","translateElementToPoint","pnt","originalTransforms","centerOnCoordinates","offsetWidth","offsetHeight","translate","transformProp","DataTransfer","_dataStore","_setDragImageHandler","_dropEffect","effectAllowed","setData","getData","clearData","format","setDragImage","determineDropEffect","sourceNode","dispatchDragEvent","dragEvent","targetElement","dataStore","dataTransfer","cancelable","relatedTarget","leaveEvt","dndEvent","Event","bubbles","screenX","screenY","clientX","clientY","pageX","pageY","targetRect","getBoundingClientRect","offsetX","left","offsetY","top","defaultView","cancelled","determineDragOperation","dropEffect","DragOperationController","_initialEvent","_config","_sourceNode","_dragOperationEndedCb","_dragOperationState","_immediateUserSelection","_currentDropTarget","_lastTouchEvent","_initialTouch","_touchMoveHandler","_onTouchMove","_touchEndOrCancelHandler","_onTouchEndOrCancel","_setup","_currentDragOperation","_dragDataStore","_currentHotspotCoordinates","_dragImagePageCoordinates","dragImageSrc","_dataTransfer","_dragImageOffset","_cleanup","dragImage","dragImageSetup","_dragImageTransforms","transform","zIndex","add","CLASS_PREFIX","_dragImage","dragImageOffset","dragImageCenterOnTouch","cs","getComputedStyle","marginLeft","marginTop","width","height","_iterationIntervalId","setInterval","_iterationLock","_dragAndDropProcessModelIteration","iterationInterval","clearInterval","parentNode","startDrag","dragStartConditionOverride","preventDefault","dragImageTranslateOverride","handledDragImageTranslate_1","previousDragOperation","dragCancelled","_dragOperationEnded","sourceEl","dragImageTransforms","transitionEndCb","visibility","csDragImage","durationInS","parseFloat","transitionDuration","rect","scrollLeft","documentElement","scrollTop","delayInS","transitionDelay","durationInMs","round","setTimeout","_finishDragOperation","newUserSelection","elementFromPoint","previousTargetElement","currentDragOperationClass","dragFailed","tryFindDraggableTarget","draggable","cloneNode","prepareNodeCopyAsDragImage","srcNode","dstNode","csName","setProperty","getPropertyValue","getPropertyPriority","pointerEvents","removeAttribute","nodeName","canvasSrc","canvasDst","canvasSrcImgData","getContext","getImageData","putImageData","hasChildNodes","childNodes","activeDragOperation","onTouchstart","composePath","dragTarget","dragOperationEnded","err","onDelayTouchstart","evt","composedPath","onReleasedItem","end","cancel","move","scroll","CustomEvent","clearTimeout","holdToDrag","defaultActionOverride","defaultPrevented","override","forceApply","detectedFeatures","features","dragEvents","userAgentSupportingNativeDnD","isBlinkEngine","chrome","navigator","userAgent","cp","_path","SPAN","get_text_width","fontFamily","fontSize","awesomplete_style","querySelector","_option_template","agg","_select_template","category","items","weighted_options","_weights","has_weighted_mean","nothing","set_weights","xs","elem","type_config","agg_dropdown","filter_dropdown","aggregate","filter_operand","_callback","_update_filter","choices","filter_operator","selector","Awesomplete","minChars","autoFirst","FILTER_CONTAINS","ITEM","before","evaluate","focus","_filter_operand","trim","operator","filter_input","operand","FILTER_OPERATORS","isNull","isNotNull","_blur_agg_dropdown","_get_computed_data","column_name","input_columns","input_type","computation","isIn","isNotIn","detail","_set_data_transfer","_register_ids","_li","_visible","_row_close","_agg_dropdown","_sort_order","_filter_operator","_edit_computed_column_button","_column_aggregate_category","blur","querySelectorAll","_focus_agg_dropdown","_register_callbacks","debounced_filter","debounce","displayed","_selection_index","markup","_details","_container","_list","reposition","warning","item_clicked","matches","item_mouseover","_render_details_panel","item_mouseleave","get_selected_value","hide","_next","count","_go_to","_prev","scrollIntoView","block","_clear_details_panel","help","signature","_value","_ignored_nodes","renderer","_render_content","set_renderer","render_function","update_content","selection","getSelection","get_tokens","_edit_area","input_event","nodes","textContent","anchor_idx","focus_idx","current_idx","anchorNode","anchorOffset","focusNode","focusOffset","clear_content","restore_selection","rendered_event","absolute_anchor_idx","absolute_focus_idx","anchor_node","focus_node","start_idx","end_idx","setBaseAndExtent","get_text","TEXT_NODE","nodeValue","ELEMENT_NODE","keyup","keydown","_capture_drop_data","parsed","_reset_selection","token_name_to_display_name","columnName","leftParen","rightParen","subtract","multiply","divide","percent_of","actual_token_to_string","PerspectiveLexerErrorMessage","PerspectiveParserErrorMessage","vocabulary","OperatorTokenType","FunctionTokenType","ColumnNameTokenType","UpperLowerCaseTokenType","COLUMN_NAME_REGEX_PATTERN","ColumnName","string","start_offset","line_breaks","As","longer_alt","Add","Subtract","Multiply","Divide","Pow","PercentOf","Equals","NotEquals","GreaterThan","LessThan","Is","Sqrt","Pow2","Abs","Invert","Log","Exp","Bin10","Bin100","Bin1000","Bin10th","Bin100th","Bin1000th","Length","Lowercase","Uppercase","ConcatComma","ConcatSpace","HourOfDay","DayOfWeek","MonthOfYear","SecondBucket","MinuteBucket","HourBucket","DayBucket","WeekBucket","MonthBucket","YearBucket","LeftParen","RightParen","Comma","Whitespace","function_tokens","operator_tokens","raw","clean_tokens","cleaned_tokens","ComputedExpressionColumnParser","Expression","OperatorComputedColumn","AdditionOperatorComputedColumn","Operator","MultiplicationOperatorComputedColumn","AdditionOperator","ExponentOperatorComputedColumn","MultiplicationOperator","ExponentOperator","TerminalColumnName","ParentheticalExpression","FunctionComputedColumn","COMPUTED_FUNCTION_FORMATTERS","invert","exp","pow2","sqrt","bin10","bin100","bin1000","bin10th","bin100th","bin1000th","uppercase","lowercase","is","concat_space","concat_comma","hour_of_day","day_of_week","month_of_year","second_bucket","minute_bucket","hour_bucket","day_bucket","week_bucket","month_bucket","year_bucket","token_types","ComputedExpressionAutocompleteSuggestion","input_types","return_type","num_params","is_column_name","COMPUTED_EXPRESSION_PARSER","is_initialized","_vocabulary","_tokens","_metadata","_lexer","_parser","_visitor","_construct_lexer","_construct_parser","_construct_visitor","lex","expression","_check_initialized","lex_result","SuperExpression","get_autocomplete_suggestions","lexer_result","match_types","initial_suggestions","_apply_suggestion_metadata","partial_function","extract_partial_function","last_token","get_last_token","suggestions","exact_matches","fuzzy_matches","suggestion","lower_value","lower_input","last_idx","get_last_token_with_types","limit","bin_functions","meta","_make_token","bin_function","regex","base_visitor","computed_columns","_VisitOperatorComputedColumn","get_operator","final_column_name","right","rhs","left_hand","as","computed_function_name","inputs","computed","equals","not_equals","greater_than","less_than","suggestions_with_metadata","_parsed_expression","expressions","_valid","_expression_editor","render_expression","_editor_observer","MutationObserver","_resize_editor","_autocomplete","_position_autocomplete","_observe_editor","observe","attributes","attributeFilter","disconnect","_get_type","_make_column_name_suggestions","_computed_expression_parser","offsets","token_map","output","_get_view_all_column_names","class_name","exists","make_autocomplete_markup","_clear_error","_disable_save_button","name_fragments","has_name_fragments","show_column_names","is_paren","is_alias","last_function_or_operator","column_names","_get_view_column_names_by_types","column_name_suggestions","fragment","_set_error","_error","parsed_expression","expected_types","invalid","col","_enable_save_button","_save_expression","_save_button","editor","last_span","lastChild","offset_left","offsetLeft","offset_width","offset_top","offsetTop","_autocomplete_replace","new_value","old_value","last_input","innerText","final_value","last_word","lastIndexOf","last_word_is_column_name","new_is_column_name","last_word_idx","partials_inside_func","stripped_last","_autocomplete_item_clicked","_clear_expression_editor","_close_expression_widget","_side_panel_actions","_editor_keydown","stopPropagation","metaKey","ctrlKey","parentElement","_close_button","_validate_expression","calc_index","_active_columns","is_last_null","cidx","last_index","dragend","getRootNode","parent","attr_name","attr_value","currentTarget","_drop_target_hover","data_index","filtering","_plugin","deselectMode","_get_visible_column_count","_update_column_view","_debounce_update","column_dragend","column_dragleave","_drop_target_null","replaceChild","_original_index","_unset_drop_target_null","column_swap","new_index","column_replace","column_dragover","toggleAttribute","current_index","over_elem","to_replace","is_diff","from_active","from_replace","from_append","from_required","to_null","column_drop","dragenter","dragover","dragleave","CancelTask","on_cancel","_on_cancel","_cancelled","StateElement","current_renderers","_get_view_dom_columns","_get_view_all_columns","_get_view_active_columns","_get_view_active_valid_columns","_get_view_inactive_columns","_get_view_active_column_names","_get_view_all_valid_column_names","_get_view_active_valid_column_names","_get_view_active_valid_column_count","viewer_columns","_get_view_columns","active","_get_view_aggregates","op","_get_view_row_pivots","_get_view_column_pivots","_get_view_filter_nodes","_get_view_filters","_get_view_sorts","order","_get_view_computed_columns","_get_view_parsed_computed_columns","get_aggregate_attribute","aggs","Set","new_aggs","_aggregate_defaults","numberWithCommas","TYPE_ORDER","float","boolean","datetime","date","column_sorter","s1","s2","_total_template","total","_nowrap_template","_warning","strings","flatMap","PerspectiveElement","_validate_parsed_computed_columns","validated","_set_updating","_clear_state","_table","computed_functions","cols","all","_initial_col_order","parsed_computed_columns","computed_expressions","computed_column_names","aggregates","aggregate_attribute","TYPE_AGGREGATES","shown","_clear_columns","row","_new_row","_inactive_columns","active_row","_show_column_container","_show_side_panel_actions","filters","_edit_port","_edit_port_lock","force_update","max_cols","max_rows","schema_columns","max_columns","column_group_diff","column_limit","max_cells","_show_warnings","columns_are_truncated","rows_are_truncated","_plugin_information","_plugin_information_message","_calculate_throttle_timeout","timeout","throttle","__render_times","_view_on_update","limit_points","_debounced","_task","task","updater","get_maxes","_warn_render_size_exceeded","_datavis","operandNode","getElementById","exclamation","title","borderColor","hidden","_is_config_changed","plugin_name","isEqual","_previous_config","_previous_plugin_name","ignore_size_check","_check_responsive_layout","row_pivots","column_pivots","_validate_filters","view_aggregates","_view_updater","_render_count","_check_loaded_table","_load_table","performance","now","unshift","_restyle_plugin","styleElement","clear_table","_owner_viewer","_updating_promise","_register_debounce_instance","_update","_new_view","_get_worker","shared_worker","DomElement","set_aggregate_attribute","is_set","_set_row_type","weights","json","_autocomplete_choices","_column_visibility_clicked","_column_aggregate_clicked","_column_filter_clicked","_sort_order_clicked","overflow","findIndex","_update_computed_column_view","added_count","reset_columns_attr","_diff_computed_column_view","old_computed_columns","new_computed_columns","to_remove","new_names","_reset_computed_column_view","computed_names","filtered_active","rp","inactive_computed","pop_cols","lis","_update_column_list","accessor","active_columns","next_col","_set_row_styles","nidx","_remove_null_columns","since_index","_set_column_defaults","active_cols","valid_active_cols","pref","_fill_numeric","labels","bypass","app","clientHeight","clientWidth","_persisted_side_panel_width","_side_panel","panel","_pre_resize","_aggregate_selector","_vis_selector","_filters","_row_pivots","_column_pivots","_add_computed_expression_button","_computed_expression_widget","_inner_drop_target","_drop_target","_config_button","_reset_button","_download_button","_copy_button","_top_panel","_sort","_transpose_button","_plugin_information_action","_plugin_information_action_close","_resize_bar","_register_view_options","_register_data_attribute","load","row_path","__ROW_PATH__","ActionElement","_show_context_menu","toggle","_hide_context_menu","button","_show_config","_post_resize","pre","offsetParent","_open_computed_expression_widget","stopImmediatePropagation","_save_computed_expression","_type_check_expression","functions","_clear_all_computed_expressions","_set_computed_expression","min_columns","shiftKey","new_aggregates","updated_agg","new_filters","_updating_filter","_increment_sort","column_sorting","abs_sorting","sort_orders","new_sort_order","_transpose","has_row","has_col","_reset_sidepanel","_resize_sidepanel","cursor","new_width","notifyResize","stop","_vis_selector_changed","classname","_type_check_computed_expression","_toggle_config","copy","download","PERSISTENT_ATTRIBUTES","view_style","default_style","_resize_handler","toggleConfig","dir","show","diff","old_columns","fterms","plugin_names","guess_plugin","pivots","pivot","isConnected","immediate","clone","widget","restore","save","delete_table","restyleElement","plugin_config","_load","flat","binStr","click","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","toAbsoluteIndex","IS_INCLUDES","getBuiltIn","ownKeys","getOwnPropertyDescriptorModule","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","feature","detection","normalize","POLYFILL","NATIVE","minimumFractionDigits","maximumFractionDigits","week","year","month","day","hour","minute","null_value","regexpExec","SPECIES","REPLACE_SUPPORTS_NAMED_GROUPS","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","nativeMethod","forceStringMethod","stringMethod","regexMethod","arg","RE","R","ua","msie","rv","edge","HEARTBEAT_TIMEOUT","CLIENT_ID_GEN","WebSocketClient","ws","_ws","binaryType","onopen","heartbeat","onmessage","_pending_arrow","_pending_port_id","new_data_with_port_id","port_id","is_transferable","byteLength","pre_msg","onclose","WebSocketManager","requests_id_map","requests","websockets","isAlive","add_connection","on","_is_transferable","new_args","_is_transferable_pre_message","compoundId","req","readyState","_host","cache","host_table","host_view","eject_table","eject_view","toNumber","FUNC_ERROR_TEXT","nativeMax","nativeMin","wait","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","flush","isSymbol","NAN","reTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","isBinary","isObjectLike","symbolTag","objectProto","nativeObjectToString","isOwn","unmasked","_","me","isOpened","instance","properties","attrValue","configure","maxItems","DATA","SORT_BYLENGTH","CONTAINER","tabSelect","ul","role","inside","status","_events","keyCode","opened","selected","form","li","Suggestion","disabled","activeElement","fire","goto","destroy","unbind","indexOfAwesomplete","originalEvent","siblingIndex","regExpEscape","FILTER_STARTSWITH","around","item_id","expr","con","$$","previousElementSibling","Document","baseIsEqual","baseIsEqualDeep","Stack","equalArrays","equalByTag","equalObjects","getTag","argsTag","arrayTag","objectTag","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","stackClear","stackDelete","stackGet","stackHas","stackSet","assocIndexOf","LARGE_ARRAY_SIZE","pairs","isMasked","toSource","reIsHostCtor","funcProto","reIsNative","coreJsData","maskSrcKey","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","HASH_UNDEFINED","getMapData","setCacheAdd","setCacheHas","mapToArray","setToArray","boolTag","dateTag","errorTag","mapTag","numberTag","regexpTag","setTag","stringTag","arrayBufferTag","dataViewTag","symbolProto","symbolValueOf","byteOffset","buffer","convert","getAllKeys","objProps","objLength","skipCtor","objValue","objCtor","othCtor","baseGetAllKeys","getSymbols","arrayPush","keysFunc","symbolsFunc","arrayFilter","stubArray","nativeGetSymbols","symbol","resIndex","arrayLikeKeys","baseKeys","isArrayLike","baseTimes","isArguments","isIndex","inherited","isArg","isBuff","isType","skipIndexes","iteratee","baseIsArguments","reIsUint","isLength","typedArrayTags","freeProcess","binding","isPrototype","nativeKeys","Ctor","overArg","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ctorString","createTypedArrayConstructor","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","anInstance","toIndex","toOffset","typedArrayFrom","setSpecies","inheritIfRequired","fromList","addGetter","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","wrapper","CLAMPED","BYTES","CONSTRUCTOR_NAME","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","exported","addElement","dummy","typedArrayOffset","$length","$len","checkCorrectnessOfIteration","iterable","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","redefineAll","IEEE754","arrayFill","NativeArrayBuffer","$ArrayBuffer","$DataView","$DataViewPrototype","packIEEE754","pack","unpackIEEE754","unpack","packInt8","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","isLittleEndian","intIndex","bytes","conversion","ArrayBufferPrototype","testView","nativeSetInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","LN2","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","rt","sign","nBits","argumentsLength","endPos","toPositiveInteger","getIteratorMethod","isArrayIteratorMethod","step","mapfn","mapping","iteratorMethod","arraySpeciesCreate","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","callbackfn","specificCreate","boundFunction","originalArray","Wrapper","NewTarget","NewTargetPrototype","USE_NATIVE_URL","arrayFrom","toASCII","URLSearchParamsModule","NativeURL","getInternalSearchParamsState","getState","getInternalURLState","ALPHA","ALPHANUMERIC","DIGIT","HEX_START","OCT","DEC","HEX","FORBIDDEN_HOST_CODE_POINT","FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT","LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE","TAB_AND_NEW_LINE","parseHost","codePoints","parseIPv6","isSpecial","parseIPv4","percentEncode","C0ControlPercentEncodeSet","partsLength","numbers","part","radix","ipv4","parts","numbersSeen","ipv4Piece","swaps","address","pieceIndex","compress","pointer","serializeHost","ignore0","ipv6","maxIndex","currStart","currLength","findLongestZeroSequence","fragmentPercentEncodeSet","pathPercentEncodeSet","userinfoPercentEncodeSet","specialSchemes","ftp","http","https","wss","scheme","includesCredentials","password","cannotHaveUsernamePasswordPort","cannotBeABaseURL","isWindowsDriveLetter","normalized","startsWithWindowsDriveLetter","third","shortenURLsPath","pathSize","isSingleDot","segment","SCHEME_START","SCHEME","NO_SCHEME","SPECIAL_RELATIVE_OR_AUTHORITY","PATH_OR_AUTHORITY","RELATIVE","RELATIVE_SLASH","SPECIAL_AUTHORITY_SLASHES","SPECIAL_AUTHORITY_IGNORE_SLASHES","AUTHORITY","HOST","HOSTNAME","PORT","FILE","FILE_SLASH","FILE_HOST","PATH_START","PATH","CANNOT_BE_A_BASE_URL_PATH","QUERY","FRAGMENT","parseURL","stateOverride","base","bufferCodePoints","failure","seenAt","seenBracket","seenPasswordToken","port","query","codePoint","encodedCodePoints","URLConstructor","baseState","urlString","searchParamsState","updateSearchParams","updateURL","serializeURL","getOrigin","protocol","getProtocol","getUsername","getPassword","getHost","getHostname","getPort","getPathname","getSearch","getSearchParams","getHash","URLPrototype","accessorDescriptor","nativeCreateObjectURL","nativeRevokeObjectURL","revokeObjectURL","point","nativeAssign","A","B","chr","T","callWithSafeIterationClosing","createProperty","arrayLike","ENTRIES","returnMethod","propertyKey","regexNonASCII","regexSeparators","OVERFLOW_ERROR","stringFromCharCode","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","encode","currentValue","inputLength","counter","extra","ucs2decode","bias","basicLength","handledCPCount","handledCPCountPlusOne","q","qMinusT","baseMinusT","encoded","hasOwn","getIterator","$fetch","Headers","getInternalParamsState","getInternalIteratorState","URL_SEARCH_PARAMS","plus","sequences","percentSequence","percentDecode","sequence","decodeURIComponent","deserialize","serialize","parseSearchParams","attribute","validateArgumentsLength","passed","required","URLSearchParamsIterator","params","URLSearchParamsConstructor","entryIterator","entryNext","URLSearchParamsPrototype","append","getAll","entriesIndex","sliceIndex","fetch","headers","$jscomp.defineProperty","$jscomp.global","$jscomp.initSymbol","$jscomp.Symbol","$jscomp.SYMBOL_PREFIX","$jscomp.arrayIterator","$jscomp.initSymbolIterator","$jscomp.iteratorPrototype","$jscomp.setPrototypeOf","$jscomp.generator.Context","$jscomp.generator.Generator_","$jscomp.generator.Engine_","origPreventDefault","Event.prototype.preventDefault","isIE","window.CustomEvent","inType","initCustomEvent","origEvent","window.Event","MouseEvent","origMouseEvent","window.MouseEvent","initMouseEvent","altKey","Array.from","Object.assign","n$","WebComponents","PolyfilledHTMLTemplateElement","QSA","DOCUMENT_NODE","docQuerySelectorAll","DOCUMENT_FRAGMENT_NODE","fragQuerySelectorAll","elementQuerySelectorAll","needsTemplate","HTMLTemplateElement","brokenDocFragment","DocumentFragment","needsDocFrag","newNode","refNode","origInsertBefore","origCloneNode","Node.prototype.cloneNode","deep","newDom","HTMLElement","origAppendChild","Node.prototype.appendChild","origRemoveChild","origReplaceChild","Node.prototype.replaceChild","newChild","oldChild","Document.prototype.createDocumentFragment","frag","origImportNode","Document.prototype.importNode","impNode","capturedCloneNode","capturedCreateElement","capturedImportNode","capturedRemoveChild","capturedAppendChild","capturedReplaceChild","capturedParseFromString","DOMParser","parseFromString","capturedHTMLElementInnerHTML","capturedChildNodes","Element","needsCloning","t2","contentDoc","createHTMLDocument","canDecorate","templateStyle","head","firstElementChild","canProtoPatch","decorate","PolyfilledHTMLTemplateElement.decorate","namespaceURI","template.cloneNode","_cloneNode","defineInnerHTML","defineOuterHTML","bootstrap","topLevelWrappingMap","getInnerHTML","wrap","docFrag","ownerDocument","PolyfilledHTMLTemplateElement.bootstrap","doc","templates","TEMPLATE_TAG","Document.prototype.createElement","localName","DOMParser.prototype.parseFromString","escapeAttrRegExp","escapeDataRegExp","escapeReplace","voidElements","makeSet","plaintextParents","c$","attrs","COMMENT_NODE","PolyfilledHTMLTemplateElement._cloneNode","fixClonedDom","s$","t$","dom","scripts","scriptSelector","ai","setTimeoutFunc","noop","_state","_handled","_deferreds","doResolve","handle","deferred","_immediateFn","cb","onFulfilled","onRejected","ret","newValue","finale","_unhandledRejectionFn","Handler","ex","Promise.prototype.then","prom","$jscompDefaultExport","Promise.all","remaining","Promise.resolve","Promise.reject","race","Promise.race","setImmediate","Promise._unhandledRejectionFn","createTextNode","callbacks","characterData","PromisePolyfill._immediateFn","globalSymbolRegistryList","make","defProps","defProp","defValue","w","supportsAccessors","SymbolProto","xSymbol","descString","__description__","__tag__","stringKey","keyFor","sym","substr","hasInstance","isConcatSpreadable","species","unscopables","module$node_modules$es_symbol$dist$symbol.default","$jscomp.generator.createGenerator","script","flagMatcher","forceShady","forceCE","ShadyData","publicRoot","dirty","flattenedNodes","_prevAssignedSlot","_previouslyAssignedNodes","assignedSlot","assignedNodes","observer","nextSibling","previousSibling","ownerShadyRoot","__insideAccessors","__outsideAccessors","__onCallbackListeners","ensureShadyDataForNode","__shady","shadyDataForNode","settings","hasNativeShadowDOM","hasDescriptors","inUse","IS_IE","IS_EDGE","isTrackingLogicalChildNodes","nodeData","isShadyRoot","_localName","ownerShadyRootForNode","useNativeAccessors","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","extend","pd","extendAll","twiddle","queue","microtask","hasDocumentContains","createPolyfilledHTMLCollection","nodes.item","namedItem","nodes.namedItem","$jscomp.makeIterator","scheduled","flushList","enqueue","didFlush","AsyncObserver","_scheduled","addedNodes","removedNodes","mutations","takeRecords","windowAddEventListener","Window","windowRemoveEventListener","elementQuerySelector","fragmentQuerySelector","documentQuerySelector","fragmentQuerySelectorAll","documentQuerySelectorAll","nodeWalker","createTreeWalker","NodeFilter","SHOW_ALL","elementWalker","SHOW_ELEMENT","currentNode","lastElementChild","nextElementSibling","textWalker","SHOW_TEXT","nativeProtos","findNodeDescriptor","nodeAccessors","fragmentAccessors","documentAccessors","accessors","nativeTreeAccessors","nativeTreeWalker","clearNode","inertDoc","nativeIsConnectedAccessors","nativeIsConnected","nativeActiveElementDescriptor","OutsideAccessors","ClassNameAccessor","InsideAccessors","childNodes.item","childElementCount","tc","cn","nativeAccessors","containerName","htmlContainer","createElementNS","newContent","ShadowRootAccessor","ActiveElementAccessor","nativeContains","activeRoot","patchAccessorGroup","descriptors","force","objDesc","patchAccessors","patchOutsideElementAccessors","sd","patchInsideElementAccessors","linkNode","ref_node","containerData","ref_nodeData","psd","nsd","recordChildNodes","refData","ownerRoot","slotsAdded","allowNativeInsert","slots","_pendingSlots","_addSlots","_ensureSlotData","_slotList","_slotMap","$jscomp.arrayFromIterator","_asyncRender","resetTo","parentData","hasShadowRootWithSlot","firstComposedNode","composed","flattened","nativeMethods","adoptNode","scheduleObserver","preventNativeRemove","removeOwnerShadyRoot","_removeContainedSlots","changeSlotContent","_validateSlots","slot","_removeFlattenedNodes","didRemove","removingInsertionPoint","_hasInsertionPoint","distributeAttributeChange","_updateSlotName","oldName","__slotName","_nameForSlot","_sortSlots","addedNode","removedNode","schedule","matcher","halter","queryElements","elements","scopingShim","eventWrappersName","composedGetter","composedProp","alwaysComposed","unpatchedEvents","pathComposer","startNode","current","startRoot","retarget","refNodePath","ancestor","lastRoot","rootIdx","eventMixin","__composed","isTrusted","__composedPath","__relatedTarget","__relatedTargetComposedPath","__propagationStopped","__immediatePropagationStopped","mixinComposedFlag","Base","klazz","mixin","nonBubblingEventsToRetarget","hasRetargeted","fireHandlers","phase","hs","__handlers","retargetNonBubblingEvent","lastFiredRoot","AT_TARGET","findListener","wrappers","once","savedType","savedListener","savedCapture","savedOnce","savedPassive","savedNode","fnOrObj","optionsOrCapture","handlerType","handleEvent","ael","__shadyTarget","wrapperFn","patchEvent","lastCurrentTargetDesc","eventPhase","BUBBLING_PHASE","CAPTURING_PHASE","rel","patchProto","__sourceProto","PatchedEvent","PatchedCustomEvent","PatchedMouseEvent","newSplice","addedCount","removed","calcSplices","currentEnd","oldEnd","currentStart","oldStart","prefixCount","suffixCount","minLength","index1","index2","rowCount","columnCount","distances","north","west","edits","EDIT_ADD","EDIT_DELETE","northWest","EDIT_LEAVE","EDIT_UPDATE","splices","oldIndex","previousValue","rootRendered","ShadyRootConstructionToken","isRendering","ancestorList","ancestors","ShadyRoot","SHADYROOT_NAME","_mode","hostData","MODE_CLOSED","rootData","_hasRendered","_renderPending","_render","_getRenderRoot","renderRoot","_rendererForHost","_isInsertionPoint","_distributeNodeToSlot","forcedSlot","oldSlot","CATCHALL_NAME","_addAssignedToFlattenedNodes","assigned","nestedAssigned","_fireSlotChange","slotData","_mapSlots","slotNamesToSort","listA","listB","nA","nB","wasRendering","_distribute","_clearSlotAssignedNodes","slotParentRoot","slotParentData","prevAssignedNodes","_compose","composeList","_composeNode","_updateChildNodes","connectMap","__shadydom_connectedCallback","__shadydom_disconnectedCallback","connected","disconnected","disconnectedCallback","ManageConnect","connectFlag","base.prototype.__shadydom_connectedCallback","base.prototype.__shadydom_disconnectedCallback","getAssignedSlot","windowMixin","nodeMixin","ATTRIBUTE_NODE","nc","IsConnectedAccessor","textMixin","fragmentMixin","useNative","slotMixin","elementMixin","documentMixin","nativeBlur","htmlElementMixin","shadowActive","shadyData","eventName","shadowRootMixin","patchBuiltin","ShadyDOM","patch","filterMutations","targetRootNode","mutation","mutationInScope","_observer","_node","unobserveChildren","activateFocusEventOverrides","composedClickFn","patchEvents","nativeHTMLElement","Text","HTMLSlotElement","patchShadowRootAccessors","ShadowRoot","reservedTagList","isValidCustomElementName","reserved","validForm","nativeValue","__CE_isImportDocument","nextSiblingOrAncestorSibling","walkDeepDescendantElements","visitedImports","import","__CE_shadowRoot","setPropertyUnchecked","destination","CustomElementInternals","_localNameToDefinition","_constructorToDefinition","_patches","_hasPatches","addPatch","listener","patchTree","connectTree","custom","__CE_state","upgradeElement","disconnectTree","patchAndUpgradeTree","upgrade","gatherElements","__CE_hasRegistry","__CE_documentLoadHandled","clonedVisitedImports","constructionStack","failed","__CE_definition","observedAttributes","DocumentConstructionObserver","internals","_internals","_document","_handleMutations","childList","subtree","Deferred","_promise","CustomElementRegistry","_elementDefinitionIsRunning","_whenDefinedDeferred","_flushCallback","this._flushCallback","_flushPending","_pendingDefinitions","_documentConstructionObserver","__CE_patched","oldValue","SyntaxError","getCallback","callbackValue","adoptedCallback","setDefinition","_flush","pendingDefinitions","elementsWithStableDefinitions","elementsWithPendingDefinitions","pendingElements","pendingUpgradableElements","upgrade.prototype","get.prototype","whenDefined.prototype","CustomElementRegistry$$module$node_modules$$webcomponents$custom_elements$src$CustomElementRegistry_prototype$whenDefined","whenDefined","prior","polyfillWrapFlushCallback.prototype","polyfillWrapFlushCallback","outer","Document_createElement","Document_createElementNS","Document_importNode","Document_prepend","Document_append","DocumentFragment_prepend","DocumentFragment_append","Node_cloneNode","Node_appendChild","Node_insertBefore","Node_removeChild","Node_replaceChild","Node_textContent","Element_attachShadow","Element_innerHTML","Element_getAttribute","Element_setAttribute","Element_removeAttribute","Element_getAttributeNS","getAttributeNS","Element_setAttributeNS","setAttributeNS","Element_removeAttributeNS","removeAttributeNS","Element_insertAdjacentElement","Element_insertAdjacentHTML","Element_prepend","Element_append","Element_before","Element_after","Element_replaceWith","Element_remove","HTMLElement_innerHTML","HTMLElement_insertAdjacentElement","HTMLElement_insertAdjacentHTML","AlreadyConstructedMarker","builtIn","appendPrependPatch","builtInMethod","connectedElements","prepend","priorCustomElements","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElement.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_importNode.call","NS_HTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_createElementNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Document_append","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.DocumentFragment_append","patch_textContent","baseDescriptor","assignedValue","childNodesLength","insertedNodes","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_insertBefore.call","nativeResult","nodeWasConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_appendChild.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_cloneNode.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_removeChild.call","nodeToInsert","nodeToRemove","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_replaceChild.call","nodeToInsertWasConnected","thisIsConnected","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Node_textContent.get","patch_innerHTML","htmlString","removedElements","patch_insertAdjacentElement","baseMethod","wasConnected","insertedElement","patch_insertAdjacentHTML","upgradeNodesInRange","marker","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_attachShadow.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_innerHTML.get","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_innerHTML.get","isTemplate","rawElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_setAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_getAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttribute.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_removeAttributeNS.call","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentElement","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.HTMLElement_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_insertAdjacentHTML","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_prepend","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_append","beforeAfterPatch","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_before","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_after","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_replaceWith","$jscompDefaultExport$$module$node_modules$$webcomponents$custom_elements$src$Patch$Native.Element_remove","StyleNode","parseCss","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.comments","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.port","OPEN_BRACE","CLOSE_BRACE","_expandUnicodeEscapes","repeat","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.multipleSpaces","AT_START","MEDIA_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MEDIA_RULE","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.keyframesRule","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.KEYFRAMES_RULE","VAR_START","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.MIXIN_RULE","types$$module$node_modules$$webcomponents$shadycss$src$css_parse.STYLE_RULE","r$","STYLE_RULE","nativeCssVariables_","KEYFRAMES_RULE","MEDIA_RULE","MIXIN_RULE","comments","customProp","mixinProp","mixinApply","varApply","keyframesRule","multipleSpaces","nativeShadow","calcCssVariables","CSS","supports","ShadyCSS","nativeCss","nativeCssVariables","VAR_ASSIGN","MIXIN_MATCH","VAR_CONSUMED","ANIMATION_MATCH","MEDIA_MATCH","BRACKETED","styleTextSet","toCssText","forEachRule","preserveProperties","cssText","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.customProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinProp","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.mixinApply","RX$$module$node_modules$$webcomponents$shadycss$src$css_parse.varApply","rulesForStyle","isKeyframesSelector","styleRuleCallback","keyframesRuleCallback","onlyActiveRules","skipRules","matchMedia","applyCss","moniker","contextNode","applyStyle","lastHeadApplyNode","applyStylePlaceHolder","placeHolder","createComment","scope","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","findMatchingParen","level","setElementClassRaw","getIsExtends","typeExtension","extends","splitSelectorList","StyleTransformer","_transformDom","transformer","_content","shouldRemoveScope","SCOPE_NAME","CLASS","domReplaceScope","oldScope","newScope","domRemoveScope","elementStyles","styleRules","cssBuildType","ext","hostScope","_calcHostScope","CSS_CLASS_PREFIX","_calcElementScope","isScoped","_transformRule","transformedSelector","_transformRuleCss","_transformComplexSelector","p$","COMPLEX_SELECTOR_SEP","_twiddleNthPlus","NTH","_transformSimpleSelector","PSEUDO_PREFIX","normalizeRootSelector","ROOT","isNth","isMatches","MATCHES","_preserveMatchesPseudo","MATCHES_REPLACEMENT","SLOTTED_START","SIMPLE_SELECTOR_SEP","info","combinator","_transformCompoundSelector","slottedIndex","SLOTTED","_transformHostSelector","HOST_PAREN","paren","SIMPLE_SELECTOR_PREFIX","SELECTOR_NO_MATCH","slotted","SLOTTED_PAREN","DIR_PAREN","_replaceMatchesPseudo","cur","_transformDocumentSelector","SCOPE_DOC_SELECTOR","$jscomp.global.Object.defineProperties","StyleInfo","placeholder","ownStylePropertyNames","overrideStyleProperties","customStyle","scopeSelector","styleProperties","styleInfo","_getStyleRules","StyleProperties","decorateRule","propertyInfo","collectProperties","collectCssText","collectConsumingCssText","any","valueForProperty","valueForProperties","processVariableAndFallback","suffix","comma","fallback","propertyValue","colon","pp","hostAndRootPropertiesForScope","hostProps","rootProps","cssBuild","whenHostOrRootRule","parsedSelector","isRoot","isHost","selectorToMatch","_element","transformStyles","hostSelector","hostRx","HOST_PREFIX","HOST_SUFFIX","keyframeTransforms","_elementKeyframeTransforms","keyframesRules","_keyframes","keyframesNameRx","_scopeKeyframes","transformedKeyframesName","scopeId","_keyframesRuleTransformer","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.get","applyProperties","applyKeyframeTransforms","hasAnimations","keyframeNamesToTransform","keyframe","_scopeSelector","applyCustomStyle","XSCOPE_NAME","placeholderMap","ce","origDefine","wrappedDefine","StyleCache","mxns","mxn","classes","currentScope","unscopedNodes","hostForUnscopedNode","unscopedNode","scopeForPreviouslyUnscopedNode","tagname","typeMax","ownPropertyNames","_validate","pn","delayedStart","requestAnimationFrame","module$node_modules$$webcomponents$shadycss$src$document_watcher.flush","templateMap","invalidate","elementName","templateIsValid","styleCache","ScopingShim","_scopeCounter","_documentOwner","_documentOwnerStyleInfo","StyleInfo$$module$node_modules$$webcomponents$shadycss$src$style_info.set","_elementsHaveApplied","_customStyleInterface","_applyShim","_ensure","ApplyShim","_ensureApplyShim","_ensureCustomStyleInterface","CustomStyleInterface","transformCustomStyleForDocument","flushCustomStyles","_styleOwnerForNode","_updateProperties","ownerStyleInfo","owner","hostAndRootProps","_mixinOverrideStyles","propertiesMatchingHost","propertyDataFromStyles","overrides","reify","getStyleAst.prototype","getStyleAst","styleAstToString.prototype","styleAstToString","prepareTemplate.prototype","prepareTemplate","prepareTemplateDom","prepareTemplateStyles","_prepared","_getCssBuild","styleTextParts","styles","scopingAttribute","newStyle","__cssBuild","_cssBuild","decorateStyles","keyframes","ruleIndex","collectPropertiesInCssText","onKeyframesRule","_generateStaticStyle","shadowroot","_style","_ownPropertyNames","prepareTemplateDom.prototype","_domPrepared","domAddScope","flushCustomStyles.prototype","customStyles","_revalidateCustomStyleApplyShim","_revalidateApplyShim","_applyCustomStyles","styleDocument","overrideProps","_prepareHost","removeProperty","startValidatingTemplate","_validating","cachedStyle","cacheEntry","_applyStyleProperties","oldScopeSelector","_generateScopeSelector","applyElementStyle","applyElementScopeSelector","styleDocument.prototype","styleSubtree","shadowChildren","transformCustomStyleForDocument.prototype","documentRule","getComputedStyleValue","setElementClass.prototype","setElementClass","classString","scopeName","classAttr","k$","_styleInfoForNode.prototype","_styleInfoForNode","elementExtends","IDNAToASCII","h","_isInvalid","percentEscape","percentEscapeQuery","_scheme","relative","_isRelative","_query","_fragment","_schemeData","_port","_username","_password","nextC","nextNextC","tempC","tmp","relativePathDotMapping","jURL","_url","hasWorkingUrl","forceJURL","u","authority","OriginalURL","jURL.createObjectURL","jURL.revokeObjectURL","shouldFlush","flusher","flushAndFire","Timeout","clearFn","_id","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","nextTick","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","MessageChannel","port1","port2","onreadystatechange","attachEvent","run","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","runClearTimeout","Item","browser","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","cwd","chdir","umask","directives","isDirective","isCEPolyfill","reparentNodes","removeNodes","noChange","nodeMarker","markerRegex","boundAttributeSuffix","Template","nodesToRemove","walker","lastPartIndex","partIndex","hasAttributes","endsWith","stringForPart","lastAttributeNameRegex","attributeLookupName","attributeValue","statics","insert","createMarker","isTemplatePartActive","processor","__parts","setValue","commit","nodeIndex","handleTextExpression","insertAfterNode","handleAttributeExpressions","commentMarker","isCommentBinding","commentOpen","attributeMatch","getHTML","getTemplateElement","svgElement","isPrimitive","isIterable","AttributeCommitter","_createPart","_getValue","committer","directive","__pendingValue","endNode","__insert","__commitText","__commitTemplateResult","__commitNode","__commitIterable","valueAsString","templateFactory","_clone","itemParts","itemPart","appendIntoPart","insertAfterPart","PropertyCommitter","single","PropertyPart","eventOptionsSupported","_e","eventContext","__boundHandleEvent","newListener","oldListener","shouldRemoveListener","shouldAddListener","__options","getOptions","defaultTemplateProcessor","templateCache","templateCaches","stringsArray","keyString","appendInto","svg","CONFIG_ALIASES","row_pivot","col_pivot","col_pivots","column_pivot","sorts","CONFIG_VALID_KEYS","NUMBER_AGGREGATES","STRING_AGGREGATES","SORT_ORDERS","SORT_ORDER_IDS","lessThan","greaterThan","lessThanOrEquals","greaterThanOrEquals","doesNotEqual","bitwiseAnd","bitwiseOr","and","beginsWith","BOOLEAN_FILTERS","NUMBER_FILTERS","STRING_FILTERS","DATETIME_FILTERS","COLUMN_SEPARATOR_STRING","TYPE_FILTERS","_fetch","wasmXHR","responseType","onload","response","wasm_worker","wasm","_wasm","WebWorkerClient","register","WebAssembly","_detect_transferable","ab","WORKER_SINGLETON","__WORKER__","__CONFIG__","config_str","currentScript","mod","websocket","WebSocket"],"mappings":"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","file":"perspective-viewer.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 99);\n","/*\n Utils using lodash style API. (not necessarily 100% compliant) for functional and other utils.\n These utils should replace usage of lodash in the production code base. not because they are any better...\n but for the purpose of being a dependency free library.\n\n The hotspots in the code are already written in imperative style for performance reasons.\n so writing several dozen utils which may be slower than the original lodash, does not matter as much\n considering they will not be invoked in hotspots...\n */\nexport function isEmpty(arr) {\n return arr && arr.length === 0;\n}\nexport function keys(obj) {\n if (obj === undefined || obj === null) {\n return [];\n }\n return Object.keys(obj);\n}\nexport function values(obj) {\n var vals = [];\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n vals.push(obj[keys[i]]);\n }\n return vals;\n}\nexport function mapValues(obj, callback) {\n var result = [];\n var objKeys = keys(obj);\n for (var idx = 0; idx < objKeys.length; idx++) {\n var currKey = objKeys[idx];\n result.push(callback.call(null, obj[currKey], currKey));\n }\n return result;\n}\nexport function map(arr, callback) {\n var result = [];\n for (var idx = 0; idx < arr.length; idx++) {\n result.push(callback.call(null, arr[idx], idx));\n }\n return result;\n}\nexport function flatten(arr) {\n var result = [];\n for (var idx = 0; idx < arr.length; idx++) {\n var currItem = arr[idx];\n if (Array.isArray(currItem)) {\n result = result.concat(flatten(currItem));\n }\n else {\n result.push(currItem);\n }\n }\n return result;\n}\nexport function first(arr) {\n return isEmpty(arr) ? undefined : arr[0];\n}\nexport function last(arr) {\n var len = arr && arr.length;\n return len ? arr[len - 1] : undefined;\n}\nexport function forEach(collection, iteratorCallback) {\n /* istanbul ignore else */\n if (Array.isArray(collection)) {\n for (var i = 0; i < collection.length; i++) {\n iteratorCallback.call(null, collection[i], i);\n }\n }\n else if (isObject(collection)) {\n var colKeys = keys(collection);\n for (var i = 0; i < colKeys.length; i++) {\n var key = colKeys[i];\n var value = collection[key];\n iteratorCallback.call(null, value, key);\n }\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nexport function isString(item) {\n return typeof item === \"string\";\n}\nexport function isUndefined(item) {\n return item === undefined;\n}\nexport function isFunction(item) {\n return item instanceof Function;\n}\nexport function drop(arr, howMuch) {\n if (howMuch === void 0) { howMuch = 1; }\n return arr.slice(howMuch, arr.length);\n}\nexport function dropRight(arr, howMuch) {\n if (howMuch === void 0) { howMuch = 1; }\n return arr.slice(0, arr.length - howMuch);\n}\nexport function filter(arr, predicate) {\n var result = [];\n if (Array.isArray(arr)) {\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n if (predicate.call(null, item)) {\n result.push(item);\n }\n }\n }\n return result;\n}\nexport function reject(arr, predicate) {\n return filter(arr, function (item) { return !predicate(item); });\n}\nexport function pick(obj, predicate) {\n var keys = Object.keys(obj);\n var result = {};\n for (var i = 0; i < keys.length; i++) {\n var currKey = keys[i];\n var currItem = obj[currKey];\n if (predicate(currItem)) {\n result[currKey] = currItem;\n }\n }\n return result;\n}\nexport function has(obj, prop) {\n if (isObject(obj)) {\n return obj.hasOwnProperty(prop);\n }\n return false;\n}\nexport function contains(arr, item) {\n return find(arr, function (currItem) { return currItem === item; }) !== undefined ? true : false;\n}\n/**\n * shallow clone\n */\nexport function cloneArr(arr) {\n var newArr = [];\n for (var i = 0; i < arr.length; i++) {\n newArr.push(arr[i]);\n }\n return newArr;\n}\n/**\n * shallow clone\n */\nexport function cloneObj(obj) {\n var clonedObj = {};\n for (var key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n clonedObj[key] = obj[key];\n }\n }\n return clonedObj;\n}\nexport function find(arr, predicate) {\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n if (predicate.call(null, item)) {\n return item;\n }\n }\n return undefined;\n}\nexport function findAll(arr, predicate) {\n var found = [];\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n if (predicate.call(null, item)) {\n found.push(item);\n }\n }\n return found;\n}\nexport function reduce(arrOrObj, iterator, initial) {\n var isArr = Array.isArray(arrOrObj);\n var vals = isArr ? arrOrObj : values(arrOrObj);\n var objKeys = isArr ? [] : keys(arrOrObj);\n var accumulator = initial;\n for (var i = 0; i < vals.length; i++) {\n accumulator = iterator.call(null, accumulator, vals[i], isArr ? i : objKeys[i]);\n }\n return accumulator;\n}\nexport function compact(arr) {\n return reject(arr, function (item) { return item === null || item === undefined; });\n}\nexport function uniq(arr, identity) {\n if (identity === void 0) { identity = function (item) { return item; }; }\n var identities = [];\n return reduce(arr, function (result, currItem) {\n var currIdentity = identity(currItem);\n if (contains(identities, currIdentity)) {\n return result;\n }\n else {\n identities.push(currIdentity);\n return result.concat(currItem);\n }\n }, []);\n}\nexport function partial(func) {\n var restArgs = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n restArgs[_i - 1] = arguments[_i];\n }\n var firstArg = [null];\n var allArgs = firstArg.concat(restArgs);\n return Function.bind.apply(func, allArgs);\n}\nexport function isArray(obj) {\n return Array.isArray(obj);\n}\nexport function isRegExp(obj) {\n return obj instanceof RegExp;\n}\nexport function isObject(obj) {\n return obj instanceof Object;\n}\nexport function every(arr, predicate) {\n for (var i = 0; i < arr.length; i++) {\n if (!predicate(arr[i], i)) {\n return false;\n }\n }\n return true;\n}\nexport function difference(arr, values) {\n return reject(arr, function (item) { return contains(values, item); });\n}\nexport function some(arr, predicate) {\n for (var i = 0; i < arr.length; i++) {\n if (predicate(arr[i])) {\n return true;\n }\n }\n return false;\n}\nexport function indexOf(arr, value) {\n for (var i = 0; i < arr.length; i++) {\n if (arr[i] === value) {\n return i;\n }\n }\n return -1;\n}\nexport function sortBy(arr, orderFunc) {\n var result = cloneArr(arr);\n result.sort(function (a, b) { return orderFunc(a) - orderFunc(b); });\n return result;\n}\nexport function zipObject(keys, values) {\n if (keys.length !== values.length) {\n throw Error(\"can't zipObject with different number of keys and values!\");\n }\n var result = {};\n for (var i = 0; i < keys.length; i++) {\n result[keys[i]] = values[i];\n }\n return result;\n}\n/**\n * mutates! (and returns) target\n */\nexport function assign(target) {\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < sources.length; i++) {\n var curSource = sources[i];\n var currSourceKeys = keys(curSource);\n for (var j = 0; j < currSourceKeys.length; j++) {\n var currKey = currSourceKeys[j];\n target[currKey] = curSource[currKey];\n }\n }\n return target;\n}\n/**\n * mutates! (and returns) target\n */\nexport function assignNoOverwrite(target) {\n var sources = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n sources[_i - 1] = arguments[_i];\n }\n for (var i = 0; i < sources.length; i++) {\n var curSource = sources[i];\n if (isUndefined(curSource)) {\n continue;\n }\n var currSourceKeys = keys(curSource);\n for (var j = 0; j < currSourceKeys.length; j++) {\n var currKey = currSourceKeys[j];\n if (!has(target, currKey)) {\n target[currKey] = curSource[currKey];\n }\n }\n }\n return target;\n}\nexport function defaults() {\n var sources = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n sources[_i] = arguments[_i];\n }\n return assignNoOverwrite.apply(null, [{}].concat(sources));\n}\nexport function groupBy(arr, groupKeyFunc) {\n var result = {};\n forEach(arr, function (item) {\n var currGroupKey = groupKeyFunc(item);\n var currGroupArr = result[currGroupKey];\n if (currGroupArr) {\n currGroupArr.push(item);\n }\n else {\n result[currGroupKey] = [item];\n }\n });\n return result;\n}\n/**\n * Merge obj2 into obj1.\n * Will overwrite existing properties with the same name\n */\nexport function merge(obj1, obj2) {\n var result = cloneObj(obj1);\n var keys2 = keys(obj2);\n for (var i = 0; i < keys2.length; i++) {\n var key = keys2[i];\n var value = obj2[key];\n result[key] = value;\n }\n return result;\n}\nexport function NOOP() { }\nexport function IDENTITY(item) {\n return item;\n}\n/**\n * Will return a new packed array with same values.\n */\nexport function packArray(holeyArr) {\n var result = [];\n for (var i = 0; i < holeyArr.length; i++) {\n var orgValue = holeyArr[i];\n result.push(orgValue !== undefined ? orgValue : undefined);\n }\n return result;\n}\nexport function PRINT_ERROR(msg) {\n /* istanbul ignore else - can't override global.console in node.js */\n if (console && console.error) {\n console.error(\"Error: \" + msg);\n }\n}\nexport function PRINT_WARNING(msg) {\n /* istanbul ignore else - can't override global.console in node.js*/\n if (console && console.warn) {\n // TODO: modify docs accordingly\n console.warn(\"Warning: \" + msg);\n }\n}\nexport function isES2015MapSupported() {\n return typeof Map === \"function\";\n}\nexport function applyMixins(derivedCtor, baseCtors) {\n baseCtors.forEach(function (baseCtor) {\n var baseProto = baseCtor.prototype;\n Object.getOwnPropertyNames(baseProto).forEach(function (propName) {\n if (propName === \"constructor\") {\n return;\n }\n var basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName);\n // Handle Accessors\n if (basePropDescriptor &&\n (basePropDescriptor.get || basePropDescriptor.set)) {\n Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor);\n }\n else {\n derivedCtor.prototype[propName] = baseCtor.prototype[propName];\n }\n });\n });\n}\n// base on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216\nexport function toFastProperties(toBecomeFast) {\n function FakeConstructor() { }\n // If our object is used as a constructor it would receive\n FakeConstructor.prototype = toBecomeFast;\n var fakeInstance = new FakeConstructor();\n function fakeAccess() {\n return typeof fakeInstance.bar;\n }\n // help V8 understand this is a \"real\" prototype by actually using\n // the fake instance.\n fakeAccess();\n fakeAccess();\n return toBecomeFast;\n // Eval prevents optimization of this method (even though this is dead code)\n /* istanbul ignore next */\n // tslint:disable-next-line\n eval(toBecomeFast);\n}\nexport function peek(arr) {\n return arr[arr.length - 1];\n}\n/* istanbul ignore next - for performance tracing*/\nexport function timer(func) {\n var start = new Date().getTime();\n var val = func();\n var end = new Date().getTime();\n var total = end - start;\n return { time: total, value: val };\n}\n//# sourceMappingURL=utils.js.map","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func\n Function('return this')();\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar has = require('../internals/has');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!has(WellKnownSymbolsStore, name)) {\n if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name];\n else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);\n } return WellKnownSymbolsStore[name];\n};\n","var hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var fails = require('../internals/fails');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPrimitive = require('../internals/to-primitive');\n\nvar nativeDefineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var toInteger = require('../internals/to-integer');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nfor (var COLLECTION_NAME in DOMIterables) {\n var Collection = global[COLLECTION_NAME];\n var CollectionPrototype = Collection && Collection.prototype;\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n}\n",";(function(root, factory) {\n // istanbul ignore next\n if (typeof define === \"function\" && define.amd) {\n // istanbul ignore next\n define([], factory)\n } else if (typeof module === \"object\" && module.exports) {\n module.exports = factory()\n } else {\n // istanbul ignore next\n root.regexpToAst = factory()\n }\n})(\n typeof self !== \"undefined\"\n ? // istanbul ignore next\n self\n : this,\n function() {\n // references\n // https://hackernoon.com/the-madness-of-parsing-real-world-javascript-regexps-d9ee336df983\n // https://www.ecma-international.org/ecma-262/8.0/index.html#prod-Pattern\n function RegExpParser() {}\n\n RegExpParser.prototype.saveState = function() {\n return {\n idx: this.idx,\n input: this.input,\n groupIdx: this.groupIdx\n }\n }\n\n RegExpParser.prototype.restoreState = function(newState) {\n this.idx = newState.idx\n this.input = newState.input\n this.groupIdx = newState.groupIdx\n }\n\n RegExpParser.prototype.pattern = function(input) {\n // parser state\n this.idx = 0\n this.input = input\n this.groupIdx = 0\n\n this.consumeChar(\"/\")\n var value = this.disjunction()\n this.consumeChar(\"/\")\n\n var flags = {\n type: \"Flags\",\n global: false,\n ignoreCase: false,\n multiLine: false,\n unicode: false,\n sticky: false\n }\n\n while (this.isRegExpFlag()) {\n switch (this.popChar()) {\n case \"g\":\n addFlag(flags, \"global\")\n break\n case \"i\":\n addFlag(flags, \"ignoreCase\")\n break\n case \"m\":\n addFlag(flags, \"multiLine\")\n break\n case \"u\":\n addFlag(flags, \"unicode\")\n break\n case \"y\":\n addFlag(flags, \"sticky\")\n break\n }\n }\n\n if (this.idx !== this.input.length) {\n throw Error(\n \"Redundant input: \" + this.input.substring(this.idx)\n )\n }\n return { type: \"Pattern\", flags: flags, value: value }\n }\n\n RegExpParser.prototype.disjunction = function() {\n var alts = []\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 }\n }\n\n RegExpParser.prototype.alternative = function() {\n var terms = []\n\n while (this.isTerm()) {\n terms.push(this.term())\n }\n\n return { type: \"Alternative\", value: terms }\n }\n\n RegExpParser.prototype.term = function() {\n if (this.isAssertion()) {\n return this.assertion()\n } else {\n return this.atom()\n }\n }\n\n RegExpParser.prototype.assertion = function() {\n switch (this.popChar()) {\n case \"^\":\n return { type: \"StartAnchor\" }\n case \"$\":\n return { type: \"EndAnchor\" }\n // '\\b' or '\\B'\n case \"\\\\\":\n switch (this.popChar()) {\n case \"b\":\n return { type: \"WordBoundary\" }\n case \"B\":\n return { type: \"NonWordBoundary\" }\n }\n // istanbul ignore next\n throw Error(\"Invalid Assertion Escape\")\n // '(?=' or '(?!'\n case \"(\":\n this.consumeChar(\"?\")\n\n var type\n switch (this.popChar()) {\n case \"=\":\n type = \"Lookahead\"\n break\n case \"!\":\n type = \"NegativeLookahead\"\n break\n }\n ASSERT_EXISTS(type)\n\n var disjunction = this.disjunction()\n\n this.consumeChar(\")\")\n\n return { type: type, value: disjunction }\n }\n // istanbul ignore next\n ASSERT_NEVER_REACH_HERE()\n }\n\n RegExpParser.prototype.quantifier = function(isBacktracking) {\n var range\n switch (this.popChar()) {\n case \"*\":\n range = {\n atLeast: 0,\n atMost: Infinity\n }\n break\n case \"+\":\n range = {\n atLeast: 1,\n atMost: Infinity\n }\n break\n case \"?\":\n range = {\n atLeast: 0,\n atMost: 1\n }\n break\n case \"{\":\n var atLeast = this.integerIncludingZero()\n switch (this.popChar()) {\n case \"}\":\n range = {\n atLeast: atLeast,\n atMost: atLeast\n }\n break\n case \",\":\n var atMost\n if (this.isDigit()) {\n atMost = this.integerIncludingZero()\n range = {\n atLeast: atLeast,\n atMost: atMost\n }\n } else {\n range = {\n atLeast: atLeast,\n atMost: Infinity\n }\n }\n this.consumeChar(\"}\")\n break\n }\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n ASSERT_EXISTS(range)\n break\n }\n\n // throwing exceptions from \"ASSERT_EXISTS\" during backtracking\n // causes severe performance degradations\n if (isBacktracking === true && range === undefined) {\n return undefined\n }\n\n ASSERT_EXISTS(range)\n\n if (this.peekChar(0) === \"?\") {\n this.consumeChar(\"?\")\n range.greedy = false\n } else {\n range.greedy = true\n }\n\n range.type = \"Quantifier\"\n return range\n }\n\n RegExpParser.prototype.atom = function() {\n var atom\n switch (this.peekChar()) {\n case \".\":\n atom = this.dotAll()\n break\n case \"\\\\\":\n atom = this.atomEscape()\n break\n case \"[\":\n atom = this.characterClass()\n break\n case \"(\":\n atom = this.group()\n break\n }\n\n if (atom === undefined && this.isPatternCharacter()) {\n atom = this.patternCharacter()\n }\n\n ASSERT_EXISTS(atom)\n\n if (this.isQuantifier()) {\n atom.quantifier = this.quantifier()\n }\n\n return atom\n }\n\n RegExpParser.prototype.dotAll = function() {\n this.consumeChar(\".\")\n return {\n type: \"Set\",\n complement: true,\n value: [cc(\"\\n\"), cc(\"\\r\"), cc(\"\\u2028\"), cc(\"\\u2029\")]\n }\n }\n\n RegExpParser.prototype.atomEscape = function() {\n this.consumeChar(\"\\\\\")\n\n switch (this.peekChar()) {\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n return this.decimalEscapeAtom()\n case \"d\":\n case \"D\":\n case \"s\":\n case \"S\":\n case \"w\":\n case \"W\":\n return this.characterClassEscape()\n case \"f\":\n case \"n\":\n case \"r\":\n case \"t\":\n case \"v\":\n return this.controlEscapeAtom()\n case \"c\":\n return this.controlLetterEscapeAtom()\n case \"0\":\n return this.nulCharacterAtom()\n case \"x\":\n return this.hexEscapeSequenceAtom()\n case \"u\":\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n\n RegExpParser.prototype.decimalEscapeAtom = function() {\n var value = this.positiveInteger()\n\n return { type: \"GroupBackReference\", value: value }\n }\n\n RegExpParser.prototype.characterClassEscape = function() {\n var set\n var complement = false\n switch (this.popChar()) {\n case \"d\":\n set = digitsCharCodes\n break\n case \"D\":\n set = digitsCharCodes\n complement = true\n break\n case \"s\":\n set = whitespaceCodes\n break\n case \"S\":\n set = whitespaceCodes\n complement = true\n break\n case \"w\":\n set = wordCharCodes\n break\n case \"W\":\n set = wordCharCodes\n complement = true\n break\n }\n\n ASSERT_EXISTS(set)\n\n return { type: \"Set\", value: set, complement: complement }\n }\n\n RegExpParser.prototype.controlEscapeAtom = function() {\n var escapeCode\n switch (this.popChar()) {\n case \"f\":\n escapeCode = cc(\"\\f\")\n break\n case \"n\":\n escapeCode = cc(\"\\n\")\n break\n case \"r\":\n escapeCode = cc(\"\\r\")\n break\n case \"t\":\n escapeCode = cc(\"\\t\")\n break\n case \"v\":\n escapeCode = cc(\"\\v\")\n break\n }\n ASSERT_EXISTS(escapeCode)\n\n return { type: \"Character\", value: escapeCode }\n }\n\n RegExpParser.prototype.controlLetterEscapeAtom = function() {\n this.consumeChar(\"c\")\n var letter = this.popChar()\n if (/[a-zA-Z]/.test(letter) === false) {\n throw Error(\"Invalid \")\n }\n\n var letterCode = letter.toUpperCase().charCodeAt(0) - 64\n return { type: \"Character\", value: letterCode }\n }\n\n RegExpParser.prototype.nulCharacterAtom = function() {\n // TODO implement '[lookahead ∉ DecimalDigit]'\n // TODO: for the deprecated octal escape sequence\n this.consumeChar(\"0\")\n return { type: \"Character\", value: cc(\"\\0\") }\n }\n\n RegExpParser.prototype.hexEscapeSequenceAtom = function() {\n this.consumeChar(\"x\")\n return this.parseHexDigits(2)\n }\n\n RegExpParser.prototype.regExpUnicodeEscapeSequenceAtom = function() {\n this.consumeChar(\"u\")\n return this.parseHexDigits(4)\n }\n\n RegExpParser.prototype.identityEscapeAtom = function() {\n // TODO: implement \"SourceCharacter but not UnicodeIDContinue\"\n // // http://unicode.org/reports/tr31/#Specific_Character_Adjustments\n var escapedChar = this.popChar()\n return { type: \"Character\", value: cc(escapedChar) }\n }\n\n RegExpParser.prototype.classPatternCharacterAtom = function() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n // istanbul ignore next\n case \"\\\\\":\n // istanbul ignore next\n case \"]\":\n throw Error(\"TBD\")\n default:\n var nextChar = this.popChar()\n return { type: \"Character\", value: cc(nextChar) }\n }\n }\n\n RegExpParser.prototype.characterClass = function() {\n var set = []\n var complement = false\n this.consumeChar(\"[\")\n if (this.peekChar(0) === \"^\") {\n this.consumeChar(\"^\")\n complement = true\n }\n\n while (this.isClassAtom()) {\n var from = this.classAtom()\n var isFromSingleChar = from.type === \"Character\"\n if (isFromSingleChar && this.isRangeDash()) {\n this.consumeChar(\"-\")\n var to = this.classAtom()\n var isToSingleChar = to.type === \"Character\"\n\n // a range can only be used when both sides are single characters\n if (isToSingleChar) {\n if (to.value < from.value) {\n throw Error(\"Range out of order in character class\")\n }\n set.push({ from: from.value, to: to.value })\n } else {\n // literal dash\n insertToSet(from.value, set)\n set.push(cc(\"-\"))\n insertToSet(to.value, set)\n }\n } else {\n insertToSet(from.value, set)\n }\n }\n\n this.consumeChar(\"]\")\n\n return { type: \"Set\", complement: complement, value: set }\n }\n\n RegExpParser.prototype.classAtom = function() {\n switch (this.peekChar()) {\n // istanbul ignore next\n case \"]\":\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n throw Error(\"TBD\")\n case \"\\\\\":\n return this.classEscape()\n default:\n return this.classPatternCharacterAtom()\n }\n }\n\n RegExpParser.prototype.classEscape = function() {\n this.consumeChar(\"\\\\\")\n switch (this.peekChar()) {\n // Matches a backspace.\n // (Not to be confused with \\b word boundary outside characterClass)\n case \"b\":\n this.consumeChar(\"b\")\n return { type: \"Character\", value: cc(\"\\u0008\") }\n case \"d\":\n case \"D\":\n case \"s\":\n case \"S\":\n case \"w\":\n case \"W\":\n return this.characterClassEscape()\n case \"f\":\n case \"n\":\n case \"r\":\n case \"t\":\n case \"v\":\n return this.controlEscapeAtom()\n case \"c\":\n return this.controlLetterEscapeAtom()\n case \"0\":\n return this.nulCharacterAtom()\n case \"x\":\n return this.hexEscapeSequenceAtom()\n case \"u\":\n return this.regExpUnicodeEscapeSequenceAtom()\n default:\n return this.identityEscapeAtom()\n }\n }\n\n RegExpParser.prototype.group = function() {\n var capturing = true\n this.consumeChar(\"(\")\n switch (this.peekChar(0)) {\n case \"?\":\n this.consumeChar(\"?\")\n this.consumeChar(\":\")\n capturing = false\n break\n default:\n this.groupIdx++\n break\n }\n var value = this.disjunction()\n this.consumeChar(\")\")\n\n var groupAst = {\n type: \"Group\",\n capturing: capturing,\n value: value\n }\n\n if (capturing) {\n groupAst.idx = this.groupIdx\n }\n\n return groupAst\n }\n\n RegExpParser.prototype.positiveInteger = function() {\n var number = this.popChar()\n\n // istanbul ignore next - can't ever get here due to previous lookahead checks\n // still implementing this error checking in case this ever changes.\n if (decimalPatternNoZero.test(number) === false) {\n throw Error(\"Expecting a positive integer\")\n }\n\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n\n return parseInt(number, 10)\n }\n\n RegExpParser.prototype.integerIncludingZero = function() {\n var number = this.popChar()\n if (decimalPattern.test(number) === false) {\n throw Error(\"Expecting an integer\")\n }\n\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar()\n }\n\n return parseInt(number, 10)\n }\n\n RegExpParser.prototype.patternCharacter = function() {\n var nextChar = this.popChar()\n switch (nextChar) {\n // istanbul ignore next\n case \"\\n\":\n // istanbul ignore next\n case \"\\r\":\n // istanbul ignore next\n case \"\\u2028\":\n // istanbul ignore next\n case \"\\u2029\":\n // istanbul ignore next\n case \"^\":\n // istanbul ignore next\n case \"$\":\n // istanbul ignore next\n case \"\\\\\":\n // istanbul ignore next\n case \".\":\n // istanbul ignore next\n case \"*\":\n // istanbul ignore next\n case \"+\":\n // istanbul ignore next\n case \"?\":\n // istanbul ignore next\n case \"(\":\n // istanbul ignore next\n case \")\":\n // istanbul ignore next\n case \"[\":\n // istanbul ignore next\n case \"|\":\n // istanbul ignore next\n throw Error(\"TBD\")\n default:\n return { type: \"Character\", value: cc(nextChar) }\n }\n }\n RegExpParser.prototype.isRegExpFlag = function() {\n switch (this.peekChar(0)) {\n case \"g\":\n case \"i\":\n case \"m\":\n case \"u\":\n case \"y\":\n return true\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isRangeDash = function() {\n return this.peekChar() === \"-\" && this.isClassAtom(1)\n }\n\n RegExpParser.prototype.isDigit = function() {\n return decimalPattern.test(this.peekChar(0))\n }\n\n RegExpParser.prototype.isClassAtom = function(howMuch) {\n if (howMuch === undefined) {\n howMuch = 0\n }\n\n switch (this.peekChar(howMuch)) {\n case \"]\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n return false\n default:\n return true\n }\n }\n\n RegExpParser.prototype.isTerm = function() {\n return this.isAtom() || this.isAssertion()\n }\n\n RegExpParser.prototype.isAtom = function() {\n if (this.isPatternCharacter()) {\n return true\n }\n\n switch (this.peekChar(0)) {\n case \".\":\n case \"\\\\\": // atomEscape\n case \"[\": // characterClass\n // TODO: isAtom must be called before isAssertion - disambiguate\n case \"(\": // group\n return true\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isAssertion = function() {\n switch (this.peekChar(0)) {\n case \"^\":\n case \"$\":\n return true\n // '\\b' or '\\B'\n case \"\\\\\":\n switch (this.peekChar(1)) {\n case \"b\":\n case \"B\":\n return true\n default:\n return false\n }\n // '(?=' or '(?!'\n case \"(\":\n return (\n this.peekChar(1) === \"?\" &&\n (this.peekChar(2) === \"=\" || this.peekChar(2) === \"!\")\n )\n default:\n return false\n }\n }\n\n RegExpParser.prototype.isQuantifier = function() {\n var prevState = this.saveState()\n try {\n return this.quantifier(true) !== undefined\n } catch (e) {\n return false\n } finally {\n this.restoreState(prevState)\n }\n }\n\n RegExpParser.prototype.isPatternCharacter = function() {\n switch (this.peekChar()) {\n case \"^\":\n case \"$\":\n case \"\\\\\":\n case \".\":\n case \"*\":\n case \"+\":\n case \"?\":\n case \"(\":\n case \")\":\n case \"[\":\n case \"|\":\n case \"/\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n return false\n default:\n return true\n }\n }\n\n RegExpParser.prototype.parseHexDigits = function(howMany) {\n var hexString = \"\"\n for (var i = 0; i < howMany; i++) {\n var hexChar = this.popChar()\n if (hexDigitPattern.test(hexChar) === false) {\n throw Error(\"Expecting a HexDecimal digits\")\n }\n hexString += hexChar\n }\n var charCode = parseInt(hexString, 16)\n return { type: \"Character\", value: charCode }\n }\n\n RegExpParser.prototype.peekChar = function(howMuch) {\n if (howMuch === undefined) {\n howMuch = 0\n }\n return this.input[this.idx + howMuch]\n }\n\n RegExpParser.prototype.popChar = function() {\n var nextChar = this.peekChar(0)\n this.consumeChar()\n return nextChar\n }\n\n RegExpParser.prototype.consumeChar = function(char) {\n if (char !== undefined && this.input[this.idx] !== char) {\n throw Error(\n \"Expected: '\" +\n char +\n \"' but found: '\" +\n this.input[this.idx] +\n \"' at offset: \" +\n this.idx\n )\n }\n\n if (this.idx >= this.input.length) {\n throw Error(\"Unexpected end of input\")\n }\n this.idx++\n }\n\n // consts and utilities\n var hexDigitPattern = /[0-9a-fA-F]/\n var decimalPattern = /[0-9]/\n var decimalPatternNoZero = /[1-9]/\n\n function cc(char) {\n return char.charCodeAt(0)\n }\n\n function insertToSet(item, set) {\n if (item.length !== undefined) {\n item.forEach(function(subItem) {\n set.push(subItem)\n })\n } else {\n set.push(item)\n }\n }\n\n function addFlag(flagObj, flagKey) {\n if (flagObj[flagKey] === true) {\n throw \"duplicate flag \" + flagKey\n }\n\n flagObj[flagKey] = true\n }\n\n function ASSERT_EXISTS(obj) {\n // istanbul ignore next\n if (obj === undefined) {\n throw Error(\"Internal Error - Should never get here!\")\n }\n }\n\n // istanbul ignore next\n function ASSERT_NEVER_REACH_HERE() {\n throw Error(\"Internal Error - Should never get here!\")\n }\n\n var i\n var digitsCharCodes = []\n for (i = cc(\"0\"); i <= cc(\"9\"); i++) {\n digitsCharCodes.push(i)\n }\n\n var wordCharCodes = [cc(\"_\")].concat(digitsCharCodes)\n for (i = cc(\"a\"); i <= cc(\"z\"); i++) {\n wordCharCodes.push(i)\n }\n\n for (i = cc(\"A\"); i <= cc(\"Z\"); i++) {\n wordCharCodes.push(i)\n }\n\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes\n var whitespaceCodes = [\n cc(\" \"),\n cc(\"\\f\"),\n cc(\"\\n\"),\n cc(\"\\r\"),\n cc(\"\\t\"),\n cc(\"\\v\"),\n cc(\"\\t\"),\n cc(\"\\u00a0\"),\n cc(\"\\u1680\"),\n cc(\"\\u2000\"),\n cc(\"\\u2001\"),\n cc(\"\\u2002\"),\n cc(\"\\u2003\"),\n cc(\"\\u2004\"),\n cc(\"\\u2005\"),\n cc(\"\\u2006\"),\n cc(\"\\u2007\"),\n cc(\"\\u2008\"),\n cc(\"\\u2009\"),\n cc(\"\\u200a\"),\n cc(\"\\u2028\"),\n cc(\"\\u2029\"),\n cc(\"\\u202f\"),\n cc(\"\\u205f\"),\n cc(\"\\u3000\"),\n cc(\"\\ufeff\")\n ]\n\n function BaseRegExpVisitor() {}\n\n BaseRegExpVisitor.prototype.visitChildren = function(node) {\n for (var key in node) {\n var child = node[key]\n /* istanbul ignore else */\n if (node.hasOwnProperty(key)) {\n if (child.type !== undefined) {\n this.visit(child)\n } else if (Array.isArray(child)) {\n child.forEach(function(subChild) {\n this.visit(subChild)\n }, this)\n }\n }\n }\n }\n\n BaseRegExpVisitor.prototype.visit = function(node) {\n switch (node.type) {\n case \"Pattern\":\n this.visitPattern(node)\n break\n case \"Flags\":\n this.visitFlags(node)\n break\n case \"Disjunction\":\n this.visitDisjunction(node)\n break\n case \"Alternative\":\n this.visitAlternative(node)\n break\n case \"StartAnchor\":\n this.visitStartAnchor(node)\n break\n case \"EndAnchor\":\n this.visitEndAnchor(node)\n break\n case \"WordBoundary\":\n this.visitWordBoundary(node)\n break\n case \"NonWordBoundary\":\n this.visitNonWordBoundary(node)\n break\n case \"Lookahead\":\n this.visitLookahead(node)\n break\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node)\n break\n case \"Character\":\n this.visitCharacter(node)\n break\n case \"Set\":\n this.visitSet(node)\n break\n case \"Group\":\n this.visitGroup(node)\n break\n case \"GroupBackReference\":\n this.visitGroupBackReference(node)\n break\n case \"Quantifier\":\n this.visitQuantifier(node)\n break\n }\n\n this.visitChildren(node)\n }\n\n BaseRegExpVisitor.prototype.visitPattern = function(node) {}\n\n BaseRegExpVisitor.prototype.visitFlags = function(node) {}\n\n BaseRegExpVisitor.prototype.visitDisjunction = function(node) {}\n\n BaseRegExpVisitor.prototype.visitAlternative = function(node) {}\n\n // Assertion\n BaseRegExpVisitor.prototype.visitStartAnchor = function(node) {}\n\n BaseRegExpVisitor.prototype.visitEndAnchor = function(node) {}\n\n BaseRegExpVisitor.prototype.visitWordBoundary = function(node) {}\n\n BaseRegExpVisitor.prototype.visitNonWordBoundary = function(node) {}\n\n BaseRegExpVisitor.prototype.visitLookahead = function(node) {}\n\n BaseRegExpVisitor.prototype.visitNegativeLookahead = function(node) {}\n\n // atoms\n BaseRegExpVisitor.prototype.visitCharacter = function(node) {}\n\n BaseRegExpVisitor.prototype.visitSet = function(node) {}\n\n BaseRegExpVisitor.prototype.visitGroup = function(node) {}\n\n BaseRegExpVisitor.prototype.visitGroupBackReference = function(node) {}\n\n BaseRegExpVisitor.prototype.visitQuantifier = function(node) {}\n\n return {\n RegExpParser: RegExpParser,\n BaseRegExpVisitor: BaseRegExpVisitor,\n VERSION: \"0.4.0\"\n }\n }\n)\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar objectHas = require('../internals/has');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = new WeakMap();\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key);\n enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || inspectSource(this);\n});\n","var requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nconst DEFAULT_CONFIG = require(\"./settings.js\").default;\nconst get_config_file = require(\"./__node.js\").default;\n\nmodule.exports.get_types = function() {\n return Object.keys(module.exports.get_config().types);\n};\n\nmodule.exports.get_type_config = function(type) {\n const config = {};\n if (module.exports.get_config().types[type]) {\n Object.assign(config, module.exports.get_config().types[type]);\n }\n if (config.type) {\n const props = module.exports.get_type_config(config.type);\n Object.assign(props, config);\n return props;\n } else {\n return config;\n }\n};\n\nfunction isObject(item) {\n return item && typeof item === \"object\" && !Array.isArray(item);\n}\n\nfunction mergeDeep(target, ...sources) {\n if (!sources.length) return target;\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, {[key]: {}});\n mergeDeep(target[key], source[key]);\n } else {\n Object.assign(target, {[key]: source[key]});\n }\n }\n }\n\n return mergeDeep(target, ...sources);\n}\n\nglobal.__PERSPECTIVE_CONFIG__ = undefined;\n\nmodule.exports.override_config = function(config) {\n if (global.__PERSPECTIVE_CONFIG__) {\n console.warn(\"Config already initialized!\");\n }\n global.__PERSPECTIVE_CONFIG__ = mergeDeep(DEFAULT_CONFIG, config);\n};\n\nmodule.exports.get_config = function get_config() {\n if (!global.__PERSPECTIVE_CONFIG__) {\n global.__PERSPECTIVE_CONFIG__ = mergeDeep(DEFAULT_CONFIG, typeof window === \"undefined\" ? get_config_file() : global.__TEMPLATE_CONFIG__ || {});\n }\n return global.__PERSPECTIVE_CONFIG__;\n};\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n","module.exports = {};\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","module.exports = false;\n","var isObject = require('../internals/is-object');\n\n// `ToPrimitive` abstract operation\n// https://tc39.github.io/ecma262/#sec-toprimitive\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (input, PREFERRED_STRING) {\n if (!isObject(input)) return input;\n var fn, val;\n if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val;\n if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n /* global ActiveXObject */\n activeXDocument = document.domain && new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.github.io/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var path = require('../internals/path');\nvar global = require('../internals/global');\n\nvar aFunction = function (variable) {\n return typeof variable == 'function' ? variable : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace])\n : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method];\n};\n","var has = require('../internals/has');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.github.io/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n","module.exports = function (it, Constructor, name) {\n if (!(it instanceof Constructor)) {\n throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');\n } return it;\n};\n","var classof = require('../internals/classof');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","var aFunction = require('../internals/a-function');\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","/******************************************************************************\n *\n * Copyright (c) 2019, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nconst __CALLBACK_CACHE__ = new WeakMap();\nlet __CALLBACK_INDEX__ = 0;\n\n/**\n * Unbind a listener to an event.\n *\n * @param {*} method\n * @param {*} cmd\n */\nexport function unsubscribe(method, cmd) {\n return function() {\n let resolve;\n let reject = () => {};\n let args = Array.prototype.slice.call(arguments, 0, arguments.length);\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === \"function\") {\n resolve = args.splice(i, 1)[0];\n }\n }\n const callback_id = __CALLBACK_CACHE__.get(resolve);\n __CALLBACK_CACHE__.delete(resolve);\n let msg = {\n cmd: cmd || \"view_method\",\n name: this._name,\n method: method,\n args: args,\n subscribe: true,\n callback_id\n };\n this._worker.post(msg, resolve, reject);\n this._worker.unsubscribe(cmd, resolve);\n };\n}\n\n/**\n * Bind a listener to an event.\n *\n * @param {*} method\n * @param {*} cmd\n */\nexport function subscribe(method, cmd) {\n return function() {\n let resolve;\n let reject = () => {};\n let args = Array.prototype.slice.call(arguments, 0, arguments.length);\n for (let i = args.length - 1; i >= 0; i--) {\n if (typeof args[i] === \"function\") {\n resolve = args.splice(i, 1)[0];\n }\n }\n __CALLBACK_INDEX__++;\n __CALLBACK_CACHE__.set(resolve, __CALLBACK_INDEX__);\n let msg = {\n cmd: cmd || \"view_method\",\n name: this._name,\n method: method,\n args: args,\n subscribe: true,\n callback_id: __CALLBACK_INDEX__\n };\n this._worker.post(msg, resolve, reject, true);\n };\n}\n\n/**\n * Add a method call to the queue, preparing it for execution.\n *\n * Returns a bound function that calls the desired method on the server.\n *\n * @param {*} method\n * @param {*} cmd\n */\nexport function async_queue(method, cmd) {\n return function() {\n var args = Array.prototype.slice.call(arguments, 0, arguments.length);\n return new Promise(\n function(resolve, reject) {\n var msg = {\n cmd: cmd || \"view_method\",\n name: this._name,\n method: method,\n args: args,\n subscribe: false\n };\n this._worker.post(msg, resolve, reject);\n }.bind(this)\n );\n };\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\n/**\n * Gets human-readable types for a column\n * @private\n * @returns {string}\n */\nexport function get_column_type(val) {\n if (val >= 1 && val <= 8) {\n return \"integer\";\n } else if (val === 19) {\n return \"string\";\n } else if (val === 10 || val === 9) {\n return \"float\";\n } else if (val === 11) {\n return \"boolean\";\n } else if (val === 12) {\n return \"datetime\";\n } else if (val === 13) {\n return \"date\";\n } else {\n console.warn(`Unknown type for value ${val} with JS type ${typeof val}`);\n }\n}\n\n/**\n * Bind all methods in a class to the class instance. It is sad that this is\n * necessary.\n *\n * @export\n * @param {*} self\n */\nexport function bindall(self) {\n let obj = self;\n do {\n for (const key of Object.getOwnPropertyNames(obj)) {\n const value = self[key];\n if (key !== \"constructor\" && typeof value === \"function\") {\n self[key] = value.bind(self);\n }\n }\n } while ((obj = obj !== Object && Object.getPrototypeOf(obj)));\n}\n\n/**\n * Detect Node.js.\n *\n * Returns\n * -------\n * True if the current script is running in Node.js.\n */\nexport function detectNode() {\n return typeof window === \"undefined\";\n}\n\n/**\n * Detect Internet Explorer.\n *\n * Returns\n * -------\n * True if the current script is running in Internet Explorer.\n */\nexport const detectIE = require(\"detectie\");\n\n/**\n * Detect Chrome.\n *\n * Returns\n * -------\n * Detect if the current script is running in Chrome.\n */\nexport function detectChrome() {\n var isChromium = window.chrome,\n winNav = window.navigator,\n vendorName = winNav.vendor,\n isOpera = winNav.userAgent.indexOf(\"OPR\") > -1,\n isIEedge = winNav.userAgent.indexOf(\"Edge\") > -1,\n isIOSChrome = winNav.userAgent.match(\"CriOS\");\n\n if (isIOSChrome) {\n return true;\n } else if (isChromium !== null && typeof isChromium !== \"undefined\" && vendorName === \"Google Inc.\" && isOpera === false && isIEedge === false) {\n return true;\n } else {\n return false;\n }\n}\n\n// https://github.com/kripken/emscripten/issues/6042\nexport function detect_iphone() {\n return /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n}\n\n/**\n * String.includes() polyfill\n */\nif (!String.prototype.includes) {\n String.prototype.includes = function(search, start) {\n if (typeof start !== \"number\") {\n start = 0;\n }\n\n if (start + search.length > this.length) {\n return false;\n } else {\n return this.indexOf(search, start) !== -1;\n }\n };\n}\n\n/* eslint-disable-next-line max-len */\n// from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes\nif (!Array.prototype.includes) {\n Object.defineProperty(Array.prototype, \"includes\", {\n value: function(searchElement, fromIndex) {\n if (this == null) {\n throw new TypeError('\"this\" is null or not defined');\n }\n\n // 1. Let O be ? ToObject(this value).\n var o = Object(this);\n\n // 2. Let len be ? ToLength(? Get(O, \"length\")).\n var len = o.length >>> 0;\n\n // 3. If len is 0, return false.\n if (len === 0) {\n return false;\n }\n\n // 4. Let n be ? ToInteger(fromIndex). (If fromIndex is undefined,\n // this step produces the value 0.)\n var n = fromIndex | 0;\n\n // 5. If n ≥ 0, then a. Let k be n.\n // 6. Else n < 0, a. Let k be len + n. b. If k < 0, let k be 0.\n var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);\n\n function sameValueZero(x, y) {\n return x === y || (typeof x === \"number\" && typeof y === \"number\" && isNaN(x) && isNaN(y));\n }\n\n // 7. Repeat, while k < len\n while (k < len) {\n // a. Let elementK be the result of ? Get(O, ! ToString(k)). b.\n // If SameValueZero(searchElement, elementK) is true, return\n // true.\n if (sameValueZero(o[k], searchElement)) {\n return true;\n }\n // c. Increase k by 1.\n k++;\n }\n\n // 8. Return false\n return false;\n }\n });\n}\n","/******************************************************************************\n *\n * Copyright (c) 2019, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {subscribe, unsubscribe, async_queue} from \"./dispatch.js\";\nimport {bindall} from \"../utils.js\";\n\n/**\n * Construct a proxy for the view object by creating a \"view\" message and\n * sending it through the worker.\n *\n * @param {*} worker\n * @param {*} table_name\n * @param {*} config\n */\nexport function view(worker, table_name, config) {\n this._worker = worker;\n //this._config = config;\n this._name = Math.random() + \"\";\n var msg = {\n cmd: \"view\",\n view_name: this._name,\n table_name: table_name,\n config: config\n };\n this._worker.post(msg);\n bindall(this);\n}\n\n/**\n * Create a reference to a view located on `worker` for use by remote clients.\n *\n * @param {worker} worker the Web Worker at which the view is located.\n * @param {String} name a unique name for the view.\n */\nexport function proxy_view(worker, name) {\n this._worker = worker;\n this._name = name;\n}\n\nproxy_view.prototype = view.prototype;\n\n// Send view methods that do not create new objects (getters, setters etc.) to\n// the queue for processing.\n\nview.prototype.get_config = async_queue(\"get_config\");\n\nview.prototype.to_json = async_queue(\"to_json\");\n\nview.prototype.to_arrow = async_queue(\"to_arrow\");\n\nview.prototype.to_columns = async_queue(\"to_columns\");\n\nview.prototype.to_csv = async_queue(\"to_csv\");\n\nview.prototype.schema = async_queue(\"schema\");\n\nview.prototype.computed_schema = async_queue(\"computed_schema\");\n\nview.prototype.column_paths = async_queue(\"column_paths\");\n\nview.prototype.num_columns = async_queue(\"num_columns\");\n\nview.prototype.num_rows = async_queue(\"num_rows\");\n\nview.prototype.set_depth = async_queue(\"set_depth\");\n\nview.prototype.get_row_expanded = async_queue(\"get_row_expanded\");\n\nview.prototype.expand = async_queue(\"expand\");\n\nview.prototype.collapse = async_queue(\"collapse\");\n\nview.prototype.delete = async_queue(\"delete\");\n\nview.prototype.col_to_js_typed_array = async_queue(\"col_to_js_typed_array\");\n\nview.prototype.on_update = subscribe(\"on_update\", \"view_method\", true);\n\nview.prototype.remove_update = unsubscribe(\"remove_update\", \"view_method\", true);\n\nview.prototype.on_delete = subscribe(\"on_delete\", \"view_method\", true);\n\nview.prototype.remove_delete = unsubscribe(\"remove_delete\", \"view_method\", true);\n","/******************************************************************************\n *\n * Copyright (c) 2019, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {unsubscribe, subscribe, async_queue} from \"./dispatch.js\";\nimport {view} from \"./view_api.js\";\nimport {bindall} from \"../utils.js\";\n\n/**\n * Construct a proxy for the table object by creating a \"table\" message and\n * sending it through the worker.\n *\n * @param {*} worker\n * @param {*} data\n * @param {*} options\n */\nexport function table(worker, data, options) {\n this._worker = worker;\n let name = options.name || Math.random() + \"\";\n this._name = name;\n bindall(this);\n if (data.to_arrow) {\n var msg = {\n cmd: \"table\",\n name: name,\n args: [],\n options: options || {}\n };\n this._worker.post(msg);\n data.to_arrow().then(arrow => {\n var msg = {\n cmd: \"table\",\n name: name,\n args: [arrow],\n options: options || {}\n };\n this._worker.post(msg);\n data.on_update(\n updated => {\n this.update(updated.delta);\n },\n {mode: \"row\"}\n );\n });\n } else {\n var msg = {\n cmd: \"table\",\n name: name,\n args: [data],\n options: options || {}\n };\n this._worker.post(msg);\n }\n}\n\ntable.prototype.type = \"table\";\n\n/**\n * Create a reference to a Perspective table at `worker` for use by remote\n * clients.\n *\n * @param {worker} worker the Web Worker at which the table is located.\n * @param {String} name a unique name for the table.\n */\nexport function proxy_table(worker, name) {\n this._worker = worker;\n this._name = name;\n}\n\nproxy_table.prototype = table.prototype;\n\n// Dispatch table methods that create new objects to the worker\ntable.prototype.view = function(config) {\n return new view(this._worker, this._name, config);\n};\n\n// Dispatch table methods that do not create new objects (getters, setters etc.)\n// to the queue for processing.\ntable.prototype.make_port = async_queue(\"make_port\", \"table_method\");\n\ntable.prototype.remove_port = async_queue(\"remove_port\", \"table_method\");\n\ntable.prototype.compute = async_queue(\"compute\", \"table_method\");\n\ntable.prototype.schema = async_queue(\"schema\", \"table_method\");\n\ntable.prototype.computed_schema = async_queue(\"computed_schema\", \"table_method\");\n\ntable.prototype.get_computation_input_types = async_queue(\"get_computation_input_types\", \"table_method\");\n\ntable.prototype.get_computed_functions = async_queue(\"get_computed_functions\", \"table_method\");\n\ntable.prototype.is_valid_filter = async_queue(\"is_valid_filter\", \"table_method\");\n\ntable.prototype.size = async_queue(\"size\", \"table_method\");\n\ntable.prototype.columns = async_queue(\"columns\", \"table_method\");\n\ntable.prototype.clear = async_queue(\"clear\", \"table_method\");\n\ntable.prototype.replace = async_queue(\"replace\", \"table_method\");\n\ntable.prototype.delete = async_queue(\"delete\", \"table_method\");\n\ntable.prototype.on_delete = subscribe(\"on_delete\", \"table_method\", true);\n\ntable.prototype.remove = async_queue(\"remove\", \"table_method\");\n\ntable.prototype.remove_delete = unsubscribe(\"remove_delete\", \"table_method\", true);\n\ntable.prototype.update = function(data, options) {\n return new Promise((resolve, reject) => {\n var msg = {\n name: this._name,\n cmd: \"table_method\",\n method: \"update\",\n args: [data, options || {}]\n };\n this._worker.post(msg, resolve, reject, false);\n });\n};\n\ntable.prototype.execute = function(f) {\n var msg = {\n cmd: \"table_execute\",\n name: this._name,\n f: f.toString()\n };\n this._worker.post(msg);\n};\n","/******************************************************************************\n *\n * Copyright (c) 2019, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {table, proxy_table} from \"./table_api.js\";\nimport {proxy_view} from \"./view_api.js\";\nimport {bindall} from \"../utils.js\";\n\n/**\n * Perspective's worker API handles and processes asynchronous messages,\n * interfacing with the Perspective host class. Child classes must implement\n * the `send()` interface, which defines how messages are dispatched in\n * different contexts. `handlers` is a dictionary of resolve/reject callbacks\n * for each method the worker receives.\n *\n * @export\n */\nexport class Client {\n constructor() {\n this._initialized = false;\n this._worker = {\n initialized: {value: false},\n transferable: false,\n msg_id: 0,\n handlers: {},\n messages: []\n };\n bindall(this);\n }\n\n /**\n * Remove a listener for a Perspective-generated event.\n */\n unsubscribe(cmd, handler) {\n for (let key of Object.keys(this._worker.handlers)) {\n if (this._worker.handlers[key].resolve === handler) {\n delete this._worker.handlers[key];\n }\n }\n }\n\n /**\n * Process an asynchronous message.\n */\n post(msg, resolve, reject, keep_alive = false) {\n if (resolve || reject) {\n this._worker.handlers[++this._worker.msg_id] = {resolve, reject, keep_alive};\n }\n msg.id = this._worker.msg_id;\n if (this._worker.initialized.value) {\n this.send(msg);\n } else {\n this._worker.messages.push(() => this.send(msg));\n }\n }\n\n initialize_profile_thread() {\n if (this._worker.initialized.value) {\n this.send({id: -1, cmd: \"init_profile_thread\"});\n } else {\n this._worker.messages.push(() => this.send({id: -1, cmd: \"init_profile_thread\"}));\n }\n }\n\n /**\n * Must be implemented in order to transport commands to the server.\n */\n send() {\n throw new Error(\"send() not implemented\");\n }\n\n /**\n * Given the name of a table that is hosted on the server (e.g. using\n * `perspective-python` or `perspective` in NodeJS), return a `table`\n * instance that sends all operations and instructions to the `table` on the\n * server.\n *\n * @param {string} name\n */\n open_table(name) {\n return new proxy_table(this, name);\n }\n\n open_view(name) {\n return new proxy_view(this, name);\n }\n\n /**\n * Handle a command from Perspective. If the Client is not initialized,\n * initialize it and dispatch the `perspective-ready` event.\n *\n * Otherwise, reject or resolve the incoming command.\n */\n _handle(e) {\n if (!this._worker.initialized.value) {\n if (!this._initialized && typeof document !== \"undefined\" && document && typeof window !== undefined && window) {\n try {\n const event = document.createEvent(\"Event\");\n event.initEvent(\"perspective-ready\", false, true);\n window.dispatchEvent(event);\n } catch (e) {}\n this._initialized = true;\n }\n\n const msgs = this._worker.messages;\n this._worker.initialized.value = true;\n this._worker.messages = [];\n\n if (msgs) {\n for (const m in msgs) {\n if (msgs.hasOwnProperty(m)) {\n msgs[m]();\n }\n }\n }\n }\n\n if (e.data.id) {\n var handler = this._worker.handlers[e.data.id];\n if (handler) {\n if (e.data.error) {\n handler.reject(e.data.error);\n } else {\n handler.resolve(e.data.data);\n }\n if (!handler.keep_alive) {\n delete this._worker.handlers[e.data.id];\n }\n }\n }\n }\n\n table(data, options) {\n return new table(this, data, options || {});\n }\n\n terminate() {\n this._worker.terminate();\n this._worker = undefined;\n }\n}\n","\nvar utils = require(\"!!/Users/v625154/work/perspective/packages/perspective-webpack-plugin/src/js/utils.js\");\nmodule.exports = utils.publicPath(__webpack_public_path__) + \"psp.async.wasm\";","var fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar split = ''.split;\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n","var global = require('../internals/global');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nmodule.exports = function (key, value) {\n try {\n createNonEnumerableProperty(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","var id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36);\n};\n","module.exports = {};\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.github.io/ecma262/#sec-object.getownpropertynames\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","'use strict';\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {\n var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;\n var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];\n return replacer !== undefined\n ? replacer.call(searchValue, O, replaceValue)\n : nativeReplace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n if (\n (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||\n (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)\n ) {\n var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);\n if (res.done) return res.value;\n }\n\n var rx = anObject(regexp);\n var S = String(this);\n\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n results.push(result);\n if (!global) break;\n\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return nativeReplace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\nvar regexpFlags = require('./regexp-flags');\nvar stickyHelpers = require('./regexp-sticky-helpers');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = regexpFlags.call(re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = flags.replace('y', '');\n if (flags.indexOf('g') === -1) {\n flags += 'g';\n }\n\n strCopy = String(str).slice(re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = nativeExec.call(sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = match.input.slice(charsAdded);\n match[0] = match[0].slice(charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","var toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.{ codePointAt, at }` methods implementation\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = String(requireObjectCoercible($this));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isObject = require('../internals/is-object');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar isPrototypeOf = ObjectPrototype.isPrototypeOf;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar isView = function isView(it) {\n var klass = classof(it);\n return klass === 'DataView' || has(TypedArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n return isObject(it) && has(TypedArrayConstructorsList, classof(it));\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (setPrototypeOf) {\n if (isPrototypeOf.call(TypedArray, C)) return C;\n } else for (var ARRAY in TypedArrayConstructorsList) if (has(TypedArrayConstructorsList, NAME)) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (C === TypedArrayConstructor || isPrototypeOf.call(TypedArrayConstructor, C))) {\n return C;\n }\n } throw TypeError('Target is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor.prototype, KEY)) {\n delete TypedArrayConstructor.prototype[KEY];\n }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n redefine(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && has(TypedArrayConstructor, KEY)) {\n delete TypedArrayConstructor[KEY];\n }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && Int8Array[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n redefine(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n if (!global[NAME]) NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !has(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.github.io/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.github.io/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.github.io/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.6.4',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2020 Denis Pushkarev (zloirock.ru)'\n});\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.github.io/ecma262/#sec-object.defineproperties\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]);\n return O;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.github.io/ecma262/#sec-object.keys\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","var has = require('../internals/has');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~indexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var toInteger = require('../internals/to-integer');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var store = require('../internals/shared-store');\n\nvar functionToString = Function.toString;\n\n// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper\nif (typeof store.inspectSource != 'function') {\n store.inspectSource = function (it) {\n return functionToString.call(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","'use strict';\nvar $ = require('../internals/export');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n","'use strict';\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n","exports.f = Object.getOwnPropertySymbols;\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","'use strict';\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar has = require('../internals/has');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) {\n createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\n/**\n * An Object for capturing details of the invoking script's origin.\n *\n * Returns\n * -------\n * An instance of a ScriptPath object. Interesting methods on this object\n * include:\n * fullPath : The complete path of this script.\n * path : The path (no host).\n * host : The host (no path).\n * file : The file name itself.\n */\nfunction ScriptPath() {\n var pathParts;\n try {\n throw new Error();\n } catch (e) {\n var stackLines = e.stack.split(\"\\n\");\n var callerIndex = 0;\n for (var i in stackLines) {\n if (!stackLines[i].match(/http[s]?:\\/\\//)) continue;\n callerIndex = Number(i);\n break;\n }\n pathParts = stackLines[callerIndex].match(/((http[s]?:\\/\\/.+\\/)([^\\/]+\\.(js|html))).*?:/);\n }\n\n this.fullPath = function() {\n return pathParts ? pathParts[1] : typeof window !== \"undefined\" ? window.location.origin + window.location.pathname : \"\";\n };\n this.path = function() {\n return pathParts ? pathParts[2] : typeof window !== \"undefined\" ? window.location.pathname : \"\";\n };\n this.host = function() {\n var x = this.path().match(/.+?\\/\\/.+?\\//);\n return x ? x[0] : typeof window !== \"undefined\" ? window.location.hostname : \"\";\n };\n this.file = function() {\n return pathParts ? pathParts[3] : \"\";\n };\n}\n\nvar __SCRIPT_PATH__ = new ScriptPath();\n\nmodule.exports.host = __SCRIPT_PATH__.host();\n\nmodule.exports.path = __SCRIPT_PATH__.path();\n\nmodule.exports.isCrossOrigin = function(webpackOrigin) {\n var inWebpack = !!(webpackOrigin && webpackOrigin.length);\n if (inWebpack) {\n var link = document.createElement(\"a\");\n link.href = webpackOrigin;\n\n if (link.href.startsWith(window.location.origin)) {\n return false;\n } else {\n // we're CORS\n return true;\n }\n } else {\n return window.location.origin !== module.exports.host.slice(0, window.location.origin.length);\n }\n};\n\nmodule.exports.publicPath = function(webpackOrigin) {\n var inWebpack = !!(webpackOrigin && webpackOrigin.length);\n if (inWebpack) {\n return webpackOrigin;\n } else {\n return module.exports.path;\n }\n};\n\nmodule.exports.BlobWorker = function(responseText, ready) {\n var blob = new Blob([responseText]);\n var obj = window.URL.createObjectURL(blob);\n var worker = new Worker(obj);\n if (ready) {\n ready(worker);\n }\n};\n\nmodule.exports.XHRWorker = function XHRWorker(url, ready) {\n var oReq = new XMLHttpRequest();\n oReq.addEventListener(\n \"load\",\n function() {\n module.exports.BlobWorker(oReq.responseText, ready);\n },\n oReq\n );\n oReq.open(\"get\", url, true);\n oReq.send();\n};\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n","module.exports = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\n\n// `ToIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = !fails(function () {\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\n var searchParams = url.searchParams;\n var result = '';\n url.pathname = 'c%20d';\n searchParams.forEach(function (value, key) {\n searchParams['delete']('b');\n result += key + value;\n });\n return (IS_PURE && !url.toJSON)\n || !searchParams.sort\n || url.href !== 'http://a/c%20d?a=1&c=3'\n || searchParams.get('c') !== '3'\n || String(new URLSearchParams('?a=1')) !== 'a=1'\n || !searchParams[ITERATOR]\n // throws in Edge\n || new URL('https://a@b').username !== 'a'\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\n // not punycoded in Edge\n || new URL('http://тест').host !== 'xn--e1aybc'\n // not escaped in Chrome 62-\n || new URL('http://a#б').hash !== '#%D0%B1'\n // fails in Chrome 66-\n || result !== 'a1c3'\n // throws in Safari\n || new URL('http://x', undefined).host !== 'x';\n});\n","// needs a separate module as this is required inside chevrotain productive code\n// and also in the entry point for webpack(api.ts).\n// A separate file avoids cyclic dependencies and webpack errors.\nexport var VERSION = \"6.5.0\";\n//# sourceMappingURL=version.js.map","import { RegExpParser } from \"regexp-to-ast\";\nvar regExpAstCache = {};\nvar regExpParser = new RegExpParser();\nexport function getRegExpAst(regExp) {\n var regExpStr = regExp.toString();\n if (regExpAstCache.hasOwnProperty(regExpStr)) {\n return regExpAstCache[regExpStr];\n }\n else {\n var regExpAst = regExpParser.pattern(regExpStr);\n regExpAstCache[regExpStr] = regExpAst;\n return regExpAst;\n }\n}\nexport function clearRegExpParserCache() {\n regExpAstCache = {};\n}\n//# sourceMappingURL=reg_exp_parser.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { VERSION, BaseRegExpVisitor } from \"regexp-to-ast\";\nimport { forEach, contains, PRINT_ERROR, PRINT_WARNING, find, isArray, every, values } from \"../utils/utils\";\nimport { getRegExpAst } from \"./reg_exp_parser\";\nimport { charCodeToOptimizedIndex, minOptimizationVal } from \"./lexer\";\nvar complementErrorMessage = \"Complement Sets are not supported for first char optimization\";\nexport var failedOptimizationPrefixMsg = 'Unable to use \"first char\" lexer optimizations:\\n';\nexport function getOptimizedStartCodesIndices(regExp, ensureOptimizations) {\n if (ensureOptimizations === void 0) { ensureOptimizations = false; }\n try {\n var ast = getRegExpAst(regExp);\n var firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase);\n return firstChars;\n }\n catch (e) {\n /* istanbul ignore next */\n // Testing this relies on the regexp-to-ast library having a bug... */\n // TODO: only the else branch needs to be ignored, try to fix with newer prettier / tsc\n if (e.message === complementErrorMessage) {\n if (ensureOptimizations) {\n PRINT_WARNING(\"\" + failedOptimizationPrefixMsg +\n (\"\\tUnable to optimize: < \" + regExp.toString() + \" >\\n\") +\n \"\\tComplement Sets cannot be automatically optimized.\\n\" +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tSee: https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.\");\n }\n }\n else {\n var msgSuffix = \"\";\n if (ensureOptimizations) {\n msgSuffix =\n \"\\n\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tSee: https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.\";\n }\n PRINT_ERROR(failedOptimizationPrefixMsg + \"\\n\" +\n (\"\\tFailed parsing: < \" + regExp.toString() + \" >\\n\") +\n (\"\\tUsing the regexp-to-ast library version: \" + VERSION + \"\\n\") +\n \"\\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues\" +\n msgSuffix);\n }\n }\n return [];\n}\nexport function firstCharOptimizedIndices(ast, result, ignoreCase) {\n switch (ast.type) {\n case \"Disjunction\":\n for (var i = 0; i < ast.value.length; i++) {\n firstCharOptimizedIndices(ast.value[i], result, ignoreCase);\n }\n break;\n case \"Alternative\":\n var terms = ast.value;\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i];\n // skip terms that cannot effect the first char results\n switch (term.type) {\n case \"EndAnchor\":\n // A group back reference cannot affect potential starting char.\n // because if a back reference is the first production than automatically\n // the group being referenced has had to come BEFORE so its codes have already been added\n case \"GroupBackReference\":\n // assertions do not affect potential starting codes\n case \"Lookahead\":\n case \"NegativeLookahead\":\n case \"StartAnchor\":\n case \"WordBoundary\":\n case \"NonWordBoundary\":\n continue;\n }\n var 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, function (code) {\n if (typeof code === \"number\") {\n addOptimizedIdxToResult(code, result, ignoreCase);\n }\n else {\n // range\n var range = code;\n // cannot optimize when ignoreCase is\n if (ignoreCase === true) {\n for (var rangeCode = range.from; rangeCode <= range.to; rangeCode++) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n }\n }\n // Optimization (2 orders of magnitude less work for very large ranges)\n else {\n // handle unoptimized values\n for (var rangeCode = range.from; rangeCode <= range.to &&\n rangeCode < minOptimizationVal; rangeCode++) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n }\n // Less common charCode where we optimize for faster init time, by using larger \"buckets\"\n if (range.to >= minOptimizationVal) {\n var minUnOptVal = range.from >= minOptimizationVal\n ? range.from\n : minOptimizationVal;\n var maxUnOptVal = range.to;\n var minOptIdx = charCodeToOptimizedIndex(minUnOptVal);\n var maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal);\n for (var currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) {\n result[currOptIdx] = currOptIdx;\n }\n }\n }\n }\n });\n break;\n case \"Group\":\n firstCharOptimizedIndices(atom.value, result, ignoreCase);\n break;\n /* istanbul ignore next */\n default:\n throw Error(\"Non Exhaustive Match\");\n }\n // reached a mandatory production, no more **start** codes can be found on this alternative\n var isOptionalQuantifier = atom.quantifier !== undefined &&\n 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\" &&\n isWholeOptional(atom) === false) ||\n // If this term is not a group it may only be optional if it has an optional quantifier\n (atom.type !== \"Group\" && isOptionalQuantifier === false)) {\n break;\n }\n }\n break;\n /* istanbul ignore next */\n default:\n throw Error(\"non exhaustive match!\");\n }\n // console.log(Object.keys(result).length)\n return values(result);\n}\nfunction addOptimizedIdxToResult(code, result, ignoreCase) {\n var optimizedCharIdx = charCodeToOptimizedIndex(code);\n result[optimizedCharIdx] = optimizedCharIdx;\n if (ignoreCase === true) {\n handleIgnoreCase(code, result);\n }\n}\nfunction handleIgnoreCase(code, result) {\n var char = String.fromCharCode(code);\n var upperChar = char.toUpperCase();\n /* istanbul ignore else */\n if (upperChar !== char) {\n var optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0));\n result[optimizedCharIdx] = optimizedCharIdx;\n }\n else {\n var lowerChar = char.toLowerCase();\n if (lowerChar !== char) {\n var optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0));\n result[optimizedCharIdx] = optimizedCharIdx;\n }\n }\n}\nfunction findCode(setNode, targetCharCodes) {\n return find(setNode.value, function (codeOrRange) {\n if (typeof codeOrRange === \"number\") {\n return contains(targetCharCodes, codeOrRange);\n }\n else {\n // range\n var range_1 = codeOrRange;\n return (find(targetCharCodes, function (targetCode) {\n return range_1.from <= targetCode && targetCode <= range_1.to;\n }) !== undefined);\n }\n });\n}\nfunction isWholeOptional(ast) {\n if (ast.quantifier && ast.quantifier.atLeast === 0) {\n return true;\n }\n if (!ast.value) {\n return false;\n }\n return isArray(ast.value)\n ? every(ast.value, isWholeOptional)\n : isWholeOptional(ast.value);\n}\nvar CharCodeFinder = /** @class */ (function (_super) {\n __extends(CharCodeFinder, _super);\n function CharCodeFinder(targetCharCodes) {\n var _this = _super.call(this) || this;\n _this.targetCharCodes = targetCharCodes;\n _this.found = false;\n return _this;\n }\n CharCodeFinder.prototype.visitChildren = function (node) {\n // No need to keep looking...\n if (this.found === true) {\n return;\n }\n // switch lookaheads as they do not actually consume any characters thus\n // finding a charCode at lookahead context does not mean that regexp can actually contain it in a match.\n switch (node.type) {\n case \"Lookahead\":\n this.visitLookahead(node);\n return;\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node);\n return;\n }\n _super.prototype.visitChildren.call(this, node);\n };\n CharCodeFinder.prototype.visitCharacter = function (node) {\n if (contains(this.targetCharCodes, node.value)) {\n this.found = true;\n }\n };\n CharCodeFinder.prototype.visitSet = function (node) {\n if (node.complement) {\n if (findCode(node, this.targetCharCodes) === undefined) {\n this.found = true;\n }\n }\n else {\n if (findCode(node, this.targetCharCodes) !== undefined) {\n this.found = true;\n }\n }\n };\n return CharCodeFinder;\n}(BaseRegExpVisitor));\nexport function canMatchCharCode(charCodes, pattern) {\n if (pattern instanceof RegExp) {\n var ast = getRegExpAst(pattern);\n var charCodeFinder = new CharCodeFinder(charCodes);\n charCodeFinder.visit(ast);\n return charCodeFinder.found;\n }\n else {\n return (find(pattern, function (char) {\n return contains(charCodes, char.charCodeAt(0));\n }) !== undefined);\n }\n}\n//# sourceMappingURL=reg_exp.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { BaseRegExpVisitor } from \"regexp-to-ast\";\nimport { Lexer, LexerDefinitionErrorType } from \"./lexer_public\";\nimport { compact, contains, defaults, difference, filter, find, first, flatten, forEach, has, indexOf, isArray, isEmpty, isFunction, isRegExp, isString, isUndefined, keys, map, mapValues, packArray, PRINT_ERROR, reduce, reject } from \"../utils/utils\";\nimport { canMatchCharCode, failedOptimizationPrefixMsg, getOptimizedStartCodesIndices } from \"./reg_exp\";\nimport { getRegExpAst } from \"./reg_exp_parser\";\nvar PATTERN = \"PATTERN\";\nexport var DEFAULT_MODE = \"defaultMode\";\nexport var MODES = \"modes\";\nexport var SUPPORT_STICKY = typeof new RegExp(\"(?:)\").sticky === \"boolean\";\nexport function disableSticky() {\n SUPPORT_STICKY = false;\n}\nexport function enableSticky() {\n SUPPORT_STICKY = true;\n}\nexport function analyzeTokenTypes(tokenTypes, options) {\n options = defaults(options, {\n useSticky: SUPPORT_STICKY,\n debug: false,\n safeMode: false,\n positionTracking: \"full\",\n lineTerminatorCharacters: [\"\\r\", \"\\n\"],\n tracer: function (msg, action) { return action(); }\n });\n var tracer = options.tracer;\n tracer(\"initCharCodeToOptimizedIndexMap\", function () {\n initCharCodeToOptimizedIndexMap();\n });\n var onlyRelevantTypes;\n tracer(\"Reject Lexer.NA\", function () {\n onlyRelevantTypes = reject(tokenTypes, function (currType) {\n return currType[PATTERN] === Lexer.NA;\n });\n });\n var hasCustom = false;\n var allTransformedPatterns;\n tracer(\"Transform Patterns\", function () {\n hasCustom = false;\n allTransformedPatterns = map(onlyRelevantTypes, function (currType) {\n var currPattern = currType[PATTERN];\n /* istanbul ignore else */\n if (isRegExp(currPattern)) {\n var regExpSource = currPattern.source;\n if (regExpSource.length === 1 &&\n // only these regExp meta characters which can appear in a length one regExp\n regExpSource !== \"^\" &&\n regExpSource !== \"$\" &&\n regExpSource !== \".\") {\n return regExpSource;\n }\n else if (regExpSource.length === 2 &&\n regExpSource[0] === \"\\\\\" &&\n // not a meta character\n !contains([\n \"d\",\n \"D\",\n \"s\",\n \"S\",\n \"t\",\n \"r\",\n \"n\",\n \"t\",\n \"0\",\n \"c\",\n \"b\",\n \"B\",\n \"f\",\n \"v\",\n \"w\",\n \"W\"\n ], regExpSource[1])) {\n // escaped meta Characters: /\\+/ /\\[/\n // or redundant escaping: /\\a/\n // without the escaping \"\\\"\n return regExpSource[1];\n }\n else {\n return options.useSticky\n ? addStickyFlag(currPattern)\n : addStartOfInput(currPattern);\n }\n }\n else if (isFunction(currPattern)) {\n hasCustom = true;\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return { exec: currPattern };\n }\n else if (has(currPattern, \"exec\")) {\n hasCustom = true;\n // ICustomPattern\n return currPattern;\n }\n else if (typeof currPattern === \"string\") {\n if (currPattern.length === 1) {\n return currPattern;\n }\n else {\n var escapedRegExpString = currPattern.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n var wrappedRegExp = new RegExp(escapedRegExpString);\n return options.useSticky\n ? addStickyFlag(wrappedRegExp)\n : addStartOfInput(wrappedRegExp);\n }\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n });\n });\n var patternIdxToType;\n var patternIdxToGroup;\n var patternIdxToLongerAltIdx;\n var patternIdxToPushMode;\n var patternIdxToPopMode;\n tracer(\"misc mapping\", function () {\n patternIdxToType = map(onlyRelevantTypes, function (currType) { return currType.tokenTypeIdx; });\n patternIdxToGroup = map(onlyRelevantTypes, function (clazz) {\n var groupName = clazz.GROUP;\n /* istanbul ignore next */\n if (groupName === Lexer.SKIPPED) {\n return undefined;\n }\n else if (isString(groupName)) {\n return groupName;\n }\n else if (isUndefined(groupName)) {\n return false;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n });\n patternIdxToLongerAltIdx = map(onlyRelevantTypes, function (clazz) {\n var longerAltType = clazz.LONGER_ALT;\n if (longerAltType) {\n var longerAltIdx = indexOf(onlyRelevantTypes, longerAltType);\n return longerAltIdx;\n }\n });\n patternIdxToPushMode = map(onlyRelevantTypes, function (clazz) { return clazz.PUSH_MODE; });\n patternIdxToPopMode = map(onlyRelevantTypes, function (clazz) {\n return has(clazz, \"POP_MODE\");\n });\n });\n var patternIdxToCanLineTerminator;\n tracer(\"Line Terminator Handling\", function () {\n var lineTerminatorCharCodes = getCharCodes(options.lineTerminatorCharacters);\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, function (tokType) { return false; });\n if (options.positionTracking !== \"onlyOffset\") {\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, function (tokType) {\n if (has(tokType, \"LINE_BREAKS\")) {\n return tokType.LINE_BREAKS;\n }\n else {\n if (checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false) {\n return canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN);\n }\n }\n });\n }\n });\n var patternIdxToIsCustom;\n var patternIdxToShort;\n var emptyGroups;\n var patternIdxToConfig;\n tracer(\"Misc Mapping #2\", function () {\n patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern);\n patternIdxToShort = map(allTransformedPatterns, isShortPattern);\n emptyGroups = reduce(onlyRelevantTypes, function (acc, clazz) {\n var groupName = clazz.GROUP;\n if (isString(groupName) && !(groupName === Lexer.SKIPPED)) {\n acc[groupName] = [];\n }\n return acc;\n }, {});\n patternIdxToConfig = map(allTransformedPatterns, function (x, idx) {\n return {\n pattern: allTransformedPatterns[idx],\n longerAlt: patternIdxToLongerAltIdx[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 var canBeOptimized = true;\n var charCodeToPatternIdxToConfig = [];\n if (!options.safeMode) {\n tracer(\"First Char Optimization\", function () {\n charCodeToPatternIdxToConfig = reduce(onlyRelevantTypes, function (result, currTokType, idx) {\n if (typeof currTokType.PATTERN === \"string\") {\n var charCode = currTokType.PATTERN.charCodeAt(0);\n var optimizedIdx = charCodeToOptimizedIndex(charCode);\n addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx]);\n }\n else if (isArray(currTokType.START_CHARS_HINT)) {\n var lastOptimizedIdx_1;\n forEach(currTokType.START_CHARS_HINT, function (charOrInt) {\n var charCode = typeof charOrInt === \"string\"\n ? charOrInt.charCodeAt(0)\n : charOrInt;\n var currOptimizedIdx = charCodeToOptimizedIndex(charCode);\n // Avoid adding the config multiple times\n if (lastOptimizedIdx_1 !== currOptimizedIdx) {\n lastOptimizedIdx_1 = currOptimizedIdx;\n addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx]);\n }\n });\n }\n else if (isRegExp(currTokType.PATTERN)) {\n if (currTokType.PATTERN.unicode) {\n canBeOptimized = false;\n if (options.ensureOptimizations) {\n PRINT_ERROR(\"\" + failedOptimizationPrefixMsg +\n (\"\\tUnable to analyze < \" + currTokType.PATTERN.toString() + \" > pattern.\\n\") +\n \"\\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\\n\" +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tFor details See: https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE\");\n }\n }\n else {\n var optimizedCodes = getOptimizedStartCodesIndices(currTokType.PATTERN, options.ensureOptimizations);\n /* istanbul ignore if */\n // start code will only be empty given an empty regExp or failure of regexp-to-ast library\n // the first should be a different validation and the second cannot be tested.\n if (isEmpty(optimizedCodes)) {\n // we cannot understand what codes may start possible matches\n // The optimization correctness requires knowing start codes for ALL patterns.\n // Not actually sure this is an error, no debug message\n canBeOptimized = false;\n }\n forEach(optimizedCodes, function (code) {\n addToMapOfArrays(result, code, patternIdxToConfig[idx]);\n });\n }\n }\n else {\n if (options.ensureOptimizations) {\n PRINT_ERROR(\"\" + failedOptimizationPrefixMsg +\n (\"\\tTokenType: <\" + currTokType.name + \"> is using a custom token pattern without providing <start_chars_hint> parameter.\\n\") +\n \"\\tThis will disable the lexer's first char optimizations.\\n\" +\n \"\\tFor details See: https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE\");\n }\n canBeOptimized = false;\n }\n return result;\n }, []);\n });\n }\n tracer(\"ArrayPacking\", function () {\n charCodeToPatternIdxToConfig = packArray(charCodeToPatternIdxToConfig);\n });\n return {\n emptyGroups: emptyGroups,\n patternIdxToConfig: patternIdxToConfig,\n charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,\n hasCustom: hasCustom,\n canBeOptimized: canBeOptimized\n };\n}\nexport function validatePatterns(tokenTypes, validModesNames) {\n var errors = [];\n var missingResult = findMissingPatterns(tokenTypes);\n errors = errors.concat(missingResult.errors);\n var invalidResult = findInvalidPatterns(missingResult.valid);\n var validTokenTypes = invalidResult.valid;\n errors = errors.concat(invalidResult.errors);\n errors = errors.concat(validateRegExpPattern(validTokenTypes));\n errors = errors.concat(findInvalidGroupType(validTokenTypes));\n errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames));\n errors = errors.concat(findUnreachablePatterns(validTokenTypes));\n return errors;\n}\nfunction validateRegExpPattern(tokenTypes) {\n var errors = [];\n var withRegExpPatterns = filter(tokenTypes, function (currTokType) {\n return isRegExp(currTokType[PATTERN]);\n });\n errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns));\n errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns));\n errors = errors.concat(findUnsupportedFlags(withRegExpPatterns));\n errors = errors.concat(findDuplicatePatterns(withRegExpPatterns));\n errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns));\n return errors;\n}\nexport function findMissingPatterns(tokenTypes) {\n var tokenTypesWithMissingPattern = filter(tokenTypes, function (currType) {\n return !has(currType, PATTERN);\n });\n var errors = map(tokenTypesWithMissingPattern, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- missing static 'PATTERN' property\",\n type: LexerDefinitionErrorType.MISSING_PATTERN,\n tokenTypes: [currType]\n };\n });\n var valid = difference(tokenTypes, tokenTypesWithMissingPattern);\n return { errors: errors, valid: valid };\n}\nexport function findInvalidPatterns(tokenTypes) {\n var tokenTypesWithInvalidPattern = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n return (!isRegExp(pattern) &&\n !isFunction(pattern) &&\n !has(pattern, \"exec\") &&\n !isString(pattern));\n });\n var errors = map(tokenTypesWithInvalidPattern, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' can only be a RegExp, a\" +\n \" Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",\n type: LexerDefinitionErrorType.INVALID_PATTERN,\n tokenTypes: [currType]\n };\n });\n var valid = difference(tokenTypes, tokenTypesWithInvalidPattern);\n return { errors: errors, valid: valid };\n}\nvar end_of_input = /[^\\\\][\\$]/;\nexport function findEndOfInputAnchor(tokenTypes) {\n var EndAnchorFinder = /** @class */ (function (_super) {\n __extends(EndAnchorFinder, _super);\n function EndAnchorFinder() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.found = false;\n return _this;\n }\n EndAnchorFinder.prototype.visitEndAnchor = function (node) {\n this.found = true;\n };\n return EndAnchorFinder;\n }(BaseRegExpVisitor));\n var invalidRegex = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n try {\n var regexpAst = getRegExpAst(pattern);\n var endAnchorVisitor = new EndAnchorFinder();\n endAnchorVisitor.visit(regexpAst);\n return endAnchorVisitor.found;\n }\n catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return end_of_input.test(pattern.source);\n }\n });\n var errors = map(invalidRegex, function (currType) {\n return {\n message: \"Unexpected RegExp Anchor Error:\\n\" +\n \"\\tToken Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' cannot contain end of input anchor '$'\\n\" +\n \"\\tSee sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\nexport function findEmptyMatchRegExps(tokenTypes) {\n var matchesEmptyString = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n return pattern.test(\"\");\n });\n var errors = map(matchesEmptyString, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' must not match an empty string\",\n type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\nvar start_of_input = /[^\\\\[][\\^]|^\\^/;\nexport function findStartOfInputAnchor(tokenTypes) {\n var StartAnchorFinder = /** @class */ (function (_super) {\n __extends(StartAnchorFinder, _super);\n function StartAnchorFinder() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.found = false;\n return _this;\n }\n StartAnchorFinder.prototype.visitStartAnchor = function (node) {\n this.found = true;\n };\n return StartAnchorFinder;\n }(BaseRegExpVisitor));\n var invalidRegex = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n try {\n var regexpAst = getRegExpAst(pattern);\n var startAnchorVisitor = new StartAnchorFinder();\n startAnchorVisitor.visit(regexpAst);\n return startAnchorVisitor.found;\n }\n catch (e) {\n // old behavior in case of runtime exceptions with regexp-to-ast.\n /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/\n return start_of_input.test(pattern.source);\n }\n });\n var errors = map(invalidRegex, function (currType) {\n return {\n message: \"Unexpected RegExp Anchor Error:\\n\" +\n \"\\tToken Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' cannot contain start of input anchor '^'\\n\" +\n \"\\tSee https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#ANCHORS\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\nexport function findUnsupportedFlags(tokenTypes) {\n var invalidFlags = filter(tokenTypes, function (currType) {\n var pattern = currType[PATTERN];\n return (pattern instanceof RegExp && (pattern.multiline || pattern.global));\n });\n var errors = map(invalidFlags, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",\n type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\n// This can only test for identical duplicate RegExps, not semantically equivalent ones.\nexport function findDuplicatePatterns(tokenTypes) {\n var found = [];\n var identicalPatterns = map(tokenTypes, function (outerType) {\n return reduce(tokenTypes, function (result, innerType) {\n if (outerType.PATTERN.source === innerType.PATTERN.source &&\n !contains(found, innerType) &&\n innerType.PATTERN !== Lexer.NA) {\n // this avoids duplicates in the result, each Token Type may only appear in one \"set\"\n // in essence we are creating Equivalence classes on equality relation.\n found.push(innerType);\n result.push(innerType);\n return result;\n }\n return result;\n }, []);\n });\n identicalPatterns = compact(identicalPatterns);\n var duplicatePatterns = filter(identicalPatterns, function (currIdenticalSet) {\n return currIdenticalSet.length > 1;\n });\n var errors = map(duplicatePatterns, function (setOfIdentical) {\n var tokenTypeNames = map(setOfIdentical, function (currType) {\n return currType.name;\n });\n var dupPatternSrc = first(setOfIdentical).PATTERN;\n return {\n message: \"The same RegExp pattern ->\" + dupPatternSrc + \"<-\" +\n (\"has been used in all of the following Token Types: \" + tokenTypeNames.join(\", \") + \" <-\"),\n type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n tokenTypes: setOfIdentical\n };\n });\n return errors;\n}\nexport function findInvalidGroupType(tokenTypes) {\n var invalidTypes = filter(tokenTypes, function (clazz) {\n if (!has(clazz, \"GROUP\")) {\n return false;\n }\n var group = clazz.GROUP;\n return group !== Lexer.SKIPPED && group !== Lexer.NA && !isString(group);\n });\n var errors = map(invalidTypes, function (currType) {\n return {\n message: \"Token Type: ->\" +\n currType.name +\n \"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",\n type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n}\nexport function findModesThatDoNotExist(tokenTypes, validModes) {\n var invalidModes = filter(tokenTypes, function (clazz) {\n return (clazz.PUSH_MODE !== undefined &&\n !contains(validModes, clazz.PUSH_MODE));\n });\n var errors = map(invalidModes, function (tokType) {\n var msg = \"Token Type: ->\" + tokType.name + \"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->\" + tokType.PUSH_MODE + \"<-\" +\n \"which does not exist\";\n return {\n message: msg,\n type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,\n tokenTypes: [tokType]\n };\n });\n return errors;\n}\nexport function findUnreachablePatterns(tokenTypes) {\n var errors = [];\n var canBeTested = reduce(tokenTypes, function (result, tokType, idx) {\n var pattern = tokType.PATTERN;\n if (pattern === Lexer.NA) {\n return result;\n }\n // a more comprehensive validation for all forms of regExps would require\n // deeper regExp analysis capabilities\n if (isString(pattern)) {\n result.push({ str: pattern, idx: idx, tokenType: tokType });\n }\n else if (isRegExp(pattern) && noMetaChar(pattern)) {\n result.push({ str: pattern.source, idx: idx, tokenType: tokType });\n }\n return result;\n }, []);\n forEach(tokenTypes, function (tokType, testIdx) {\n forEach(canBeTested, function (_a) {\n var str = _a.str, idx = _a.idx, tokenType = _a.tokenType;\n if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n var msg = \"Token: ->\" + tokenType.name + \"<- can never be matched.\\n\" +\n (\"Because it appears AFTER the Token Type ->\" + tokType.name + \"<-\") +\n \"in the lexer's definition.\\n\" +\n \"See https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#UNREACHABLE\";\n errors.push({\n message: msg,\n type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,\n tokenTypes: [tokType, tokenType]\n });\n }\n });\n });\n return errors;\n}\nfunction testTokenType(str, pattern) {\n /* istanbul ignore else */\n if (isRegExp(pattern)) {\n var regExpArray = pattern.exec(str);\n return regExpArray !== null && regExpArray.index === 0;\n }\n else if (isFunction(pattern)) {\n // maintain the API of custom patterns\n return pattern(str, 0, [], {});\n }\n else if (has(pattern, \"exec\")) {\n // maintain the API of custom patterns\n return pattern.exec(str, 0, [], {});\n }\n else if (typeof pattern === \"string\") {\n return pattern === str;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nfunction noMetaChar(regExp) {\n //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp\n var metaChars = [\n \".\",\n \"\\\\\",\n \"[\",\n \"]\",\n \"|\",\n \"^\",\n \"$\",\n \"(\",\n \")\",\n \"?\",\n \"*\",\n \"+\",\n \"{\"\n ];\n return (find(metaChars, function (char) { return regExp.source.indexOf(char) !== -1; }) ===\n undefined);\n}\nexport function addStartOfInput(pattern) {\n var flags = pattern.ignoreCase ? \"i\" : \"\";\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(\"^(?:\" + pattern.source + \")\", flags);\n}\nexport function addStickyFlag(pattern) {\n var flags = pattern.ignoreCase ? \"iy\" : \"y\";\n // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.\n // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)\n return new RegExp(\"\" + pattern.source, flags);\n}\nexport function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n var errors = [];\n // some run time checks to help the end users.\n if (!has(lexerDefinition, DEFAULT_MODE)) {\n errors.push({\n message: \"A MultiMode Lexer cannot be initialized without a <\" +\n DEFAULT_MODE +\n \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\n });\n }\n if (!has(lexerDefinition, MODES)) {\n errors.push({\n message: \"A MultiMode Lexer cannot be initialized without a <\" +\n MODES +\n \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\n });\n }\n if (has(lexerDefinition, MODES) &&\n has(lexerDefinition, DEFAULT_MODE) &&\n !has(lexerDefinition.modes, lexerDefinition.defaultMode)) {\n errors.push({\n message: \"A MultiMode Lexer cannot be initialized with a \" + DEFAULT_MODE + \": <\" + lexerDefinition.defaultMode + \">\" +\n \"which does not exist\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\n });\n }\n if (has(lexerDefinition, MODES)) {\n forEach(lexerDefinition.modes, function (currModeValue, currModeName) {\n forEach(currModeValue, function (currTokType, currIdx) {\n if (isUndefined(currTokType)) {\n errors.push({\n message: \"A Lexer cannot be initialized using an undefined Token Type. Mode:\" +\n (\"<\" + currModeName + \"> at index: <\" + currIdx + \">\\n\"),\n type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\n });\n }\n });\n });\n }\n return errors;\n}\nexport function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n var warnings = [];\n var hasAnyLineBreak = false;\n var allTokenTypes = compact(flatten(mapValues(lexerDefinition.modes, function (tokTypes) { return tokTypes; })));\n var concreteTokenTypes = reject(allTokenTypes, function (currType) { return currType[PATTERN] === Lexer.NA; });\n var terminatorCharCodes = getCharCodes(lineTerminatorCharacters);\n if (trackLines) {\n forEach(concreteTokenTypes, function (tokType) {\n var currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes);\n if (currIssue !== false) {\n var message = buildLineBreakIssueMessage(tokType, currIssue);\n var warningDescriptor = {\n message: message,\n type: currIssue.issue,\n tokenType: tokType\n };\n warnings.push(warningDescriptor);\n }\n else {\n // we don't want to attempt to scan if the user explicitly specified the line_breaks option.\n if (has(tokType, \"LINE_BREAKS\")) {\n if (tokType.LINE_BREAKS === true) {\n hasAnyLineBreak = true;\n }\n }\n else {\n if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) {\n hasAnyLineBreak = true;\n }\n }\n }\n });\n }\n if (trackLines && !hasAnyLineBreak) {\n warnings.push({\n message: \"Warning: No LINE_BREAKS Found.\\n\" +\n \"\\tThis Lexer has been defined to track line and column information,\\n\" +\n \"\\tBut none of the Token Types can be identified as matching a line terminator.\\n\" +\n \"\\tSee https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \\n\" +\n \"\\tfor details.\",\n type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS\n });\n }\n return warnings;\n}\nexport function cloneEmptyGroups(emptyGroups) {\n var clonedResult = {};\n var groupKeys = keys(emptyGroups);\n forEach(groupKeys, function (currKey) {\n var currGroupValue = emptyGroups[currKey];\n /* istanbul ignore else */\n if (isArray(currGroupValue)) {\n clonedResult[currKey] = [];\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n });\n return clonedResult;\n}\n// TODO: refactor to avoid duplication\nexport function isCustomPattern(tokenType) {\n var pattern = tokenType.PATTERN;\n /* istanbul ignore else */\n if (isRegExp(pattern)) {\n return false;\n }\n else if (isFunction(pattern)) {\n // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object\n return true;\n }\n else if (has(pattern, \"exec\")) {\n // ICustomPattern\n return true;\n }\n else if (isString(pattern)) {\n return false;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nexport function isShortPattern(pattern) {\n if (isString(pattern) && pattern.length === 1) {\n return pattern.charCodeAt(0);\n }\n else {\n return false;\n }\n}\n/**\n * Faster than using a RegExp for default newline detection during lexing.\n */\nexport var LineTerminatorOptimizedTester = {\n // implements /\\n|\\r\\n?/g.test\n test: function (text) {\n var len = text.length;\n for (var i = this.lastIndex; i < len; i++) {\n var c = text.charCodeAt(i);\n if (c === 10) {\n this.lastIndex = i + 1;\n return true;\n }\n else if (c === 13) {\n if (text.charCodeAt(i + 1) === 10) {\n this.lastIndex = i + 2;\n }\n else {\n this.lastIndex = i + 1;\n }\n return true;\n }\n }\n return false;\n },\n lastIndex: 0\n};\nfunction checkLineBreaksIssues(tokType, lineTerminatorCharCodes) {\n if (has(tokType, \"LINE_BREAKS\")) {\n // if the user explicitly declared the line_breaks option we will respect their choice\n // and assume it is correct.\n return false;\n }\n else {\n /* istanbul ignore else */\n if (isRegExp(tokType.PATTERN)) {\n try {\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN);\n }\n catch (e) {\n /* istanbul ignore next - to test this we would have to mock <canMatchCharCode> to throw an error */\n return {\n issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,\n errMsg: e.message\n };\n }\n return false;\n }\n else if (isString(tokType.PATTERN)) {\n // string literal patterns can always be analyzed to detect line terminator usage\n return false;\n }\n else if (isCustomPattern(tokType)) {\n // custom token types\n return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK };\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n }\n}\nexport function buildLineBreakIssueMessage(tokType, details) {\n /* istanbul ignore else */\n if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n return (\"Warning: unable to identify line terminator usage in pattern.\\n\" +\n (\"\\tThe problem is in the <\" + tokType.name + \"> Token Type\\n\") +\n (\"\\t Root cause: \" + details.errMsg + \".\\n\") +\n \"\\tFor details See: https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR\");\n }\n else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {\n return (\"Warning: A Custom Token Pattern should specify the <line_breaks> option.\\n\" +\n (\"\\tThe problem is in the <\" + tokType.name + \"> Token Type\\n\") +\n \"\\tFor details See: https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK\");\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nfunction getCharCodes(charsOrCodes) {\n var charCodes = map(charsOrCodes, function (numOrString) {\n if (isString(numOrString) && numOrString.length > 0) {\n return numOrString.charCodeAt(0);\n }\n else {\n return numOrString;\n }\n });\n return charCodes;\n}\nfunction addToMapOfArrays(map, key, value) {\n if (map[key] === undefined) {\n map[key] = [value];\n }\n else {\n map[key].push(value);\n }\n}\nexport var minOptimizationVal = 256;\n/**\n * We ae 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 */\nexport function charCodeToOptimizedIndex(charCode) {\n return charCode < minOptimizationVal\n ? charCode\n : charCodeToOptimizedIdxMap[charCode];\n}\n/**\n * This is a compromise between cold start / hot running performance\n * Creating this array takes ~3ms on a modern machine,\n * But if we perform the computation at runtime as needed the CSS Lexer benchmark\n * performance degrades by ~10%\n *\n * TODO: Perhaps it should be lazy initialized only if a charCode > 255 is used.\n */\nvar charCodeToOptimizedIdxMap = [];\nfunction initCharCodeToOptimizedIndexMap() {\n if (isEmpty(charCodeToOptimizedIdxMap)) {\n charCodeToOptimizedIdxMap = new Array(65536);\n for (var i = 0; i < 65536; i++) {\n /* tslint:disable */\n charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i;\n /* tslint:enable */\n }\n }\n}\n//# sourceMappingURL=lexer.js.map","import { cloneArr, compact, contains, difference, flatten, forEach, has, isArray, isEmpty, map } from \"../utils/utils\";\nexport function tokenStructuredMatcher(tokInstance, tokConstructor) {\n var instanceType = tokInstance.tokenTypeIdx;\n if (instanceType === tokConstructor.tokenTypeIdx) {\n return true;\n }\n else {\n return (tokConstructor.isParent === true &&\n tokConstructor.categoryMatchesMap[instanceType] === true);\n }\n}\n// Optimized tokenMatcher in case our grammar does not use token categories\n// Being so tiny it is much more likely to be in-lined and this avoid the function call overhead\nexport function tokenStructuredMatcherNoCategories(token, tokType) {\n return token.tokenTypeIdx === tokType.tokenTypeIdx;\n}\nexport var tokenShortNameIdx = 1;\nexport var tokenIdxToClass = {};\nexport function augmentTokenTypes(tokenTypes) {\n // collect the parent Token Types as well.\n var tokenTypesAndParents = expandCategories(tokenTypes);\n // add required tokenType and categoryMatches properties\n assignTokenDefaultProps(tokenTypesAndParents);\n // fill up the categoryMatches\n assignCategoriesMapProp(tokenTypesAndParents);\n assignCategoriesTokensProp(tokenTypesAndParents);\n forEach(tokenTypesAndParents, function (tokType) {\n tokType.isParent = tokType.categoryMatches.length > 0;\n });\n}\nexport function expandCategories(tokenTypes) {\n var result = cloneArr(tokenTypes);\n var categories = tokenTypes;\n var searching = true;\n while (searching) {\n categories = compact(flatten(map(categories, function (currTokType) { return currTokType.CATEGORIES; })));\n var newCategories = difference(categories, result);\n result = result.concat(newCategories);\n if (isEmpty(newCategories)) {\n searching = false;\n }\n else {\n categories = newCategories;\n }\n }\n return result;\n}\nexport function assignTokenDefaultProps(tokenTypes) {\n forEach(tokenTypes, function (currTokType) {\n if (!hasShortKeyProperty(currTokType)) {\n tokenIdxToClass[tokenShortNameIdx] = currTokType;\n currTokType.tokenTypeIdx = tokenShortNameIdx++;\n }\n // CATEGORIES? : TokenType | TokenType[]\n if (hasCategoriesProperty(currTokType) &&\n !isArray(currTokType.CATEGORIES)\n // &&\n // !isUndefined(currTokType.CATEGORIES.PATTERN)\n ) {\n currTokType.CATEGORIES = [currTokType.CATEGORIES];\n }\n if (!hasCategoriesProperty(currTokType)) {\n currTokType.CATEGORIES = [];\n }\n if (!hasExtendingTokensTypesProperty(currTokType)) {\n currTokType.categoryMatches = [];\n }\n if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n currTokType.categoryMatchesMap = {};\n }\n });\n}\nexport function assignCategoriesTokensProp(tokenTypes) {\n forEach(tokenTypes, function (currTokType) {\n // avoid duplications\n currTokType.categoryMatches = [];\n forEach(currTokType.categoryMatchesMap, function (val, key) {\n currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx);\n });\n });\n}\nexport function assignCategoriesMapProp(tokenTypes) {\n forEach(tokenTypes, function (currTokType) {\n singleAssignCategoriesToksMap([], currTokType);\n });\n}\nexport function singleAssignCategoriesToksMap(path, nextNode) {\n forEach(path, function (pathNode) {\n nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true;\n });\n forEach(nextNode.CATEGORIES, function (nextCategory) {\n var newPath = path.concat(nextNode);\n // avoids infinite loops due to cyclic categories.\n if (!contains(newPath, nextCategory)) {\n singleAssignCategoriesToksMap(newPath, nextCategory);\n }\n });\n}\nexport function hasShortKeyProperty(tokType) {\n return has(tokType, \"tokenTypeIdx\");\n}\nexport function hasCategoriesProperty(tokType) {\n return has(tokType, \"CATEGORIES\");\n}\nexport function hasExtendingTokensTypesProperty(tokType) {\n return has(tokType, \"categoryMatches\");\n}\nexport function hasExtendingTokensTypesMapProperty(tokType) {\n return has(tokType, \"categoryMatchesMap\");\n}\nexport function isTokenType(tokType) {\n return has(tokType, \"tokenTypeIdx\");\n}\n//# sourceMappingURL=tokens.js.map","export var defaultLexerErrorProvider = {\n buildUnableToPopLexerModeMessage: function (token) {\n return \"Unable to pop Lexer Mode after encountering Token ->\" + token.image + \"<- The Mode Stack is empty\";\n },\n buildUnexpectedCharactersMessage: function (fullText, startOffset, length, line, column) {\n return (\"unexpected character: ->\" + fullText.charAt(startOffset) + \"<- at offset: \" + startOffset + \",\" + (\" skipped \" + length + \" characters.\"));\n }\n};\n//# sourceMappingURL=lexer_errors_public.js.map","import { analyzeTokenTypes, charCodeToOptimizedIndex, cloneEmptyGroups, DEFAULT_MODE, LineTerminatorOptimizedTester, performRuntimeChecks, performWarningRuntimeChecks, SUPPORT_STICKY, validatePatterns } from \"./lexer\";\nimport { cloneArr, cloneObj, forEach, IDENTITY, isArray, isEmpty, isUndefined, keys, last, map, merge, NOOP, PRINT_WARNING, reduce, reject, timer, toFastProperties } from \"../utils/utils\";\nimport { augmentTokenTypes } from \"./tokens\";\nimport { defaultLexerErrorProvider } from \"../scan/lexer_errors_public\";\nimport { clearRegExpParserCache } from \"./reg_exp_parser\";\nexport var LexerDefinitionErrorType;\n(function (LexerDefinitionErrorType) {\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"MISSING_PATTERN\"] = 0] = \"MISSING_PATTERN\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"INVALID_PATTERN\"] = 1] = \"INVALID_PATTERN\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"EOI_ANCHOR_FOUND\"] = 2] = \"EOI_ANCHOR_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"UNSUPPORTED_FLAGS_FOUND\"] = 3] = \"UNSUPPORTED_FLAGS_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"DUPLICATE_PATTERNS_FOUND\"] = 4] = \"DUPLICATE_PATTERNS_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"INVALID_GROUP_TYPE_FOUND\"] = 5] = \"INVALID_GROUP_TYPE_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"PUSH_MODE_DOES_NOT_EXIST\"] = 6] = \"PUSH_MODE_DOES_NOT_EXIST\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\"] = 7] = \"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\"] = 8] = \"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\"] = 9] = \"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\"] = 10] = \"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"SOI_ANCHOR_FOUND\"] = 11] = \"SOI_ANCHOR_FOUND\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"EMPTY_MATCH_PATTERN\"] = 12] = \"EMPTY_MATCH_PATTERN\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"NO_LINE_BREAKS_FLAGS\"] = 13] = \"NO_LINE_BREAKS_FLAGS\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"UNREACHABLE_PATTERN\"] = 14] = \"UNREACHABLE_PATTERN\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"IDENTIFY_TERMINATOR\"] = 15] = \"IDENTIFY_TERMINATOR\";\n LexerDefinitionErrorType[LexerDefinitionErrorType[\"CUSTOM_LINE_BREAK\"] = 16] = \"CUSTOM_LINE_BREAK\";\n})(LexerDefinitionErrorType || (LexerDefinitionErrorType = {}));\nvar DEFAULT_LEXER_CONFIG = {\n deferDefinitionErrorsHandling: false,\n positionTracking: \"full\",\n lineTerminatorsPattern: /\\n|\\r\\n?/g,\n lineTerminatorCharacters: [\"\\n\", \"\\r\"],\n ensureOptimizations: false,\n safeMode: false,\n errorMessageProvider: defaultLexerErrorProvider,\n traceInitPerf: false,\n skipValidations: false\n};\nObject.freeze(DEFAULT_LEXER_CONFIG);\nvar Lexer = /** @class */ (function () {\n function Lexer(lexerDefinition, config) {\n var _this = this;\n if (config === void 0) { config = DEFAULT_LEXER_CONFIG; }\n this.lexerDefinition = lexerDefinition;\n this.lexerDefinitionErrors = [];\n this.lexerDefinitionWarning = [];\n this.patternIdxToConfig = {};\n this.charCodeToPatternIdxToConfig = {};\n this.modes = [];\n this.emptyGroups = {};\n this.config = undefined;\n this.trackStartLines = true;\n this.trackEndLines = true;\n this.hasCustom = false;\n this.canModeBeOptimized = {};\n if (typeof config === \"boolean\") {\n throw Error(\"The second argument to the Lexer constructor is now an ILexerConfig Object.\\n\" +\n \"a boolean 2nd argument is no longer supported\");\n }\n // todo: defaults func?\n this.config = merge(DEFAULT_LEXER_CONFIG, config);\n var traceInitVal = this.config.traceInitPerf;\n if (traceInitVal === true) {\n this.traceInitMaxIdent = Infinity;\n this.traceInitPerf = true;\n }\n else if (typeof traceInitVal === \"number\") {\n this.traceInitMaxIdent = traceInitVal;\n this.traceInitPerf = true;\n }\n this.traceInitIndent = -1;\n this.TRACE_INIT(\"Lexer Constructor\", function () {\n var actualDefinition;\n var hasOnlySingleMode = true;\n _this.TRACE_INIT(\"Lexer Config handling\", function () {\n if (_this.config.lineTerminatorsPattern ===\n DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) {\n // optimized built-in implementation for the defaults definition of lineTerminators\n _this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester;\n }\n else {\n if (_this.config.lineTerminatorCharacters ===\n DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) {\n throw Error(\"Error: Missing <lineTerminatorCharacters> property on the Lexer config.\\n\" +\n \"\\tFor details See: https://sap.github.io/chevrotain/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS\");\n }\n }\n if (config.safeMode && config.ensureOptimizations) {\n throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');\n }\n _this.trackStartLines = /full|onlyStart/i.test(_this.config.positionTracking);\n _this.trackEndLines = /full/i.test(_this.config.positionTracking);\n // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.\n if (isArray(lexerDefinition)) {\n actualDefinition = { modes: {} };\n actualDefinition.modes[DEFAULT_MODE] = cloneArr(lexerDefinition);\n actualDefinition[DEFAULT_MODE] = DEFAULT_MODE;\n }\n else {\n // no conversion needed, input should already be a IMultiModeLexerDefinition\n hasOnlySingleMode = false;\n actualDefinition = cloneObj((lexerDefinition));\n }\n });\n if (_this.config.skipValidations === false) {\n _this.TRACE_INIT(\"performRuntimeChecks\", function () {\n _this.lexerDefinitionErrors = _this.lexerDefinitionErrors.concat(performRuntimeChecks(actualDefinition, _this.trackStartLines, _this.config.lineTerminatorCharacters));\n });\n _this.TRACE_INIT(\"performWarningRuntimeChecks\", function () {\n _this.lexerDefinitionWarning = _this.lexerDefinitionWarning.concat(performWarningRuntimeChecks(actualDefinition, _this.trackStartLines, _this.config.lineTerminatorCharacters));\n });\n }\n // for extra robustness to avoid throwing an none informative error message\n actualDefinition.modes = actualDefinition.modes\n ? actualDefinition.modes\n : {};\n // an error of undefined TokenTypes will be detected in \"performRuntimeChecks\" above.\n // this transformation is to increase robustness in the case of partially invalid lexer definition.\n forEach(actualDefinition.modes, function (currModeValue, currModeName) {\n actualDefinition.modes[currModeName] = reject(currModeValue, function (currTokType) { return isUndefined(currTokType); });\n });\n var allModeNames = keys(actualDefinition.modes);\n forEach(actualDefinition.modes, function (currModDef, currModName) {\n _this.TRACE_INIT(\"Mode: <\" + currModName + \"> processing\", function () {\n _this.modes.push(currModName);\n if (_this.config.skipValidations === false) {\n _this.TRACE_INIT(\"validatePatterns\", function () {\n _this.lexerDefinitionErrors = _this.lexerDefinitionErrors.concat(validatePatterns(currModDef, allModeNames));\n });\n }\n // If definition errors were encountered, the analysis phase may fail unexpectedly/\n // Considering a lexer with definition errors may never be used, there is no point\n // to performing the analysis anyhow...\n if (isEmpty(_this.lexerDefinitionErrors)) {\n augmentTokenTypes(currModDef);\n var currAnalyzeResult_1;\n _this.TRACE_INIT(\"analyzeTokenTypes\", function () {\n currAnalyzeResult_1 = analyzeTokenTypes(currModDef, {\n lineTerminatorCharacters: _this.config\n .lineTerminatorCharacters,\n positionTracking: config.positionTracking,\n ensureOptimizations: config.ensureOptimizations,\n safeMode: config.safeMode,\n tracer: _this.TRACE_INIT.bind(_this)\n });\n });\n _this.patternIdxToConfig[currModName] =\n currAnalyzeResult_1.patternIdxToConfig;\n _this.charCodeToPatternIdxToConfig[currModName] =\n currAnalyzeResult_1.charCodeToPatternIdxToConfig;\n _this.emptyGroups = merge(_this.emptyGroups, currAnalyzeResult_1.emptyGroups);\n _this.hasCustom =\n currAnalyzeResult_1.hasCustom || _this.hasCustom;\n _this.canModeBeOptimized[currModName] =\n currAnalyzeResult_1.canBeOptimized;\n }\n });\n });\n _this.defaultMode = actualDefinition.defaultMode;\n if (!isEmpty(_this.lexerDefinitionErrors) &&\n !_this.config.deferDefinitionErrorsHandling) {\n var allErrMessages = map(_this.lexerDefinitionErrors, function (error) {\n return error.message;\n });\n var allErrMessagesString = allErrMessages.join(\"-----------------------\\n\");\n throw new Error(\"Errors detected in definition of Lexer:\\n\" +\n allErrMessagesString);\n }\n // Only print warning if there are no errors, This will avoid pl\n forEach(_this.lexerDefinitionWarning, function (warningDescriptor) {\n PRINT_WARNING(warningDescriptor.message);\n });\n _this.TRACE_INIT(\"Choosing sub-methods implementations\", function () {\n // Choose the relevant internal implementations for this specific parser.\n // These implementations should be in-lined by the JavaScript engine\n // to provide optimal performance in each scenario.\n if (SUPPORT_STICKY) {\n _this.chopInput = IDENTITY;\n _this.match = _this.matchWithTest;\n }\n else {\n _this.updateLastIndex = NOOP;\n _this.match = _this.matchWithExec;\n }\n if (hasOnlySingleMode) {\n _this.handleModes = NOOP;\n }\n if (_this.trackStartLines === false) {\n _this.computeNewColumn = IDENTITY;\n }\n if (_this.trackEndLines === false) {\n _this.updateTokenEndLineColumnLocation = NOOP;\n }\n if (/full/i.test(_this.config.positionTracking)) {\n _this.createTokenInstance = _this.createFullToken;\n }\n else if (/onlyStart/i.test(_this.config.positionTracking)) {\n _this.createTokenInstance = _this.createStartOnlyToken;\n }\n else if (/onlyOffset/i.test(_this.config.positionTracking)) {\n _this.createTokenInstance = _this.createOffsetOnlyToken;\n }\n else {\n throw Error(\"Invalid <positionTracking> config option: \\\"\" + _this.config.positionTracking + \"\\\"\");\n }\n if (_this.hasCustom) {\n _this.addToken = _this.addTokenUsingPush;\n _this.handlePayload = _this.handlePayloadWithCustom;\n }\n else {\n _this.addToken = _this.addTokenUsingMemberAccess;\n _this.handlePayload = _this.handlePayloadNoCustom;\n }\n });\n _this.TRACE_INIT(\"Failed Optimization Warnings\", function () {\n var unOptimizedModes = reduce(_this.canModeBeOptimized, function (cannotBeOptimized, canBeOptimized, modeName) {\n if (canBeOptimized === false) {\n cannotBeOptimized.push(modeName);\n }\n return cannotBeOptimized;\n }, []);\n if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n throw Error(\"Lexer Modes: < \" + unOptimizedModes.join(\", \") + \" > cannot be optimized.\\n\" +\n '\\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\\n' +\n \"\\t Or inspect the console log for details on how to resolve these issues.\");\n }\n });\n _this.TRACE_INIT(\"clearRegExpParserCache\", function () {\n clearRegExpParserCache();\n });\n _this.TRACE_INIT(\"toFastProperties\", function () {\n toFastProperties(_this);\n });\n });\n }\n Lexer.prototype.tokenize = function (text, initialMode) {\n if (initialMode === void 0) { initialMode = this.defaultMode; }\n if (!isEmpty(this.lexerDefinitionErrors)) {\n var allErrMessages = map(this.lexerDefinitionErrors, function (error) {\n return error.message;\n });\n var allErrMessagesString = allErrMessages.join(\"-----------------------\\n\");\n throw new Error(\"Unable to Tokenize because Errors detected in definition of Lexer:\\n\" +\n allErrMessagesString);\n }\n var lexResult = this.tokenizeInternal(text, initialMode);\n return lexResult;\n };\n // There is quite a bit of duplication between this and \"tokenizeInternalLazy\"\n // This is intentional due to performance considerations.\n Lexer.prototype.tokenizeInternal = function (text, initialMode) {\n var _this = this;\n var i, j, matchAltImage, longerAltIdx, matchedImage, payload, altPayload, imageLength, group, tokType, newToken, errLength, droppedChar, msg, match;\n var orgText = text;\n var orgLength = orgText.length;\n var offset = 0;\n var 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 var 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 var matchedTokens = new Array(guessedNumberOfTokens);\n var errors = [];\n var line = this.trackStartLines ? 1 : undefined;\n var column = this.trackStartLines ? 1 : undefined;\n var groups = cloneEmptyGroups(this.emptyGroups);\n var trackLines = this.trackStartLines;\n var lineTerminatorPattern = this.config.lineTerminatorsPattern;\n var currModePatternsLength = 0;\n var patternIdxToConfig = [];\n var currCharCodeToPatternIdxToConfig = [];\n var modeStack = [];\n var emptyArray = [];\n Object.freeze(emptyArray);\n var getPossiblePatterns = undefined;\n function getPossiblePatternsSlow() {\n return patternIdxToConfig;\n }\n function getPossiblePatternsOptimized(charCode) {\n var optimizedCharIdx = charCodeToOptimizedIndex(charCode);\n var possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx];\n if (possiblePatterns === undefined) {\n return emptyArray;\n }\n else {\n return possiblePatterns;\n }\n }\n var pop_mode = function (popToken) {\n // TODO: perhaps avoid this error in the edge case there is no more input?\n if (modeStack.length === 1 &&\n // if we have both a POP_MODE and a PUSH_MODE this is in-fact a \"transition\"\n // So no error should occur.\n popToken.tokenType.PUSH_MODE === undefined) {\n // if we try to pop the last mode there lexer will no longer have ANY mode.\n // thus the pop is ignored, an error will be created and the lexer will continue parsing in the previous mode.\n var msg_1 = _this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken);\n errors.push({\n offset: popToken.startOffset,\n line: popToken.startLine !== undefined\n ? popToken.startLine\n : undefined,\n column: popToken.startColumn !== undefined\n ? popToken.startColumn\n : undefined,\n length: popToken.image.length,\n message: msg_1\n });\n }\n else {\n modeStack.pop();\n var newMode = last(modeStack);\n patternIdxToConfig = _this.patternIdxToConfig[newMode];\n currCharCodeToPatternIdxToConfig = _this\n .charCodeToPatternIdxToConfig[newMode];\n currModePatternsLength = patternIdxToConfig.length;\n var modeCanBeOptimized = _this.canModeBeOptimized[newMode] &&\n _this.config.safeMode === false;\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized;\n }\n else {\n getPossiblePatterns = getPossiblePatternsSlow;\n }\n }\n };\n function push_mode(newMode) {\n modeStack.push(newMode);\n currCharCodeToPatternIdxToConfig = this\n .charCodeToPatternIdxToConfig[newMode];\n patternIdxToConfig = this.patternIdxToConfig[newMode];\n currModePatternsLength = patternIdxToConfig.length;\n currModePatternsLength = patternIdxToConfig.length;\n var modeCanBeOptimized = this.canModeBeOptimized[newMode] &&\n this.config.safeMode === false;\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized;\n }\n else {\n getPossiblePatterns = getPossiblePatternsSlow;\n }\n }\n // this pattern seems to avoid a V8 de-optimization, although that de-optimization does not\n // seem to matter performance wise.\n push_mode.call(this, initialMode);\n var currConfig;\n while (offset < orgLength) {\n matchedImage = null;\n var nextCharCode = orgText.charCodeAt(offset);\n var chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode);\n var chosenPatternsLength = chosenPatternIdxToConfig.length;\n for (i = 0; i < chosenPatternsLength; i++) {\n currConfig = chosenPatternIdxToConfig[i];\n var currPattern = currConfig.pattern;\n payload = null;\n // manually in-lined because > 600 chars won't be in-lined in V8\n var singleCharCode = currConfig.short;\n if (singleCharCode !== false) {\n if (nextCharCode === singleCharCode) {\n // single character string\n matchedImage = currPattern;\n }\n }\n else if (currConfig.isCustom === true) {\n match = currPattern.exec(orgText, offset, matchedTokens, groups);\n if (match !== null) {\n matchedImage = match[0];\n if (match.payload !== undefined) {\n payload = match.payload;\n }\n }\n else {\n matchedImage = null;\n }\n }\n else {\n this.updateLastIndex(currPattern, offset);\n matchedImage = this.match(currPattern, text, offset);\n }\n if (matchedImage !== null) {\n // even though this pattern matched we must try a another longer alternative.\n // this can be used to prioritize keywords over identifiers\n longerAltIdx = currConfig.longerAlt;\n if (longerAltIdx !== undefined) {\n // TODO: micro optimize, avoid extra prop access\n // by saving/linking longerAlt on the original config?\n var longerAltConfig = patternIdxToConfig[longerAltIdx];\n var longerAltPattern = longerAltConfig.pattern;\n altPayload = null;\n // single Char can never be a longer alt so no need to test it.\n // manually in-lined because > 600 chars won't be in-lined in V8\n if (longerAltConfig.isCustom === true) {\n match = longerAltPattern.exec(orgText, offset, matchedTokens, groups);\n if (match !== null) {\n matchAltImage = match[0];\n if (match.payload !== undefined) {\n altPayload = match.payload;\n }\n }\n else {\n matchAltImage = null;\n }\n }\n else {\n this.updateLastIndex(longerAltPattern, offset);\n matchAltImage = this.match(longerAltPattern, text, offset);\n }\n if (matchAltImage &&\n matchAltImage.length > matchedImage.length) {\n matchedImage = matchAltImage;\n payload = altPayload;\n currConfig = longerAltConfig;\n }\n }\n break;\n }\n }\n // successful match\n if (matchedImage !== null) {\n imageLength = matchedImage.length;\n group = currConfig.group;\n if (group !== undefined) {\n tokType = currConfig.tokenTypeIdx;\n // TODO: \"offset + imageLength\" and the new column may be computed twice in case of \"full\" location information inside\n // createFullToken method\n newToken = this.createTokenInstance(matchedImage, offset, tokType, currConfig.tokenType, line, column, imageLength);\n this.handlePayload(newToken, payload);\n // TODO: optimize NOOP in case there are no special groups?\n if (group === false) {\n matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken);\n }\n else {\n groups[group].push(newToken);\n }\n }\n text = this.chopInput(text, imageLength);\n offset = offset + imageLength;\n // TODO: with newlines the column may be assigned twice\n column = this.computeNewColumn(column, imageLength);\n if (trackLines === true &&\n currConfig.canLineTerminator === true) {\n var numOfLTsInMatch = 0;\n var foundTerminator = void 0;\n var lastLTEndOffset = void 0;\n lineTerminatorPattern.lastIndex = 0;\n do {\n foundTerminator = lineTerminatorPattern.test(matchedImage);\n if (foundTerminator === true) {\n lastLTEndOffset =\n lineTerminatorPattern.lastIndex - 1;\n numOfLTsInMatch++;\n }\n } while (foundTerminator === true);\n if (numOfLTsInMatch !== 0) {\n line = line + numOfLTsInMatch;\n column = imageLength - lastLTEndOffset;\n this.updateTokenEndLineColumnLocation(newToken, group, lastLTEndOffset, numOfLTsInMatch, line, column, imageLength);\n }\n }\n // will be NOOP if no modes present\n this.handleModes(currConfig, pop_mode, push_mode, newToken);\n }\n else {\n // error recovery, drop characters until we identify a valid token's start point\n var errorStartOffset = offset;\n var errorLine = line;\n var errorColumn = column;\n var foundResyncPoint = false;\n while (!foundResyncPoint && offset < orgLength) {\n // drop chars until we succeed in matching something\n droppedChar = orgText.charCodeAt(offset);\n // Identity Func (when sticky flag is enabled)\n text = this.chopInput(text, 1);\n offset++;\n for (j = 0; j < currModePatternsLength; j++) {\n var currConfig_1 = patternIdxToConfig[j];\n var currPattern = currConfig_1.pattern;\n // manually in-lined because > 600 chars won't be in-lined in V8\n var singleCharCode = currConfig_1.short;\n if (singleCharCode !== false) {\n if (orgText.charCodeAt(offset) === singleCharCode) {\n // single character string\n foundResyncPoint = true;\n }\n }\n else if (currConfig_1.isCustom === true) {\n foundResyncPoint =\n currPattern.exec(orgText, offset, matchedTokens, groups) !== null;\n }\n else {\n this.updateLastIndex(currPattern, offset);\n foundResyncPoint = currPattern.exec(text) !== null;\n }\n if (foundResyncPoint === true) {\n break;\n }\n }\n }\n errLength = offset - errorStartOffset;\n // at this point we either re-synced or reached the end of the input text\n msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(orgText, errorStartOffset, errLength, errorLine, errorColumn);\n errors.push({\n offset: errorStartOffset,\n line: errorLine,\n column: errorColumn,\n length: errLength,\n message: msg\n });\n }\n }\n // if we do have custom patterns which push directly into the\n // TODO: custom tokens should not push directly??\n if (!this.hasCustom) {\n // if we guessed a too large size for the tokens array this will shrink it to the right size.\n matchedTokens.length = matchedTokensIndex;\n }\n return {\n tokens: matchedTokens,\n groups: groups,\n errors: errors\n };\n };\n Lexer.prototype.handleModes = function (config, pop_mode, push_mode, newToken) {\n if (config.pop === true) {\n // need to save the PUSH_MODE property as if the mode is popped\n // patternIdxToPopMode is updated to reflect the new mode after popping the stack\n var pushMode = config.push;\n pop_mode(newToken);\n if (pushMode !== undefined) {\n push_mode.call(this, pushMode);\n }\n }\n else if (config.push !== undefined) {\n push_mode.call(this, config.push);\n }\n };\n Lexer.prototype.chopInput = function (text, length) {\n return text.substring(length);\n };\n Lexer.prototype.updateLastIndex = function (regExp, newLastIndex) {\n regExp.lastIndex = newLastIndex;\n };\n // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n Lexer.prototype.updateTokenEndLineColumnLocation = function (newToken, group, lastLTIdx, numOfLTsInMatch, line, column, imageLength) {\n var 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 Lexer.prototype.computeNewColumn = function (oldColumn, imageLength) {\n return oldColumn + imageLength;\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 Lexer.prototype.createTokenInstance = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return null;\n };\n Lexer.prototype.createOffsetOnlyToken = function (image, startOffset, tokenTypeIdx, tokenType) {\n return {\n image: image,\n startOffset: startOffset,\n tokenTypeIdx: tokenTypeIdx,\n tokenType: tokenType\n };\n };\n Lexer.prototype.createStartOnlyToken = function (image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) {\n return {\n image: image,\n startOffset: startOffset,\n startLine: startLine,\n startColumn: startColumn,\n tokenTypeIdx: tokenTypeIdx,\n tokenType: tokenType\n };\n };\n Lexer.prototype.createFullToken = function (image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) {\n return {\n image: image,\n startOffset: startOffset,\n endOffset: startOffset + imageLength - 1,\n startLine: startLine,\n endLine: startLine,\n startColumn: startColumn,\n endColumn: startColumn + imageLength - 1,\n tokenTypeIdx: tokenTypeIdx,\n tokenType: tokenType\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 Lexer.prototype.addToken = function (tokenVector, index, tokenToAdd) {\n return 666;\n };\n Lexer.prototype.addTokenUsingPush = function (tokenVector, index, tokenToAdd) {\n tokenVector.push(tokenToAdd);\n return index;\n };\n Lexer.prototype.addTokenUsingMemberAccess = function (tokenVector, index, tokenToAdd) {\n tokenVector[index] = tokenToAdd;\n index++;\n return index;\n };\n // Place holder, will be replaced by the correct variant according to the hasCustom flag option at runtime.\n /* istanbul ignore next - place holder */\n Lexer.prototype.handlePayload = function (token, payload) { };\n Lexer.prototype.handlePayloadNoCustom = function (token, payload) { };\n Lexer.prototype.handlePayloadWithCustom = function (token, payload) {\n if (payload !== null) {\n token.payload = payload;\n }\n };\n /* istanbul ignore next - place holder to be replaced with chosen alternative at runtime */\n Lexer.prototype.match = function (pattern, text, offset) {\n return null;\n };\n Lexer.prototype.matchWithTest = function (pattern, text, offset) {\n var found = pattern.test(text);\n if (found === true) {\n return text.substring(offset, pattern.lastIndex);\n }\n return null;\n };\n Lexer.prototype.matchWithExec = function (pattern, text) {\n var regExpArray = pattern.exec(text);\n return regExpArray !== null ? regExpArray[0] : regExpArray;\n };\n // Duplicated from the parser's perf trace trait to allow future extraction\n // of the lexer to a separate package.\n Lexer.prototype.TRACE_INIT = function (phaseDesc, phaseImpl) {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++;\n var indent = new Array(this.traceInitIndent + 1).join(\"\\t\");\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(indent + \"--> <\" + phaseDesc + \">\");\n }\n var _a = timer(phaseImpl), time = _a.time, value = _a.value;\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n var traceMethod = time > 10 ? console.warn : console.log;\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(indent + \"<-- <\" + phaseDesc + \"> time: \" + time + \"ms\");\n }\n this.traceInitIndent--;\n return value;\n }\n else {\n return phaseImpl();\n }\n };\n Lexer.SKIPPED = \"This marks a skipped Token pattern, this means each token identified by it will\" +\n \"be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\";\n Lexer.NA = /NOT_APPLICABLE/;\n return Lexer;\n}());\nexport { Lexer };\n//# sourceMappingURL=lexer_public.js.map","import { has, isString, isUndefined } from \"../utils/utils\";\nimport { Lexer } from \"./lexer_public\";\nimport { augmentTokenTypes, tokenStructuredMatcher } from \"./tokens\";\nexport function tokenLabel(tokType) {\n if (hasTokenLabel(tokType)) {\n return tokType.LABEL;\n }\n else {\n return tokType.name;\n }\n}\nexport function tokenName(tokType) {\n return tokType.name;\n}\nexport function hasTokenLabel(obj) {\n return isString(obj.LABEL) && obj.LABEL !== \"\";\n}\nvar PARENT = \"parent\";\nvar CATEGORIES = \"categories\";\nvar LABEL = \"label\";\nvar GROUP = \"group\";\nvar PUSH_MODE = \"push_mode\";\nvar POP_MODE = \"pop_mode\";\nvar LONGER_ALT = \"longer_alt\";\nvar LINE_BREAKS = \"line_breaks\";\nvar START_CHARS_HINT = \"start_chars_hint\";\nexport function createToken(config) {\n return createTokenInternal(config);\n}\nfunction createTokenInternal(config) {\n var pattern = config.pattern;\n var tokenType = {};\n tokenType.name = config.name;\n if (!isUndefined(pattern)) {\n tokenType.PATTERN = pattern;\n }\n if (has(config, PARENT)) {\n throw \"The parent property is no longer supported.\\n\" +\n \"See: https://github.com/SAP/chevrotain/issues/564#issuecomment-349062346 for details.\";\n }\n if (has(config, CATEGORIES)) {\n // casting to ANY as this will be fixed inside `augmentTokenTypes``\n tokenType.CATEGORIES = config[CATEGORIES];\n }\n augmentTokenTypes([tokenType]);\n if (has(config, LABEL)) {\n tokenType.LABEL = config[LABEL];\n }\n if (has(config, GROUP)) {\n tokenType.GROUP = config[GROUP];\n }\n if (has(config, POP_MODE)) {\n tokenType.POP_MODE = config[POP_MODE];\n }\n if (has(config, PUSH_MODE)) {\n tokenType.PUSH_MODE = config[PUSH_MODE];\n }\n if (has(config, LONGER_ALT)) {\n tokenType.LONGER_ALT = config[LONGER_ALT];\n }\n if (has(config, LINE_BREAKS)) {\n tokenType.LINE_BREAKS = config[LINE_BREAKS];\n }\n if (has(config, START_CHARS_HINT)) {\n tokenType.START_CHARS_HINT = config[START_CHARS_HINT];\n }\n return tokenType;\n}\nexport var EOF = createToken({ name: \"EOF\", pattern: Lexer.NA });\naugmentTokenTypes([EOF]);\nexport function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) {\n return {\n image: image,\n startOffset: startOffset,\n endOffset: endOffset,\n startLine: startLine,\n endLine: endLine,\n startColumn: startColumn,\n endColumn: endColumn,\n tokenTypeIdx: tokType.tokenTypeIdx,\n tokenType: tokType\n };\n}\nexport function tokenMatcher(token, tokType) {\n return tokenStructuredMatcher(token, tokType);\n}\n//# sourceMappingURL=tokens_public.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { assign, forEach, isRegExp, map, pick } from \"../../../utils/utils\";\nimport { tokenLabel } from \"../../../scan/tokens_public\";\nvar AbstractProduction = /** @class */ (function () {\n function AbstractProduction(definition) {\n this.definition = definition;\n }\n AbstractProduction.prototype.accept = function (visitor) {\n visitor.visit(this);\n forEach(this.definition, function (prod) {\n prod.accept(visitor);\n });\n };\n return AbstractProduction;\n}());\nexport { AbstractProduction };\nvar NonTerminal = /** @class */ (function (_super) {\n __extends(NonTerminal, _super);\n function NonTerminal(options) {\n var _this = _super.call(this, []) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n Object.defineProperty(NonTerminal.prototype, \"definition\", {\n get: function () {\n if (this.referencedRule !== undefined) {\n return this.referencedRule.definition;\n }\n return [];\n },\n set: function (definition) {\n // immutable\n },\n enumerable: true,\n configurable: true\n });\n NonTerminal.prototype.accept = function (visitor) {\n visitor.visit(this);\n // don't visit children of a reference, we will get cyclic infinite loops if we do so\n };\n return NonTerminal;\n}(AbstractProduction));\nexport { NonTerminal };\nvar Rule = /** @class */ (function (_super) {\n __extends(Rule, _super);\n function Rule(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.orgText = \"\";\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Rule;\n}(AbstractProduction));\nexport { Rule };\n// TODO: is this only used in an Alternation?\n// Perhaps `Flat` should be renamed to `Alternative`?\nvar Flat = /** @class */ (function (_super) {\n __extends(Flat, _super);\n // A named Flat production is used to indicate a Nested Rule in an alternation\n function Flat(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.ignoreAmbiguities = false;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Flat;\n}(AbstractProduction));\nexport { Flat };\nvar Option = /** @class */ (function (_super) {\n __extends(Option, _super);\n function Option(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Option;\n}(AbstractProduction));\nexport { Option };\nvar RepetitionMandatory = /** @class */ (function (_super) {\n __extends(RepetitionMandatory, _super);\n function RepetitionMandatory(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return RepetitionMandatory;\n}(AbstractProduction));\nexport { RepetitionMandatory };\nvar RepetitionMandatoryWithSeparator = /** @class */ (function (_super) {\n __extends(RepetitionMandatoryWithSeparator, _super);\n function RepetitionMandatoryWithSeparator(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return RepetitionMandatoryWithSeparator;\n}(AbstractProduction));\nexport { RepetitionMandatoryWithSeparator };\nvar Repetition = /** @class */ (function (_super) {\n __extends(Repetition, _super);\n function Repetition(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Repetition;\n}(AbstractProduction));\nexport { Repetition };\nvar RepetitionWithSeparator = /** @class */ (function (_super) {\n __extends(RepetitionWithSeparator, _super);\n function RepetitionWithSeparator(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return RepetitionWithSeparator;\n}(AbstractProduction));\nexport { RepetitionWithSeparator };\nvar Alternation = /** @class */ (function (_super) {\n __extends(Alternation, _super);\n function Alternation(options) {\n var _this = _super.call(this, options.definition) || this;\n _this.idx = 1;\n _this.ignoreAmbiguities = false;\n _this.hasPredicates = false;\n assign(_this, pick(options, function (v) { return v !== undefined; }));\n return _this;\n }\n return Alternation;\n}(AbstractProduction));\nexport { Alternation };\nvar Terminal = /** @class */ (function () {\n function Terminal(options) {\n this.idx = 1;\n assign(this, pick(options, function (v) { return v !== undefined; }));\n }\n Terminal.prototype.accept = function (visitor) {\n visitor.visit(this);\n };\n return Terminal;\n}());\nexport { Terminal };\nexport function serializeGrammar(topRules) {\n return map(topRules, serializeProduction);\n}\nexport function serializeProduction(node) {\n function convertDefinition(definition) {\n return map(definition, serializeProduction);\n }\n /* istanbul ignore else */\n if (node instanceof NonTerminal) {\n return {\n type: \"NonTerminal\",\n name: node.nonTerminalName,\n idx: node.idx\n };\n }\n else if (node instanceof Flat) {\n return {\n type: \"Flat\",\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof Option) {\n return {\n type: \"Option\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof RepetitionMandatory) {\n return {\n type: \"RepetitionMandatory\",\n name: node.name,\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof RepetitionMandatoryWithSeparator) {\n return {\n type: \"RepetitionMandatoryWithSeparator\",\n name: node.name,\n idx: node.idx,\n separator: (serializeProduction(new Terminal({ terminalType: node.separator }))),\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof RepetitionWithSeparator) {\n return {\n type: \"RepetitionWithSeparator\",\n name: node.name,\n idx: node.idx,\n separator: (serializeProduction(new Terminal({ terminalType: node.separator }))),\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof Repetition) {\n return {\n type: \"Repetition\",\n name: node.name,\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof Alternation) {\n return {\n type: \"Alternation\",\n name: node.name,\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n }\n else if (node instanceof Terminal) {\n var serializedTerminal = {\n type: \"Terminal\",\n name: node.terminalType.name,\n label: tokenLabel(node.terminalType),\n idx: node.idx\n };\n var pattern = node.terminalType.PATTERN;\n if (node.terminalType.PATTERN) {\n serializedTerminal.pattern = isRegExp(pattern)\n ? pattern.source\n : pattern;\n }\n return serializedTerminal;\n }\n else if (node instanceof Rule) {\n return {\n type: \"Rule\",\n name: node.name,\n orgText: node.orgText,\n definition: convertDefinition(node.definition)\n };\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\n//# sourceMappingURL=gast_public.js.map","import { drop, forEach } from \"../../utils/utils\";\nimport { Alternation, Flat, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Terminal } from \"./gast/gast_public\";\n/**\n * A Grammar Walker that computes the \"remaining\" grammar \"after\" a productions in the grammar.\n */\nvar RestWalker = /** @class */ (function () {\n function RestWalker() {\n }\n RestWalker.prototype.walk = function (prod, prevRest) {\n var _this = this;\n if (prevRest === void 0) { prevRest = []; }\n forEach(prod.definition, function (subProd, index) {\n var currRest = drop(prod.definition, index + 1);\n /* istanbul ignore else */\n if (subProd instanceof NonTerminal) {\n _this.walkProdRef(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Terminal) {\n _this.walkTerminal(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Flat) {\n _this.walkFlat(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Option) {\n _this.walkOption(subProd, currRest, prevRest);\n }\n else if (subProd instanceof RepetitionMandatory) {\n _this.walkAtLeastOne(subProd, currRest, prevRest);\n }\n else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n _this.walkAtLeastOneSep(subProd, currRest, prevRest);\n }\n else if (subProd instanceof RepetitionWithSeparator) {\n _this.walkManySep(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Repetition) {\n _this.walkMany(subProd, currRest, prevRest);\n }\n else if (subProd instanceof Alternation) {\n _this.walkOr(subProd, currRest, prevRest);\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n });\n };\n RestWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) { };\n RestWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) { };\n RestWalker.prototype.walkFlat = function (flatProd, currRest, prevRest) {\n // ABCDEF => after the D the rest is EF\n var fullOrRest = currRest.concat(prevRest);\n this.walk(flatProd, fullOrRest);\n };\n RestWalker.prototype.walkOption = function (optionProd, currRest, prevRest) {\n // ABC(DE)?F => after the (DE)? the rest is F\n var fullOrRest = currRest.concat(prevRest);\n this.walk(optionProd, fullOrRest);\n };\n RestWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {\n // ABC(DE)+F => after the (DE)+ the rest is (DE)?F\n var fullAtLeastOneRest = [\n new Option({ definition: atLeastOneProd.definition })\n ].concat(currRest, prevRest);\n this.walk(atLeastOneProd, fullAtLeastOneRest);\n };\n RestWalker.prototype.walkAtLeastOneSep = function (atLeastOneSepProd, currRest, prevRest) {\n // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F\n var fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest);\n this.walk(atLeastOneSepProd, fullAtLeastOneSepRest);\n };\n RestWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {\n // ABC(DE)*F => after the (DE)* the rest is (DE)?F\n var fullManyRest = [\n new Option({ definition: manyProd.definition })\n ].concat(currRest, prevRest);\n this.walk(manyProd, fullManyRest);\n };\n RestWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {\n // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F\n var fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest);\n this.walk(manySepProd, fullManySepRest);\n };\n RestWalker.prototype.walkOr = function (orProd, currRest, prevRest) {\n var _this = this;\n // ABC(D|E|F)G => when finding the (D|E|F) the rest is G\n var fullOrRest = currRest.concat(prevRest);\n // walk all different alternatives\n forEach(orProd.definition, function (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 var prodWrapper = new Flat({ definition: [alt] });\n _this.walk(prodWrapper, fullOrRest);\n });\n };\n return RestWalker;\n}());\nexport { RestWalker };\nfunction restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {\n var repSepRest = [\n new Option({\n definition: [\n new Terminal({ terminalType: repSepProd.separator })\n ].concat(repSepProd.definition)\n })\n ];\n var fullRepSepRest = repSepRest.concat(currRest, prevRest);\n return fullRepSepRest;\n}\n//# sourceMappingURL=rest.js.map","import { Alternation, Flat, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"./gast_public\";\nvar GAstVisitor = /** @class */ (function () {\n function GAstVisitor() {\n }\n GAstVisitor.prototype.visit = function (node) {\n var nodeAny = node;\n switch (nodeAny.constructor) {\n case NonTerminal:\n return this.visitNonTerminal(nodeAny);\n case Flat:\n return this.visitFlat(nodeAny);\n case Option:\n return this.visitOption(nodeAny);\n case RepetitionMandatory:\n return this.visitRepetitionMandatory(nodeAny);\n case RepetitionMandatoryWithSeparator:\n return this.visitRepetitionMandatoryWithSeparator(nodeAny);\n case RepetitionWithSeparator:\n return this.visitRepetitionWithSeparator(nodeAny);\n case Repetition:\n return this.visitRepetition(nodeAny);\n case Alternation:\n return this.visitAlternation(nodeAny);\n case Terminal:\n return this.visitTerminal(nodeAny);\n case Rule:\n return this.visitRule(nodeAny);\n /* istanbul ignore next */\n default:\n throw Error(\"non exhaustive match\");\n }\n };\n GAstVisitor.prototype.visitNonTerminal = function (node) { };\n GAstVisitor.prototype.visitFlat = function (node) { };\n GAstVisitor.prototype.visitOption = function (node) { };\n GAstVisitor.prototype.visitRepetition = function (node) { };\n GAstVisitor.prototype.visitRepetitionMandatory = function (node) { };\n GAstVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (node) { };\n GAstVisitor.prototype.visitRepetitionWithSeparator = function (node) { };\n GAstVisitor.prototype.visitAlternation = function (node) { };\n GAstVisitor.prototype.visitTerminal = function (node) { };\n GAstVisitor.prototype.visitRule = function (node) { };\n return GAstVisitor;\n}());\nexport { GAstVisitor };\n//# sourceMappingURL=gast_visitor_public.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { contains, every, has, some } from \"../../../utils/utils\";\nimport { AbstractProduction, Alternation, Flat, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"./gast_public\";\nimport { GAstVisitor } from \"./gast_visitor_public\";\nexport function isSequenceProd(prod) {\n return (prod instanceof Flat ||\n prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionMandatory ||\n prod instanceof RepetitionMandatoryWithSeparator ||\n prod instanceof RepetitionWithSeparator ||\n prod instanceof Terminal ||\n prod instanceof Rule);\n}\nexport function isOptionalProd(prod, alreadyVisited) {\n if (alreadyVisited === void 0) { alreadyVisited = []; }\n var isDirectlyOptional = prod instanceof Option ||\n prod instanceof Repetition ||\n prod instanceof RepetitionWithSeparator;\n if (isDirectlyOptional) {\n return true;\n }\n // note that this can cause infinite loop if one optional empty TOP production has a cyclic dependency with another\n // empty optional top rule\n // may be indirectly optional ((A?B?C?) | (D?E?F?))\n if (prod instanceof Alternation) {\n // for OR its enough for just one of the alternatives to be optional\n return some(prod.definition, function (subProd) {\n return isOptionalProd(subProd, alreadyVisited);\n });\n }\n else if (prod instanceof NonTerminal && contains(alreadyVisited, prod)) {\n // avoiding stack overflow due to infinite recursion\n return false;\n }\n else if (prod instanceof AbstractProduction) {\n if (prod instanceof NonTerminal) {\n alreadyVisited.push(prod);\n }\n return every(prod.definition, function (subProd) {\n return isOptionalProd(subProd, alreadyVisited);\n });\n }\n else {\n return false;\n }\n}\nexport function isBranchingProd(prod) {\n return prod instanceof Alternation;\n}\nexport function getProductionDslName(prod) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return \"SUBRULE\";\n }\n else if (prod instanceof Option) {\n return \"OPTION\";\n }\n else if (prod instanceof Alternation) {\n return \"OR\";\n }\n else if (prod instanceof RepetitionMandatory) {\n return \"AT_LEAST_ONE\";\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return \"AT_LEAST_ONE_SEP\";\n }\n else if (prod instanceof RepetitionWithSeparator) {\n return \"MANY_SEP\";\n }\n else if (prod instanceof Repetition) {\n return \"MANY\";\n }\n else if (prod instanceof Terminal) {\n return \"CONSUME\";\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nvar DslMethodsCollectorVisitor = /** @class */ (function (_super) {\n __extends(DslMethodsCollectorVisitor, _super);\n function DslMethodsCollectorVisitor() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n // A minus is never valid in an identifier name\n _this.separator = \"-\";\n _this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n };\n return _this;\n }\n DslMethodsCollectorVisitor.prototype.reset = function () {\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n };\n };\n DslMethodsCollectorVisitor.prototype.visitTerminal = function (terminal) {\n var key = terminal.terminalType.name + this.separator + \"Terminal\";\n if (!has(this.dslMethods, key)) {\n this.dslMethods[key] = [];\n }\n this.dslMethods[key].push(terminal);\n };\n DslMethodsCollectorVisitor.prototype.visitNonTerminal = function (subrule) {\n var key = subrule.nonTerminalName + this.separator + \"Terminal\";\n if (!has(this.dslMethods, key)) {\n this.dslMethods[key] = [];\n }\n this.dslMethods[key].push(subrule);\n };\n DslMethodsCollectorVisitor.prototype.visitOption = function (option) {\n this.dslMethods.option.push(option);\n };\n DslMethodsCollectorVisitor.prototype.visitRepetitionWithSeparator = function (manySep) {\n this.dslMethods.repetitionWithSeparator.push(manySep);\n };\n DslMethodsCollectorVisitor.prototype.visitRepetitionMandatory = function (atLeastOne) {\n this.dslMethods.repetitionMandatory.push(atLeastOne);\n };\n DslMethodsCollectorVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {\n this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep);\n };\n DslMethodsCollectorVisitor.prototype.visitRepetition = function (many) {\n this.dslMethods.repetition.push(many);\n };\n DslMethodsCollectorVisitor.prototype.visitAlternation = function (or) {\n this.dslMethods.alternation.push(or);\n };\n return DslMethodsCollectorVisitor;\n}(GAstVisitor));\nexport { DslMethodsCollectorVisitor };\nvar collectorVisitor = new DslMethodsCollectorVisitor();\nexport function collectMethods(rule) {\n collectorVisitor.reset();\n rule.accept(collectorVisitor);\n var dslMethods = collectorVisitor.dslMethods;\n // avoid uncleaned references\n collectorVisitor.reset();\n return dslMethods;\n}\n//# sourceMappingURL=gast.js.map","import { uniq, map, flatten } from \"../../utils/utils\";\nimport { NonTerminal, Terminal } from \"./gast/gast_public\";\nimport { isBranchingProd, isOptionalProd, isSequenceProd } from \"./gast/gast\";\nexport function first(prod) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n // this could in theory cause infinite loops if\n // (1) prod A refs prod B.\n // (2) prod B refs prod A\n // (3) AB can match the empty set\n // in other words a cycle where everything is optional so the first will keep\n // looking ahead for the next optional part and will never exit\n // currently there is no safeguard for this unique edge case because\n // (1) not sure a grammar in which this can happen is useful for anything (productive)\n return first(prod.referencedRule);\n }\n else if (prod instanceof Terminal) {\n return firstForTerminal(prod);\n }\n else if (isSequenceProd(prod)) {\n return firstForSequence(prod);\n }\n else if (isBranchingProd(prod)) {\n return firstForBranching(prod);\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nexport function firstForSequence(prod) {\n var firstSet = [];\n var seq = prod.definition;\n var nextSubProdIdx = 0;\n var hasInnerProdsRemaining = seq.length > nextSubProdIdx;\n var currSubProd;\n // so we enter the loop at least once (if the definition is not empty\n var isLastInnerProdOptional = true;\n // scan a sequence until it's end or until we have found a NONE optional production in it\n while (hasInnerProdsRemaining && isLastInnerProdOptional) {\n currSubProd = seq[nextSubProdIdx];\n isLastInnerProdOptional = isOptionalProd(currSubProd);\n firstSet = firstSet.concat(first(currSubProd));\n nextSubProdIdx = nextSubProdIdx + 1;\n hasInnerProdsRemaining = seq.length > nextSubProdIdx;\n }\n return uniq(firstSet);\n}\nexport function firstForBranching(prod) {\n var allAlternativesFirsts = map(prod.definition, function (innerProd) {\n return first(innerProd);\n });\n return uniq(flatten(allAlternativesFirsts));\n}\nexport function firstForTerminal(terminal) {\n return [terminal.terminalType];\n}\n//# sourceMappingURL=first.js.map","// TODO: can this be removed? where is it used?\nexport var IN = \"_~IN~_\";\n//# sourceMappingURL=constants.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { RestWalker } from \"./rest\";\nimport { first } from \"./first\";\nimport { assign, forEach } from \"../../utils/utils\";\nimport { IN } from \"../constants\";\nimport { Flat } from \"./gast/gast_public\";\n// This ResyncFollowsWalker computes all of the follows required for RESYNC\n// (skipping reference production).\nvar ResyncFollowsWalker = /** @class */ (function (_super) {\n __extends(ResyncFollowsWalker, _super);\n function ResyncFollowsWalker(topProd) {\n var _this = _super.call(this) || this;\n _this.topProd = topProd;\n _this.follows = {};\n return _this;\n }\n ResyncFollowsWalker.prototype.startWalking = function () {\n this.walk(this.topProd);\n return this.follows;\n };\n ResyncFollowsWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) {\n // do nothing! just like in the public sector after 13:00\n };\n ResyncFollowsWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) {\n var followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) +\n this.topProd.name;\n var fullRest = currRest.concat(prevRest);\n var restProd = new Flat({ definition: fullRest });\n var t_in_topProd_follows = first(restProd);\n this.follows[followName] = t_in_topProd_follows;\n };\n return ResyncFollowsWalker;\n}(RestWalker));\nexport { ResyncFollowsWalker };\nexport function computeAllProdsFollows(topProductions) {\n var reSyncFollows = {};\n forEach(topProductions, function (topProd) {\n var currRefsFollow = new ResyncFollowsWalker(topProd).startWalking();\n assign(reSyncFollows, currRefsFollow);\n });\n return reSyncFollows;\n}\nexport function buildBetweenProdsFollowPrefix(inner, occurenceInParent) {\n return inner.name + occurenceInParent + IN;\n}\nexport function buildInProdFollowPrefix(terminal) {\n var terminalName = terminal.terminalType.name;\n return terminalName + terminal.idx + IN;\n}\n//# sourceMappingURL=follow.js.map","// Lookahead keys are 32Bit integers in the form\n// TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX\n// XXXX -> Occurrence Index bitmap.\n// YYYY -> DSL Method Type bitmap.\n// ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.\n// TTTTTTTTT -> alternation alternative index bitmap\nexport var BITS_FOR_METHOD_TYPE = 4;\nexport var BITS_FOR_OCCURRENCE_IDX = 8;\nexport var BITS_FOR_RULE_IDX = 12;\n// TODO: validation, this means that there may at most 2^8 --> 256 alternatives for an alternation.\nexport var BITS_FOR_ALT_IDX = 8;\n// short string used as part of mapping keys.\n// being short improves the performance when composing KEYS for maps out of these\n// The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)\n/* tslint:disable */\nexport var OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX;\nexport var OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX;\nexport var MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX;\nexport var AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX;\nexport var MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX;\nexport var AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX;\n/* tslint:enable */\n// this actually returns a number, but it is always used as a string (object prop key)\nexport function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {\n /* tslint:disable */\n return occurrence | dslMethodIdx | ruleIdx;\n /* tslint:enable */\n}\nvar BITS_START_FOR_ALT_IDX = 32 - BITS_FOR_ALT_IDX;\nexport function getKeyForAltIndex(ruleIdx, dslMethodIdx, occurrence, altIdx) {\n /* tslint:disable */\n // alternative indices are zero based, thus must always add one (turn on one bit) to guarantee uniqueness.\n var altIdxBitMap = (altIdx + 1) << BITS_START_FOR_ALT_IDX;\n return (getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) |\n altIdxBitMap);\n /* tslint:enable */\n}\n//# sourceMappingURL=keys.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { forEach, isUndefined } from \"../../utils/utils\";\nimport { AT_LEAST_ONE_IDX, AT_LEAST_ONE_SEP_IDX, getKeyForAltIndex, getKeyForAutomaticLookahead, MANY_IDX, MANY_SEP_IDX, OPTION_IDX, OR_IDX } from \"../grammar/keys\";\nimport { Alternation, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator } from \"../grammar/gast/gast_public\";\nimport { GAstVisitor } from \"../grammar/gast/gast_visitor_public\";\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(currNodeLocation, newLocationInfo) {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (both start/end offsets exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset;\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n }\n // Once the startOffset has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n }\n}\n/**\n * This nodeLocation tracking is not efficient and should only be used\n * when error recovery is enabled or the Token Vector contains virtual Tokens\n * (e.g, Python Indent/Outdent)\n * As it executes the calculation for every single terminal/nonTerminal\n * and does not rely on the fact the token vector is **sorted**\n */\nexport function setNodeLocationFull(currNodeLocation, newLocationInfo) {\n // First (valid) update for this cst node\n if (isNaN(currNodeLocation.startOffset) === true) {\n // assumption1: Token location information is either NaN or a valid number\n // assumption2: Token location information is fully valid if it exist\n // (all start/end props exist and are numbers).\n currNodeLocation.startOffset = newLocationInfo.startOffset;\n currNodeLocation.startColumn = newLocationInfo.startColumn;\n currNodeLocation.startLine = newLocationInfo.startLine;\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n currNodeLocation.endColumn = newLocationInfo.endColumn;\n currNodeLocation.endLine = newLocationInfo.endLine;\n }\n // Once the start props has been updated with a valid number it should never receive\n // any farther updates as the Token vector is sorted.\n // We still have to check this this condition for every new possible location info\n // because with error recovery enabled we may encounter invalid tokens (NaN location props)\n else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n currNodeLocation.endColumn = newLocationInfo.endColumn;\n currNodeLocation.endLine = newLocationInfo.endLine;\n }\n}\nexport function addTerminalToCst(node, token, tokenTypeName) {\n if (node.children[tokenTypeName] === undefined) {\n node.children[tokenTypeName] = [token];\n }\n else {\n node.children[tokenTypeName].push(token);\n }\n}\nexport function addNoneTerminalToCst(node, ruleName, ruleResult) {\n if (node.children[ruleName] === undefined) {\n node.children[ruleName] = [ruleResult];\n }\n else {\n node.children[ruleName].push(ruleResult);\n }\n}\nvar NamedDSLMethodsCollectorVisitor = /** @class */ (function (_super) {\n __extends(NamedDSLMethodsCollectorVisitor, _super);\n function NamedDSLMethodsCollectorVisitor(ruleIdx) {\n var _this = _super.call(this) || this;\n _this.result = [];\n _this.ruleIdx = ruleIdx;\n return _this;\n }\n NamedDSLMethodsCollectorVisitor.prototype.collectNamedDSLMethod = function (node, newNodeConstructor, methodIdx) {\n // TODO: better hack to copy what we need here...\n if (!isUndefined(node.name)) {\n // copy without name so this will indeed be processed later.\n var nameLessNode \n /* istanbul ignore else */\n = void 0;\n /* istanbul ignore else */\n if (node instanceof Option ||\n node instanceof Repetition ||\n node instanceof RepetitionMandatory ||\n node instanceof Alternation) {\n nameLessNode = new newNodeConstructor({\n definition: node.definition,\n idx: node.idx\n });\n }\n else if (node instanceof RepetitionMandatoryWithSeparator ||\n node instanceof RepetitionWithSeparator) {\n nameLessNode = new newNodeConstructor({\n definition: node.definition,\n idx: node.idx,\n separator: node.separator\n });\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n var def = [nameLessNode];\n var key = getKeyForAutomaticLookahead(this.ruleIdx, methodIdx, node.idx);\n this.result.push({ def: def, key: key, name: node.name, orgProd: node });\n }\n };\n NamedDSLMethodsCollectorVisitor.prototype.visitOption = function (node) {\n this.collectNamedDSLMethod(node, Option, OPTION_IDX);\n };\n NamedDSLMethodsCollectorVisitor.prototype.visitRepetition = function (node) {\n this.collectNamedDSLMethod(node, Repetition, MANY_IDX);\n };\n NamedDSLMethodsCollectorVisitor.prototype.visitRepetitionMandatory = function (node) {\n this.collectNamedDSLMethod(node, RepetitionMandatory, AT_LEAST_ONE_IDX);\n };\n NamedDSLMethodsCollectorVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (node) {\n this.collectNamedDSLMethod(node, RepetitionMandatoryWithSeparator, AT_LEAST_ONE_SEP_IDX);\n };\n NamedDSLMethodsCollectorVisitor.prototype.visitRepetitionWithSeparator = function (node) {\n this.collectNamedDSLMethod(node, RepetitionWithSeparator, MANY_SEP_IDX);\n };\n NamedDSLMethodsCollectorVisitor.prototype.visitAlternation = function (node) {\n var _this = this;\n this.collectNamedDSLMethod(node, Alternation, OR_IDX);\n var hasMoreThanOneAlternative = node.definition.length > 1;\n forEach(node.definition, function (currFlatAlt, altIdx) {\n if (!isUndefined(currFlatAlt.name)) {\n var def = currFlatAlt.definition;\n if (hasMoreThanOneAlternative) {\n def = [new Option({ definition: currFlatAlt.definition })];\n }\n else {\n // mandatory\n def = currFlatAlt.definition;\n }\n var key = getKeyForAltIndex(_this.ruleIdx, OR_IDX, node.idx, altIdx);\n _this.result.push({\n def: def,\n key: key,\n name: currFlatAlt.name,\n orgProd: currFlatAlt\n });\n }\n });\n };\n return NamedDSLMethodsCollectorVisitor;\n}(GAstVisitor));\nexport { NamedDSLMethodsCollectorVisitor };\nexport function expandAllNestedRuleNames(topRules, fullToShortName) {\n var result = {\n allRuleNames: []\n };\n forEach(topRules, function (currTopRule) {\n var currTopRuleShortName = fullToShortName[currTopRule.name];\n result.allRuleNames.push(currTopRule.name);\n var namedCollectorVisitor = new NamedDSLMethodsCollectorVisitor(currTopRuleShortName);\n currTopRule.accept(namedCollectorVisitor);\n forEach(namedCollectorVisitor.result, function (_a) {\n var def = _a.def, key = _a.key, name = _a.name;\n result.allRuleNames.push(currTopRule.name + name);\n });\n });\n return result;\n}\n//# sourceMappingURL=cst.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { RestWalker } from \"./rest\";\nimport { cloneArr, drop, dropRight, first as _first, forEach, isEmpty, last } from \"../../utils/utils\";\nimport { first } from \"./first\";\nimport { Alternation, Flat, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"./gast/gast_public\";\nvar AbstractNextPossibleTokensWalker = /** @class */ (function (_super) {\n __extends(AbstractNextPossibleTokensWalker, _super);\n function AbstractNextPossibleTokensWalker(topProd, path) {\n var _this = _super.call(this) || this;\n _this.topProd = topProd;\n _this.path = path;\n _this.possibleTokTypes = [];\n _this.nextProductionName = \"\";\n _this.nextProductionOccurrence = 0;\n _this.found = false;\n _this.isAtEndOfPath = false;\n return _this;\n }\n AbstractNextPossibleTokensWalker.prototype.startWalking = function () {\n this.found = false;\n if (this.path.ruleStack[0] !== this.topProd.name) {\n throw Error(\"The path does not start with the walker's top Rule!\");\n }\n // immutable for the win\n this.ruleStack = cloneArr(this.path.ruleStack).reverse(); // intelij bug requires assertion\n this.occurrenceStack = cloneArr(this.path.occurrenceStack).reverse(); // intelij bug requires assertion\n // already verified that the first production is valid, we now seek the 2nd production\n this.ruleStack.pop();\n this.occurrenceStack.pop();\n this.updateExpectedNext();\n this.walk(this.topProd);\n return this.possibleTokTypes;\n };\n AbstractNextPossibleTokensWalker.prototype.walk = function (prod, prevRest) {\n if (prevRest === void 0) { prevRest = []; }\n // stop scanning once we found the path\n if (!this.found) {\n _super.prototype.walk.call(this, prod, prevRest);\n }\n };\n AbstractNextPossibleTokensWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) {\n // found the next production, need to keep walking in it\n if (refProd.referencedRule.name === this.nextProductionName &&\n refProd.idx === this.nextProductionOccurrence) {\n var fullRest = currRest.concat(prevRest);\n this.updateExpectedNext();\n this.walk(refProd.referencedRule, fullRest);\n }\n };\n AbstractNextPossibleTokensWalker.prototype.updateExpectedNext = function () {\n // need to consume the Terminal\n if (isEmpty(this.ruleStack)) {\n // must reset nextProductionXXX to avoid walking down another Top Level production while what we are\n // really seeking is the last Terminal...\n this.nextProductionName = \"\";\n this.nextProductionOccurrence = 0;\n this.isAtEndOfPath = true;\n }\n else {\n this.nextProductionName = this.ruleStack.pop();\n this.nextProductionOccurrence = this.occurrenceStack.pop();\n }\n };\n return AbstractNextPossibleTokensWalker;\n}(RestWalker));\nexport { AbstractNextPossibleTokensWalker };\nvar NextAfterTokenWalker = /** @class */ (function (_super) {\n __extends(NextAfterTokenWalker, _super);\n function NextAfterTokenWalker(topProd, path) {\n var _this = _super.call(this, topProd, path) || this;\n _this.path = path;\n _this.nextTerminalName = \"\";\n _this.nextTerminalOccurrence = 0;\n _this.nextTerminalName = _this.path.lastTok.name;\n _this.nextTerminalOccurrence = _this.path.lastTokOccurrence;\n return _this;\n }\n NextAfterTokenWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) {\n if (this.isAtEndOfPath &&\n terminal.terminalType.name === this.nextTerminalName &&\n terminal.idx === this.nextTerminalOccurrence &&\n !this.found) {\n var fullRest = currRest.concat(prevRest);\n var restProd = new Flat({ definition: fullRest });\n this.possibleTokTypes = first(restProd);\n this.found = true;\n }\n };\n return NextAfterTokenWalker;\n}(AbstractNextPossibleTokensWalker));\nexport { NextAfterTokenWalker };\n/**\n * This walker only \"walks\" a single \"TOP\" level in the Grammar Ast, this means\n * it never \"follows\" production refs\n */\nvar AbstractNextTerminalAfterProductionWalker = /** @class */ (function (_super) {\n __extends(AbstractNextTerminalAfterProductionWalker, _super);\n function AbstractNextTerminalAfterProductionWalker(topRule, occurrence) {\n var _this = _super.call(this) || this;\n _this.topRule = topRule;\n _this.occurrence = occurrence;\n _this.result = {\n token: undefined,\n occurrence: undefined,\n isEndOfRule: undefined\n };\n return _this;\n }\n AbstractNextTerminalAfterProductionWalker.prototype.startWalking = function () {\n this.walk(this.topRule);\n return this.result;\n };\n return AbstractNextTerminalAfterProductionWalker;\n}(RestWalker));\nexport { AbstractNextTerminalAfterProductionWalker };\nvar NextTerminalAfterManyWalker = /** @class */ (function (_super) {\n __extends(NextTerminalAfterManyWalker, _super);\n function NextTerminalAfterManyWalker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NextTerminalAfterManyWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {\n if (manyProd.idx === this.occurrence) {\n var firstAfterMany = _first(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterMany === undefined;\n if (firstAfterMany instanceof Terminal) {\n this.result.token = firstAfterMany.terminalType;\n this.result.occurrence = firstAfterMany.idx;\n }\n }\n else {\n _super.prototype.walkMany.call(this, manyProd, currRest, prevRest);\n }\n };\n return NextTerminalAfterManyWalker;\n}(AbstractNextTerminalAfterProductionWalker));\nexport { NextTerminalAfterManyWalker };\nvar NextTerminalAfterManySepWalker = /** @class */ (function (_super) {\n __extends(NextTerminalAfterManySepWalker, _super);\n function NextTerminalAfterManySepWalker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NextTerminalAfterManySepWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {\n if (manySepProd.idx === this.occurrence) {\n var firstAfterManySep = _first(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterManySep === undefined;\n if (firstAfterManySep instanceof Terminal) {\n this.result.token = firstAfterManySep.terminalType;\n this.result.occurrence = firstAfterManySep.idx;\n }\n }\n else {\n _super.prototype.walkManySep.call(this, manySepProd, currRest, prevRest);\n }\n };\n return NextTerminalAfterManySepWalker;\n}(AbstractNextTerminalAfterProductionWalker));\nexport { NextTerminalAfterManySepWalker };\nvar NextTerminalAfterAtLeastOneWalker = /** @class */ (function (_super) {\n __extends(NextTerminalAfterAtLeastOneWalker, _super);\n function NextTerminalAfterAtLeastOneWalker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NextTerminalAfterAtLeastOneWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {\n if (atLeastOneProd.idx === this.occurrence) {\n var firstAfterAtLeastOne = _first(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterAtLeastOne === undefined;\n if (firstAfterAtLeastOne instanceof Terminal) {\n this.result.token = firstAfterAtLeastOne.terminalType;\n this.result.occurrence = firstAfterAtLeastOne.idx;\n }\n }\n else {\n _super.prototype.walkAtLeastOne.call(this, atLeastOneProd, currRest, prevRest);\n }\n };\n return NextTerminalAfterAtLeastOneWalker;\n}(AbstractNextTerminalAfterProductionWalker));\nexport { NextTerminalAfterAtLeastOneWalker };\n// TODO: reduce code duplication in the AfterWalkers\nvar NextTerminalAfterAtLeastOneSepWalker = /** @class */ (function (_super) {\n __extends(NextTerminalAfterAtLeastOneSepWalker, _super);\n function NextTerminalAfterAtLeastOneSepWalker() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n NextTerminalAfterAtLeastOneSepWalker.prototype.walkAtLeastOneSep = function (atleastOneSepProd, currRest, prevRest) {\n if (atleastOneSepProd.idx === this.occurrence) {\n var firstAfterfirstAfterAtLeastOneSep = _first(currRest.concat(prevRest));\n this.result.isEndOfRule =\n firstAfterfirstAfterAtLeastOneSep === undefined;\n if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {\n this.result.token =\n firstAfterfirstAfterAtLeastOneSep.terminalType;\n this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx;\n }\n }\n else {\n _super.prototype.walkAtLeastOneSep.call(this, atleastOneSepProd, currRest, prevRest);\n }\n };\n return NextTerminalAfterAtLeastOneSepWalker;\n}(AbstractNextTerminalAfterProductionWalker));\nexport { NextTerminalAfterAtLeastOneSepWalker };\nexport function possiblePathsFrom(targetDef, maxLength, currPath) {\n if (currPath === void 0) { currPath = []; }\n // avoid side effects\n currPath = cloneArr(currPath);\n var result = [];\n var i = 0;\n // TODO: avoid inner funcs\n function remainingPathWith(nextDef) {\n return nextDef.concat(drop(targetDef, i + 1));\n }\n // TODO: avoid inner funcs\n function getAlternativesForProd(definition) {\n var alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath);\n return result.concat(alternatives);\n }\n /**\n * Mandatory productions will halt the loop as the paths computed from their recursive calls will already contain the\n * following (rest) of the targetDef.\n *\n * For optional productions (Option/Repetition/...) the loop will continue to represent the paths that do not include the\n * the optional production.\n */\n while (currPath.length < maxLength && i < targetDef.length) {\n var prod = targetDef[i];\n /* istanbul ignore else */\n if (prod instanceof Flat) {\n return getAlternativesForProd(prod.definition);\n }\n else if (prod instanceof NonTerminal) {\n return getAlternativesForProd(prod.definition);\n }\n else if (prod instanceof Option) {\n result = getAlternativesForProd(prod.definition);\n }\n else if (prod instanceof RepetitionMandatory) {\n var newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ]);\n return getAlternativesForProd(newDef);\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n var newDef = [\n new Flat({ definition: prod.definition }),\n new Repetition({\n definition: [\n new Terminal({ terminalType: prod.separator })\n ].concat(prod.definition)\n })\n ];\n return getAlternativesForProd(newDef);\n }\n else if (prod instanceof RepetitionWithSeparator) {\n var newDef = prod.definition.concat([\n new Repetition({\n definition: [\n new Terminal({ terminalType: prod.separator })\n ].concat(prod.definition)\n })\n ]);\n result = getAlternativesForProd(newDef);\n }\n else if (prod instanceof Repetition) {\n var newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ]);\n result = getAlternativesForProd(newDef);\n }\n else if (prod instanceof Alternation) {\n forEach(prod.definition, function (currAlt) {\n result = getAlternativesForProd(currAlt.definition);\n });\n return result;\n }\n else if (prod instanceof Terminal) {\n currPath.push(prod.terminalType);\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n i++;\n }\n result.push({\n partialPath: currPath,\n suffixDef: drop(targetDef, i)\n });\n return result;\n}\nexport function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) {\n var EXIT_NON_TERMINAL = \"EXIT_NONE_TERMINAL\";\n // to avoid creating a new Array each time.\n var EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL];\n var EXIT_ALTERNATIVE = \"EXIT_ALTERNATIVE\";\n var foundCompletePath = false;\n var tokenVectorLength = tokenVector.length;\n var minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1;\n var result = [];\n var possiblePaths = [];\n possiblePaths.push({\n idx: -1,\n def: initialDef,\n ruleStack: [],\n occurrenceStack: []\n });\n while (!isEmpty(possiblePaths)) {\n var currPath = possiblePaths.pop();\n // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)\n if (currPath === EXIT_ALTERNATIVE) {\n if (foundCompletePath &&\n last(possiblePaths).idx <= minimalAlternativesIndex) {\n // remove irrelevant alternative\n possiblePaths.pop();\n }\n continue;\n }\n var currDef = currPath.def;\n var currIdx = currPath.idx;\n var currRuleStack = currPath.ruleStack;\n var currOccurrenceStack = currPath.occurrenceStack;\n // For Example: an empty path could exist in a valid grammar in the case of an EMPTY_ALT\n if (isEmpty(currDef)) {\n continue;\n }\n var prod = currDef[0];\n /* istanbul ignore else */\n if (prod === EXIT_NON_TERMINAL) {\n var nextPath = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: dropRight(currRuleStack),\n occurrenceStack: dropRight(currOccurrenceStack)\n };\n possiblePaths.push(nextPath);\n }\n else if (prod instanceof Terminal) {\n /* istanbul ignore else */\n if (currIdx < tokenVectorLength - 1) {\n var nextIdx = currIdx + 1;\n var actualToken = tokenVector[nextIdx];\n if (tokMatcher(actualToken, prod.terminalType)) {\n var nextPath = {\n idx: nextIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n // end of the line\n }\n else if (currIdx === tokenVectorLength - 1) {\n // IGNORE ABOVE ELSE\n result.push({\n nextTokenType: prod.terminalType,\n nextTokenOccurrence: prod.idx,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n });\n foundCompletePath = true;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n }\n else if (prod instanceof NonTerminal) {\n var newRuleStack = cloneArr(currRuleStack);\n newRuleStack.push(prod.nonTerminalName);\n var newOccurrenceStack = cloneArr(currOccurrenceStack);\n newOccurrenceStack.push(prod.idx);\n var nextPath = {\n idx: currIdx,\n def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)),\n ruleStack: newRuleStack,\n occurrenceStack: newOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n else if (prod instanceof Option) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n var 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 var nextPathWith = {\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n }\n else if (prod instanceof RepetitionMandatory) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n var secondIteration = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n });\n var nextDef = prod.definition.concat([secondIteration], drop(currDef));\n var nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n // TODO:(THE NEW operators here take a while...) (convert once?)\n var separatorGast = new Terminal({\n terminalType: prod.separator\n });\n var secondIteration = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx\n });\n var nextDef = prod.definition.concat([secondIteration], drop(currDef));\n var nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n else if (prod instanceof RepetitionWithSeparator) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n var 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 var separatorGast = new Terminal({\n terminalType: prod.separator\n });\n var nthRepetition = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx\n });\n var nextDef = prod.definition.concat([nthRepetition], drop(currDef));\n var nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n }\n else if (prod instanceof Repetition) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n var nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWithout);\n // required marker to avoid backtracking paths whose higher priority alternatives already matched\n possiblePaths.push(EXIT_ALTERNATIVE);\n // TODO: an empty repetition will cause infinite loops here, will the parser detect this in selfAnalysis?\n var nthRepetition = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n });\n var nextDef = prod.definition.concat([nthRepetition], drop(currDef));\n var nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n }\n else if (prod instanceof Alternation) {\n // the order of alternatives is meaningful, FILO (Last path will be traversed first).\n for (var i = prod.definition.length - 1; i >= 0; i--) {\n var currAlt = prod.definition[i];\n var currAltPath = {\n idx: currIdx,\n def: currAlt.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(currAltPath);\n possiblePaths.push(EXIT_ALTERNATIVE);\n }\n }\n else if (prod instanceof Flat) {\n possiblePaths.push({\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n });\n }\n else if (prod instanceof Rule) {\n // last because we should only encounter at most a single one of these per invocation.\n possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack));\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n }\n return result;\n}\nfunction expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) {\n var newRuleStack = cloneArr(currRuleStack);\n newRuleStack.push(topRule.name);\n var newCurrOccurrenceStack = cloneArr(currOccurrenceStack);\n // top rule is always assumed to have been called with occurrence index 1\n newCurrOccurrenceStack.push(1);\n return {\n idx: currIdx,\n def: topRule.definition,\n ruleStack: newRuleStack,\n occurrenceStack: newCurrOccurrenceStack\n };\n}\n//# sourceMappingURL=interpreter.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { map, reduce, every, isEmpty, flatten, forEach, has } from \"../../utils/utils\";\nimport { possiblePathsFrom } from \"./interpreter\";\nimport { RestWalker } from \"./rest\";\nimport { tokenStructuredMatcher, tokenStructuredMatcherNoCategories } from \"../../scan/tokens\";\nimport { Alternation, Flat, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator } from \"./gast/gast_public\";\nimport { GAstVisitor } from \"./gast/gast_visitor_public\";\nexport var PROD_TYPE;\n(function (PROD_TYPE) {\n PROD_TYPE[PROD_TYPE[\"OPTION\"] = 0] = \"OPTION\";\n PROD_TYPE[PROD_TYPE[\"REPETITION\"] = 1] = \"REPETITION\";\n PROD_TYPE[PROD_TYPE[\"REPETITION_MANDATORY\"] = 2] = \"REPETITION_MANDATORY\";\n PROD_TYPE[PROD_TYPE[\"REPETITION_MANDATORY_WITH_SEPARATOR\"] = 3] = \"REPETITION_MANDATORY_WITH_SEPARATOR\";\n PROD_TYPE[PROD_TYPE[\"REPETITION_WITH_SEPARATOR\"] = 4] = \"REPETITION_WITH_SEPARATOR\";\n PROD_TYPE[PROD_TYPE[\"ALTERNATION\"] = 5] = \"ALTERNATION\";\n})(PROD_TYPE || (PROD_TYPE = {}));\nexport function getProdType(prod) {\n /* istanbul ignore else */\n if (prod instanceof Option) {\n return PROD_TYPE.OPTION;\n }\n else if (prod instanceof Repetition) {\n return PROD_TYPE.REPETITION;\n }\n else if (prod instanceof RepetitionMandatory) {\n return PROD_TYPE.REPETITION_MANDATORY;\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR;\n }\n else if (prod instanceof RepetitionWithSeparator) {\n return PROD_TYPE.REPETITION_WITH_SEPARATOR;\n }\n else if (prod instanceof Alternation) {\n return PROD_TYPE.ALTERNATION;\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nexport function buildLookaheadFuncForOr(occurrence, ruleGrammar, maxLookahead, hasPredicates, dynamicTokensEnabled, laFuncBuilder) {\n var lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead);\n var tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher;\n return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher, dynamicTokensEnabled);\n}\n/**\n * When dealing with an Optional production (OPTION/MANY/2nd iteration of AT_LEAST_ONE/...) we need to compare\n * the lookahead \"inside\" the production and the lookahead immediately \"after\" it in the same top level rule (context free).\n *\n * Example: given a production:\n * ABC(DE)?DF\n *\n * The optional '(DE)?' should only be entered if we see 'DE'. a single Token 'D' is not sufficient to distinguish between the two\n * alternatives.\n *\n * @returns A Lookahead function which will return true IFF the parser should parse the Optional production.\n */\nexport function buildLookaheadFuncForOptionalProd(occurrence, ruleGrammar, k, dynamicTokensEnabled, prodType, lookaheadBuilder) {\n var lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k);\n var tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher;\n return lookaheadBuilder(lookAheadPaths[0], tokenMatcher, dynamicTokensEnabled);\n}\nexport function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher, dynamicTokensEnabled) {\n var numOfAlts = alts.length;\n var areAllOneTokenLookahead = every(alts, function (currAlt) {\n return every(currAlt, function (currPath) {\n return currPath.length === 1;\n });\n });\n // This version takes into account the predicates as well.\n if (hasPredicates) {\n /**\n * @returns {number} - The chosen alternative index\n */\n return function (orAlts) {\n // unfortunately the predicates must be extracted every single time\n // as they cannot be cached due to references to parameters(vars) which are no longer valid.\n // note that in the common case of no predicates, no cpu time will be wasted on this (see else block)\n var predicates = map(orAlts, function (currAlt) { return currAlt.GATE; });\n for (var t = 0; t < numOfAlts; t++) {\n var currAlt = alts[t];\n var currNumOfPaths = currAlt.length;\n var currPredicate = predicates[t];\n if (currPredicate !== undefined &&\n 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 (var j = 0; j < currNumOfPaths; j++) {\n var currPath = currAlt[j];\n var currPathLength = currPath.length;\n for (var i = 0; i < currPathLength; i++) {\n var nextToken = this.LA(i + 1);\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath;\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t;\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined;\n };\n }\n else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead. These Optimizations cannot work if dynamically defined Tokens are used.\n var singleTokenAlts = map(alts, function (currAlt) {\n return flatten(currAlt);\n });\n var choiceToAlt_1 = reduce(singleTokenAlts, function (result, currAlt, idx) {\n forEach(currAlt, function (currTokType) {\n if (!has(result, currTokType.tokenTypeIdx)) {\n result[currTokType.tokenTypeIdx] = idx;\n }\n forEach(currTokType.categoryMatches, function (currExtendingType) {\n if (!has(result, currExtendingType)) {\n result[currExtendingType] = idx;\n }\n });\n });\n return result;\n }, []);\n /**\n * @returns {number} - The chosen alternative index\n */\n return function () {\n var nextToken = this.LA(1);\n return choiceToAlt_1[nextToken.tokenTypeIdx];\n };\n }\n else {\n // optimized lookahead without needing to check the predicates at all.\n // this causes code duplication which is intentional to improve performance.\n /**\n * @returns {number} - The chosen alternative index\n */\n return function () {\n for (var t = 0; t < numOfAlts; t++) {\n var currAlt = alts[t];\n var currNumOfPaths = currAlt.length;\n nextPath: for (var j = 0; j < currNumOfPaths; j++) {\n var currPath = currAlt[j];\n var currPathLength = currPath.length;\n for (var i = 0; i < currPathLength; i++) {\n var nextToken = this.LA(i + 1);\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath;\n }\n }\n // found a full path that matches.\n // this will also work for an empty ALT as the loop will be skipped\n return t;\n }\n // none of the paths for the current alternative matched\n // try the next alternative\n }\n // none of the alternatives could be matched\n return undefined;\n };\n }\n}\nexport function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher, dynamicTokensEnabled) {\n var areAllOneTokenLookahead = every(alt, function (currPath) {\n return currPath.length === 1;\n });\n var numOfPaths = alt.length;\n // optimized (common) case of all the lookaheads paths requiring only\n // a single token lookahead.\n if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n var singleTokensTypes = flatten(alt);\n if (singleTokensTypes.length === 1 &&\n isEmpty(singleTokensTypes[0].categoryMatches)) {\n var expectedTokenType = singleTokensTypes[0];\n var expectedTokenUniqueKey_1 = expectedTokenType.tokenTypeIdx;\n return function () {\n return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey_1;\n };\n }\n else {\n var choiceToAlt_2 = reduce(singleTokensTypes, function (result, currTokType, idx) {\n result[currTokType.tokenTypeIdx] = true;\n forEach(currTokType.categoryMatches, function (currExtendingType) {\n result[currExtendingType] = true;\n });\n return result;\n }, []);\n return function () {\n var nextToken = this.LA(1);\n return choiceToAlt_2[nextToken.tokenTypeIdx] === true;\n };\n }\n }\n else {\n return function () {\n nextPath: for (var j = 0; j < numOfPaths; j++) {\n var currPath = alt[j];\n var currPathLength = currPath.length;\n for (var i = 0; i < currPathLength; i++) {\n var nextToken = this.LA(i + 1);\n if (tokenMatcher(nextToken, currPath[i]) === false) {\n // mismatch in current path\n // try the next pth\n continue nextPath;\n }\n }\n // found a full path that matches.\n return true;\n }\n // none of the paths matched\n return false;\n };\n }\n}\nvar RestDefinitionFinderWalker = /** @class */ (function (_super) {\n __extends(RestDefinitionFinderWalker, _super);\n function RestDefinitionFinderWalker(topProd, targetOccurrence, targetProdType) {\n var _this = _super.call(this) || this;\n _this.topProd = topProd;\n _this.targetOccurrence = targetOccurrence;\n _this.targetProdType = targetProdType;\n return _this;\n }\n RestDefinitionFinderWalker.prototype.startWalking = function () {\n this.walk(this.topProd);\n return this.restDef;\n };\n RestDefinitionFinderWalker.prototype.checkIsTarget = function (node, expectedProdType, currRest, prevRest) {\n if (node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdType) {\n this.restDef = currRest.concat(prevRest);\n return true;\n }\n // performance optimization, do not iterate over the entire Grammar ast after we have found the target\n return false;\n };\n RestDefinitionFinderWalker.prototype.walkOption = function (optionProd, currRest, prevRest) {\n if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, optionProd, currRest, prevRest);\n }\n };\n RestDefinitionFinderWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, atLeastOneProd, currRest, prevRest);\n }\n };\n RestDefinitionFinderWalker.prototype.walkAtLeastOneSep = function (atLeastOneSepProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, atLeastOneSepProd, currRest, prevRest);\n }\n };\n RestDefinitionFinderWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {\n if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, manyProd, currRest, prevRest);\n }\n };\n RestDefinitionFinderWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {\n if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) {\n _super.prototype.walkOption.call(this, manySepProd, currRest, prevRest);\n }\n };\n return RestDefinitionFinderWalker;\n}(RestWalker));\n/**\n * Returns the definition of a target production in a top level level rule.\n */\nvar InsideDefinitionFinderVisitor = /** @class */ (function (_super) {\n __extends(InsideDefinitionFinderVisitor, _super);\n function InsideDefinitionFinderVisitor(targetOccurrence, targetProdType, targetRef) {\n var _this = _super.call(this) || this;\n _this.targetOccurrence = targetOccurrence;\n _this.targetProdType = targetProdType;\n _this.targetRef = targetRef;\n _this.result = [];\n return _this;\n }\n InsideDefinitionFinderVisitor.prototype.checkIsTarget = function (node, expectedProdName) {\n if (node.idx === this.targetOccurrence &&\n this.targetProdType === expectedProdName &&\n (this.targetRef === undefined || node === this.targetRef)) {\n this.result = node.definition;\n }\n };\n InsideDefinitionFinderVisitor.prototype.visitOption = function (node) {\n this.checkIsTarget(node, PROD_TYPE.OPTION);\n };\n InsideDefinitionFinderVisitor.prototype.visitRepetition = function (node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION);\n };\n InsideDefinitionFinderVisitor.prototype.visitRepetitionMandatory = function (node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY);\n };\n InsideDefinitionFinderVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR);\n };\n InsideDefinitionFinderVisitor.prototype.visitRepetitionWithSeparator = function (node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR);\n };\n InsideDefinitionFinderVisitor.prototype.visitAlternation = function (node) {\n this.checkIsTarget(node, PROD_TYPE.ALTERNATION);\n };\n return InsideDefinitionFinderVisitor;\n}(GAstVisitor));\nfunction initializeArrayOfArrays(size) {\n var result = new Array(size);\n for (var i = 0; i < size; i++) {\n result[i] = [];\n }\n return result;\n}\n/**\n * A sort of hash function between a Path in the grammar and a string.\n * Note that this returns multiple \"hashes\" to support the scenario of token categories.\n * - A single path with categories may match multiple **actual** paths.\n */\nfunction pathToHashKeys(path) {\n var keys = [\"\"];\n for (var i = 0; i < path.length; i++) {\n var tokType = path[i];\n var longerKeys = [];\n for (var j = 0; j < keys.length; j++) {\n var currShorterKey = keys[j];\n longerKeys.push(currShorterKey + \"_\" + tokType.tokenTypeIdx);\n for (var t = 0; t < tokType.categoryMatches.length; t++) {\n var categoriesKeySuffix = \"_\" + tokType.categoryMatches[t];\n longerKeys.push(currShorterKey + categoriesKeySuffix);\n }\n }\n keys = longerKeys;\n }\n return keys;\n}\n/**\n * Imperative style due to being called from a hot spot\n */\nfunction isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) {\n for (var currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) {\n // We only want to test vs the other alternatives\n if (currAltIdx === idx) {\n continue;\n }\n var otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx];\n for (var searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {\n var searchKey = searchPathKeys[searchIdx];\n if (otherAltKnownPathsKeys[searchKey] === true) {\n return false;\n }\n }\n }\n // None of the SearchPathKeys were found in any of the other alternatives\n return true;\n}\nexport function lookAheadSequenceFromAlternatives(altsDefs, k) {\n var partialAlts = map(altsDefs, function (currAlt) { return possiblePathsFrom([currAlt], 1); });\n var finalResult = initializeArrayOfArrays(partialAlts.length);\n var altsHashes = map(partialAlts, function (currAltPaths) {\n var dict = {};\n forEach(currAltPaths, function (item) {\n var keys = pathToHashKeys(item.partialPath);\n forEach(keys, function (currKey) {\n dict[currKey] = true;\n });\n });\n return dict;\n });\n var newData = partialAlts;\n // maxLookahead loop\n for (var pathLength = 1; pathLength <= k; pathLength++) {\n var currDataset = newData;\n newData = initializeArrayOfArrays(currDataset.length);\n var _loop_1 = function (altIdx) {\n var currAltPathsAndSuffixes = currDataset[altIdx];\n // paths in current alternative loop\n for (var currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) {\n var currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath;\n var suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef;\n var prefixKeys = pathToHashKeys(currPathPrefix);\n var isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx);\n // End of the line for this path.\n if (isUnique ||\n isEmpty(suffixDef) ||\n currPathPrefix.length === k) {\n var 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 (var j = 0; j < prefixKeys.length; j++) {\n var currKey = prefixKeys[j];\n altsHashes[altIdx][currKey] = true;\n }\n }\n }\n // Expand longer paths\n else {\n var newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix);\n newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes);\n // Update keys for new known paths\n forEach(newPartialPathsAndSuffixes, function (item) {\n var prefixKeys = pathToHashKeys(item.partialPath);\n forEach(prefixKeys, function (key) {\n altsHashes[altIdx][key] = true;\n });\n });\n }\n }\n };\n // alternatives loop\n for (var altIdx = 0; altIdx < currDataset.length; altIdx++) {\n _loop_1(altIdx);\n }\n }\n return finalResult;\n}\nexport function getLookaheadPathsForOr(occurrence, ruleGrammar, k, orProd) {\n var visitor = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd);\n ruleGrammar.accept(visitor);\n return lookAheadSequenceFromAlternatives(visitor.result, k);\n}\nexport function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k) {\n var insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType);\n ruleGrammar.accept(insideDefVisitor);\n var insideDef = insideDefVisitor.result;\n var afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType);\n var afterDef = afterDefWalker.startWalking();\n var insideFlat = new Flat({ definition: insideDef });\n var afterFlat = new Flat({ definition: afterDef });\n return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k);\n}\nexport function containsPath(alternative, searchPath) {\n compareOtherPath: for (var i = 0; i < alternative.length; i++) {\n var otherPath = alternative[i];\n if (otherPath.length !== searchPath.length) {\n continue;\n }\n for (var j = 0; j < otherPath.length; j++) {\n var searchTok = searchPath[j];\n var otherTok = otherPath[j];\n var matchingTokens = searchTok === otherTok ||\n otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !==\n undefined;\n if (matchingTokens === false) {\n continue compareOtherPath;\n }\n }\n return true;\n }\n return false;\n}\nexport function isStrictPrefixOfPath(prefix, other) {\n return (prefix.length < other.length &&\n every(prefix, function (tokType, idx) {\n var otherTokType = other[idx];\n return (tokType === otherTokType ||\n otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]);\n }));\n}\nexport function areTokenCategoriesNotUsed(lookAheadPaths) {\n return every(lookAheadPaths, function (singleAltPaths) {\n return every(singleAltPaths, function (singlePath) {\n return every(singlePath, function (token) { return isEmpty(token.categoryMatches); });\n });\n });\n}\n//# sourceMappingURL=lookahead.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as utils from \"../../utils/utils\";\nimport { contains, every, findAll, flatten, forEach, groupBy, isEmpty, map, pick, reduce, reject, values } from \"../../utils/utils\";\nimport { ParserDefinitionErrorType } from \"../parser/parser\";\nimport { getProductionDslName, isOptionalProd } from \"./gast/gast\";\nimport { containsPath, getLookaheadPathsForOptionalProd, getLookaheadPathsForOr, getProdType, isStrictPrefixOfPath } from \"./lookahead\";\nimport { NamedDSLMethodsCollectorVisitor } from \"../cst/cst\";\nimport { nextPossibleTokensAfter } from \"./interpreter\";\nimport { Alternation, Flat, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Terminal } from \"./gast/gast_public\";\nimport { GAstVisitor } from \"./gast/gast_visitor_public\";\nexport function validateGrammar(topLevels, globalMaxLookahead, tokenTypes, ignoredIssues, errMsgProvider, grammarName) {\n var duplicateErrors = utils.map(topLevels, function (currTopLevel) {\n return validateDuplicateProductions(currTopLevel, errMsgProvider);\n });\n var leftRecursionErrors = utils.map(topLevels, function (currTopRule) {\n return validateNoLeftRecursion(currTopRule, currTopRule, errMsgProvider);\n });\n var emptyAltErrors = [];\n var ambiguousAltsErrors = [];\n var emptyRepetitionErrors = [];\n // left recursion could cause infinite loops in the following validations.\n // It is safest to first have the user fix the left recursion errors first and only then examine Further issues.\n if (every(leftRecursionErrors, isEmpty)) {\n emptyAltErrors = map(topLevels, function (currTopRule) {\n return validateEmptyOrAlternative(currTopRule, errMsgProvider);\n });\n ambiguousAltsErrors = map(topLevels, function (currTopRule) {\n return validateAmbiguousAlternationAlternatives(currTopRule, globalMaxLookahead, ignoredIssues, errMsgProvider);\n });\n emptyRepetitionErrors = validateSomeNonEmptyLookaheadPath(topLevels, globalMaxLookahead, errMsgProvider);\n }\n var termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider);\n var tokenNameErrors = utils.map(tokenTypes, function (currTokType) {\n return validateTokenName(currTokType, errMsgProvider);\n });\n var nestedRulesNameErrors = validateNestedRulesNames(topLevels, errMsgProvider);\n var nestedRulesDuplicateErrors = validateDuplicateNestedRules(topLevels, errMsgProvider);\n var tooManyAltsErrors = map(topLevels, function (curRule) {\n return validateTooManyAlts(curRule, errMsgProvider);\n });\n var ruleNameErrors = map(topLevels, function (curRule) {\n return validateRuleName(curRule, errMsgProvider);\n });\n var duplicateRulesError = map(topLevels, function (curRule) {\n return validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider);\n });\n return (utils.flatten(duplicateErrors.concat(tokenNameErrors, nestedRulesNameErrors, nestedRulesDuplicateErrors, emptyRepetitionErrors, leftRecursionErrors, emptyAltErrors, ambiguousAltsErrors, termsNamespaceConflictErrors, tooManyAltsErrors, ruleNameErrors, duplicateRulesError)));\n}\nfunction validateNestedRulesNames(topLevels, errMsgProvider) {\n var result = [];\n forEach(topLevels, function (curTopLevel) {\n var namedCollectorVisitor = new NamedDSLMethodsCollectorVisitor(\"\");\n curTopLevel.accept(namedCollectorVisitor);\n var nestedProds = map(namedCollectorVisitor.result, function (currItem) { return currItem.orgProd; });\n result.push(map(nestedProds, function (currNestedProd) {\n return validateNestedRuleName(curTopLevel, currNestedProd, errMsgProvider);\n }));\n });\n return flatten(result);\n}\nfunction validateDuplicateProductions(topLevelRule, errMsgProvider) {\n var collectorVisitor = new OccurrenceValidationCollector();\n topLevelRule.accept(collectorVisitor);\n var allRuleProductions = collectorVisitor.allProductions;\n var productionGroups = utils.groupBy(allRuleProductions, identifyProductionForDuplicates);\n var duplicates = utils.pick(productionGroups, function (currGroup) {\n return currGroup.length > 1;\n });\n var errors = utils.map(utils.values(duplicates), function (currDuplicates) {\n var firstProd = utils.first(currDuplicates);\n var msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates);\n var dslName = getProductionDslName(firstProd);\n var defError = {\n message: msg,\n type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n ruleName: topLevelRule.name,\n dslName: dslName,\n occurrence: firstProd.idx\n };\n var param = getExtraProductionArgument(firstProd);\n if (param) {\n defError.parameter = param;\n }\n return defError;\n });\n return errors;\n}\nexport function identifyProductionForDuplicates(prod) {\n return getProductionDslName(prod) + \"_#_\" + prod.idx + \"_#_\" + getExtraProductionArgument(prod);\n}\nfunction getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name;\n }\n else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName;\n }\n else {\n return \"\";\n }\n}\nvar OccurrenceValidationCollector = /** @class */ (function (_super) {\n __extends(OccurrenceValidationCollector, _super);\n function OccurrenceValidationCollector() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.allProductions = [];\n return _this;\n }\n OccurrenceValidationCollector.prototype.visitNonTerminal = function (subrule) {\n this.allProductions.push(subrule);\n };\n OccurrenceValidationCollector.prototype.visitOption = function (option) {\n this.allProductions.push(option);\n };\n OccurrenceValidationCollector.prototype.visitRepetitionWithSeparator = function (manySep) {\n this.allProductions.push(manySep);\n };\n OccurrenceValidationCollector.prototype.visitRepetitionMandatory = function (atLeastOne) {\n this.allProductions.push(atLeastOne);\n };\n OccurrenceValidationCollector.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {\n this.allProductions.push(atLeastOneSep);\n };\n OccurrenceValidationCollector.prototype.visitRepetition = function (many) {\n this.allProductions.push(many);\n };\n OccurrenceValidationCollector.prototype.visitAlternation = function (or) {\n this.allProductions.push(or);\n };\n OccurrenceValidationCollector.prototype.visitTerminal = function (terminal) {\n this.allProductions.push(terminal);\n };\n return OccurrenceValidationCollector;\n}(GAstVisitor));\nexport { OccurrenceValidationCollector };\nexport var validTermsPattern = /^[a-zA-Z_]\\w*$/;\nexport var validNestedRuleName = new RegExp(validTermsPattern.source.replace(\"^\", \"^\\\\$\"));\n// TODO: remove this limitation now that we use recorders\nexport function validateRuleName(rule, errMsgProvider) {\n var errors = [];\n var ruleName = rule.name;\n if (!ruleName.match(validTermsPattern)) {\n errors.push({\n message: errMsgProvider.buildInvalidRuleNameError({\n topLevelRule: rule,\n expectedPattern: validTermsPattern\n }),\n type: ParserDefinitionErrorType.INVALID_RULE_NAME,\n ruleName: ruleName\n });\n }\n return errors;\n}\n// TODO: did the nested rule name regExp now change?\nexport function validateNestedRuleName(topLevel, nestedProd, errMsgProvider) {\n var errors = [];\n var errMsg;\n if (!nestedProd.name.match(validNestedRuleName)) {\n errMsg = errMsgProvider.buildInvalidNestedRuleNameError(topLevel, nestedProd);\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.INVALID_NESTED_RULE_NAME,\n ruleName: topLevel.name\n });\n }\n return errors;\n}\n// TODO: remove this limitation now that we use recorders\nexport function validateTokenName(tokenType, errMsgProvider) {\n var errors = [];\n var tokTypeName = tokenType.name;\n if (!tokTypeName.match(validTermsPattern)) {\n errors.push({\n message: errMsgProvider.buildTokenNameError({\n tokenType: tokenType,\n expectedPattern: validTermsPattern\n }),\n type: ParserDefinitionErrorType.INVALID_TOKEN_NAME\n });\n }\n return errors;\n}\nexport function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) {\n var errors = [];\n var occurrences = reduce(allRules, function (result, curRule) {\n if (curRule.name === rule.name) {\n return result + 1;\n }\n return result;\n }, 0);\n if (occurrences > 1) {\n var errMsg = errMsgProvider.buildDuplicateRuleNameError({\n topLevelRule: rule,\n grammarName: className\n });\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: rule.name\n });\n }\n return errors;\n}\n// TODO: is there anyway to get only the rule names of rules inherited from the super grammars?\n// This is not part of the IGrammarErrorProvider because the validation cannot be performed on\n// The grammar structure, only at runtime.\nexport function validateRuleIsOverridden(ruleName, definedRulesNames, className) {\n var errors = [];\n var errMsg;\n if (!utils.contains(definedRulesNames, ruleName)) {\n errMsg =\n \"Invalid rule override, rule: ->\" + ruleName + \"<- cannot be overridden in the grammar: ->\" + className + \"<-\" +\n \"as it is not defined in any of the super grammars \";\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,\n ruleName: ruleName\n });\n }\n return errors;\n}\nexport function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path) {\n if (path === void 0) { path = []; }\n var errors = [];\n var nextNonTerminals = getFirstNoneTerminal(currRule.definition);\n if (utils.isEmpty(nextNonTerminals)) {\n return [];\n }\n else {\n var ruleName = topRule.name;\n var foundLeftRecursion = utils.contains(nextNonTerminals, topRule);\n if (foundLeftRecursion) {\n errors.push({\n message: errMsgProvider.buildLeftRecursionError({\n topLevelRule: topRule,\n leftRecursionPath: path\n }),\n type: ParserDefinitionErrorType.LEFT_RECURSION,\n ruleName: ruleName\n });\n }\n // we are only looking for cyclic paths leading back to the specific topRule\n // other cyclic paths are ignored, we still need this difference to avoid infinite loops...\n var validNextSteps = utils.difference(nextNonTerminals, path.concat([topRule]));\n var errorsFromNextSteps = utils.map(validNextSteps, function (currRefRule) {\n var newPath = utils.cloneArr(path);\n newPath.push(currRefRule);\n return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath);\n });\n return errors.concat(utils.flatten(errorsFromNextSteps));\n }\n}\nexport function getFirstNoneTerminal(definition) {\n var result = [];\n if (utils.isEmpty(definition)) {\n return result;\n }\n var firstProd = utils.first(definition);\n /* istanbul ignore else */\n if (firstProd instanceof NonTerminal) {\n result.push(firstProd.referencedRule);\n }\n else if (firstProd instanceof Flat ||\n firstProd instanceof Option ||\n firstProd instanceof RepetitionMandatory ||\n firstProd instanceof RepetitionMandatoryWithSeparator ||\n firstProd instanceof RepetitionWithSeparator ||\n firstProd instanceof Repetition) {\n result = result.concat(getFirstNoneTerminal(firstProd.definition));\n }\n else if (firstProd instanceof Alternation) {\n // each sub definition in alternation is a FLAT\n result = utils.flatten(utils.map(firstProd.definition, function (currSubDef) {\n return getFirstNoneTerminal(currSubDef.definition);\n }));\n }\n else if (firstProd instanceof Terminal) {\n // nothing to see, move along\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n var isFirstOptional = isOptionalProd(firstProd);\n var hasMore = definition.length > 1;\n if (isFirstOptional && hasMore) {\n var rest = utils.drop(definition);\n return result.concat(getFirstNoneTerminal(rest));\n }\n else {\n return result;\n }\n}\nvar OrCollector = /** @class */ (function (_super) {\n __extends(OrCollector, _super);\n function OrCollector() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.alternations = [];\n return _this;\n }\n OrCollector.prototype.visitAlternation = function (node) {\n this.alternations.push(node);\n };\n return OrCollector;\n}(GAstVisitor));\nexport function validateEmptyOrAlternative(topLevelRule, errMsgProvider) {\n var orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n var ors = orCollector.alternations;\n var errors = utils.reduce(ors, function (errors, currOr) {\n var exceptLast = utils.dropRight(currOr.definition);\n var currErrors = utils.map(exceptLast, function (currAlternative, currAltIdx) {\n var possibleFirstInAlt = nextPossibleTokensAfter([currAlternative], [], null, 1);\n if (utils.isEmpty(possibleFirstInAlt)) {\n return {\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 null;\n }\n });\n return errors.concat(utils.compact(currErrors));\n }, []);\n return errors;\n}\nexport function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, ignoredIssues, errMsgProvider) {\n var orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n var ors = orCollector.alternations;\n // TODO: this filtering should be deprecated once we remove the ignoredIssues\n // IParserConfig property\n var ignoredIssuesForCurrentRule = ignoredIssues[topLevelRule.name];\n if (ignoredIssuesForCurrentRule) {\n ors = reject(ors, function (currOr) {\n return ignoredIssuesForCurrentRule[getProductionDslName(currOr) +\n (currOr.idx === 0 ? \"\" : currOr.idx)];\n });\n }\n // New Handling of ignoring ambiguities\n // - https://github.com/SAP/chevrotain/issues/869\n ors = reject(ors, function (currOr) { return currOr.ignoreAmbiguities === true; });\n var errors = utils.reduce(ors, function (result, currOr) {\n var currOccurrence = currOr.idx;\n var actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead;\n var alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, actualMaxLookahead, currOr);\n var altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);\n var altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);\n return result.concat(altsAmbiguityErrors, altsPrefixAmbiguityErrors);\n }, []);\n return errors;\n}\nvar RepetionCollector = /** @class */ (function (_super) {\n __extends(RepetionCollector, _super);\n function RepetionCollector() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.allProductions = [];\n return _this;\n }\n RepetionCollector.prototype.visitRepetitionWithSeparator = function (manySep) {\n this.allProductions.push(manySep);\n };\n RepetionCollector.prototype.visitRepetitionMandatory = function (atLeastOne) {\n this.allProductions.push(atLeastOne);\n };\n RepetionCollector.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {\n this.allProductions.push(atLeastOneSep);\n };\n RepetionCollector.prototype.visitRepetition = function (many) {\n this.allProductions.push(many);\n };\n return RepetionCollector;\n}(GAstVisitor));\nexport { RepetionCollector };\nexport function validateTooManyAlts(topLevelRule, errMsgProvider) {\n var orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n var ors = orCollector.alternations;\n var errors = utils.reduce(ors, function (errors, currOr) {\n if (currOr.definition.length > 255) {\n errors.push({\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 return errors;\n }, []);\n return errors;\n}\nexport function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) {\n var errors = [];\n forEach(topLevelRules, function (currTopRule) {\n var collectorVisitor = new RepetionCollector();\n currTopRule.accept(collectorVisitor);\n var allRuleProductions = collectorVisitor.allProductions;\n forEach(allRuleProductions, function (currProd) {\n var prodType = getProdType(currProd);\n var actualMaxLookahead = currProd.maxLookahead || maxLookahead;\n var currOccurrence = currProd.idx;\n var paths = getLookaheadPathsForOptionalProd(currOccurrence, currTopRule, prodType, actualMaxLookahead);\n var pathsInsideProduction = paths[0];\n if (isEmpty(flatten(pathsInsideProduction))) {\n var errMsg = errMsgProvider.buildEmptyRepetitionError({\n topLevelRule: currTopRule,\n repetition: currProd\n });\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,\n ruleName: currTopRule.name\n });\n }\n });\n });\n return errors;\n}\nfunction checkAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n var foundAmbiguousPaths = [];\n var identicalAmbiguities = reduce(alternatives, function (result, currAlt, currAltIdx) {\n // ignore (skip) ambiguities with this alternative\n if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n return result;\n }\n forEach(currAlt, function (currPath) {\n var altsCurrPathAppearsIn = [currAltIdx];\n forEach(alternatives, function (currOtherAlt, currOtherAltIdx) {\n if (currAltIdx !== currOtherAltIdx &&\n containsPath(currOtherAlt, currPath) &&\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[currOtherAltIdx]\n .ignoreAmbiguities !== true) {\n altsCurrPathAppearsIn.push(currOtherAltIdx);\n }\n });\n if (altsCurrPathAppearsIn.length > 1 &&\n !containsPath(foundAmbiguousPaths, currPath)) {\n foundAmbiguousPaths.push(currPath);\n result.push({\n alts: altsCurrPathAppearsIn,\n path: currPath\n });\n }\n });\n return result;\n }, []);\n var currErrors = utils.map(identicalAmbiguities, function (currAmbDescriptor) {\n var ambgIndices = map(currAmbDescriptor.alts, function (currAltIdx) { return currAltIdx + 1; });\n var currMessage = errMsgProvider.buildAlternationAmbiguityError({\n topLevelRule: rule,\n alternation: alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbDescriptor.path\n });\n return {\n message: currMessage,\n type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,\n ruleName: rule.name,\n occurrence: alternation.idx,\n alternatives: [currAmbDescriptor.alts]\n };\n });\n return currErrors;\n}\nexport function checkPrefixAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n var errors = [];\n // flatten\n var pathsAndIndices = reduce(alternatives, function (result, currAlt, idx) {\n var currPathsAndIdx = map(currAlt, function (currPath) {\n return { idx: idx, path: currPath };\n });\n return result.concat(currPathsAndIdx);\n }, []);\n forEach(pathsAndIndices, function (currPathAndIdx) {\n var alternativeGast = alternation.definition[currPathAndIdx.idx];\n // ignore (skip) ambiguities with this alternative\n if (alternativeGast.ignoreAmbiguities === true) {\n return;\n }\n var targetIdx = currPathAndIdx.idx;\n var targetPath = currPathAndIdx.path;\n var prefixAmbiguitiesPathsAndIndices = findAll(pathsAndIndices, function (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]\n .ignoreAmbiguities !== 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 var currPathPrefixErrors = map(prefixAmbiguitiesPathsAndIndices, function (currAmbPathAndIdx) {\n var ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1];\n var occurrence = alternation.idx === 0 ? \"\" : alternation.idx;\n var 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 errors = errors.concat(currPathPrefixErrors);\n });\n return errors;\n}\nfunction checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) {\n var errors = [];\n var tokenNames = map(tokenTypes, function (currToken) { return currToken.name; });\n forEach(topLevels, function (currRule) {\n var currRuleName = currRule.name;\n if (contains(tokenNames, currRuleName)) {\n var errMsg = errMsgProvider.buildNamespaceConflictError(currRule);\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n ruleName: currRuleName\n });\n }\n });\n return errors;\n}\nfunction validateDuplicateNestedRules(topLevelRules, errMsgProvider) {\n var errors = [];\n forEach(topLevelRules, function (currTopRule) {\n var namedCollectorVisitor = new NamedDSLMethodsCollectorVisitor(\"\");\n currTopRule.accept(namedCollectorVisitor);\n var prodsByGroup = groupBy(namedCollectorVisitor.result, function (item) { return item.name; });\n var duplicates = pick(prodsByGroup, function (currGroup) {\n return currGroup.length > 1;\n });\n forEach(values(duplicates), function (currDupGroup) {\n var currDupProds = map(currDupGroup, function (dupGroup) { return dupGroup.orgProd; });\n var errMsg = errMsgProvider.buildDuplicateNestedRuleNameError(currTopRule, currDupProds);\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_NESTED_NAME,\n ruleName: currTopRule.name\n });\n });\n });\n return errors;\n}\n//# sourceMappingURL=checks.js.map","import { hasTokenLabel, tokenLabel } from \"../scan/tokens_public\";\nimport * as utils from \"../utils/utils\";\nimport { first, map, reduce } from \"../utils/utils\";\nimport { NonTerminal, Rule, Terminal } from \"./grammar/gast/gast_public\";\nimport { getProductionDslName } from \"./grammar/gast/gast\";\nimport { validNestedRuleName } from \"./grammar/checks\";\nexport var defaultParserErrorProvider = {\n buildMismatchTokenMessage: function (_a) {\n var expected = _a.expected, actual = _a.actual, previous = _a.previous, ruleName = _a.ruleName;\n var hasLabel = hasTokenLabel(expected);\n var expectedMsg = hasLabel\n ? \"--> \" + tokenLabel(expected) + \" <--\"\n : \"token of type --> \" + expected.name + \" <--\";\n var msg = \"Expecting \" + expectedMsg + \" but found --> '\" + actual.image + \"' <--\";\n return msg;\n },\n buildNotAllInputParsedMessage: function (_a) {\n var firstRedundant = _a.firstRedundant, ruleName = _a.ruleName;\n return (\"Redundant input, expecting EOF but found: \" + firstRedundant.image);\n },\n buildNoViableAltMessage: function (_a) {\n var expectedPathsPerAlt = _a.expectedPathsPerAlt, actual = _a.actual, previous = _a.previous, customUserDescription = _a.customUserDescription, ruleName = _a.ruleName;\n var errPrefix = \"Expecting: \";\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n var actualText = first(actual).image;\n var errSuffix = \"\\nbut found: '\" + actualText + \"'\";\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix;\n }\n else {\n var allLookAheadPaths = reduce(expectedPathsPerAlt, function (result, currAltPaths) { return result.concat(currAltPaths); }, []);\n var nextValidTokenSequences = map(allLookAheadPaths, function (currPath) {\n return \"[\" + map(currPath, function (currTokenType) {\n return tokenLabel(currTokenType);\n }).join(\", \") + \"]\";\n });\n var nextValidSequenceItems = map(nextValidTokenSequences, function (itemMsg, idx) { return \" \" + (idx + 1) + \". \" + itemMsg; });\n var calculatedDescription = \"one of these possible Token sequences:\\n\" + nextValidSequenceItems.join(\"\\n\");\n return errPrefix + calculatedDescription + errSuffix;\n }\n },\n buildEarlyExitMessage: function (_a) {\n var expectedIterationPaths = _a.expectedIterationPaths, actual = _a.actual, customUserDescription = _a.customUserDescription, ruleName = _a.ruleName;\n var errPrefix = \"Expecting: \";\n // TODO: issue: No Viable Alternative Error may have incomplete details. #502\n var actualText = first(actual).image;\n var errSuffix = \"\\nbut found: '\" + actualText + \"'\";\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix;\n }\n else {\n var nextValidTokenSequences = map(expectedIterationPaths, function (currPath) {\n return \"[\" + map(currPath, function (currTokenType) {\n return tokenLabel(currTokenType);\n }).join(\",\") + \"]\";\n });\n var calculatedDescription = \"expecting at least one iteration which starts with one of these possible Token sequences::\\n \" +\n (\"<\" + nextValidTokenSequences.join(\" ,\") + \">\");\n return errPrefix + calculatedDescription + errSuffix;\n }\n }\n};\nObject.freeze(defaultParserErrorProvider);\nexport var defaultGrammarResolverErrorProvider = {\n buildRuleNotFoundError: function (topLevelRule, undefinedRule) {\n var msg = \"Invalid grammar, reference to a rule which is not defined: ->\" +\n undefinedRule.nonTerminalName +\n \"<-\\n\" +\n \"inside top level rule: ->\" +\n topLevelRule.name +\n \"<-\";\n return msg;\n }\n};\nexport var defaultGrammarValidatorErrorProvider = {\n buildDuplicateFoundError: function (topLevelRule, duplicateProds) {\n function getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name;\n }\n else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName;\n }\n else {\n return \"\";\n }\n }\n var topLevelName = topLevelRule.name;\n var duplicateProd = first(duplicateProds);\n var index = duplicateProd.idx;\n var dslName = getProductionDslName(duplicateProd);\n var extraArgument = getExtraProductionArgument(duplicateProd);\n var hasExplicitIndex = index > 0;\n var msg = \"->\" + dslName + (hasExplicitIndex ? index : \"\") + \"<- \" + (extraArgument ? \"with argument: ->\" + extraArgument + \"<-\" : \"\") + \"\\n appears more than once (\" + duplicateProds.length + \" times) in the top level rule: ->\" + topLevelName + \"<-. \\n For further details see: https://sap.github.io/chevrotain/docs/FAQ.html#NUMERICAL_SUFFIXES \\n \";\n // white space trimming time! better to trim afterwards as it allows to use WELL formatted multi line template strings...\n msg = msg.replace(/[ \\t]+/g, \" \");\n msg = msg.replace(/\\s\\s+/g, \"\\n\");\n return msg;\n },\n buildInvalidNestedRuleNameError: function (topLevelRule, nestedProd) {\n var msg = \"Invalid nested rule name: ->\" + nestedProd.name + \"<- inside rule: ->\" + topLevelRule.name + \"<-\\n\" +\n (\"it must match the pattern: ->\" + validNestedRuleName.toString() + \"<-.\\n\") +\n \"Note that this means a nested rule name must start with the '$'(dollar) sign.\";\n return msg;\n },\n buildDuplicateNestedRuleNameError: function (topLevelRule, nestedProd) {\n var duplicateName = first(nestedProd).name;\n var errMsg = \"Duplicate nested rule name: ->\" + duplicateName + \"<- inside rule: ->\" + topLevelRule.name + \"<-\\n\" +\n \"A nested name must be unique in the scope of a top level grammar rule.\";\n return errMsg;\n },\n buildNamespaceConflictError: function (rule) {\n var errMsg = \"Namespace conflict found in grammar.\\n\" +\n (\"The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <\" + rule.name + \">.\\n\") +\n \"To resolve this make sure each Terminal and Non-Terminal names are unique\\n\" +\n \"This is easy to accomplish by using the convention that Terminal names start with an uppercase letter\\n\" +\n \"and Non-Terminal names start with a lower case letter.\";\n return errMsg;\n },\n buildAlternationPrefixAmbiguityError: function (options) {\n var pathMsg = map(options.prefixPath, function (currTok) {\n return tokenLabel(currTok);\n }).join(\", \");\n var occurrence = options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n var errMsg = \"Ambiguous alternatives: <\" + options.ambiguityIndices.join(\" ,\") + \"> due to common lookahead prefix\\n\" +\n (\"in <OR\" + occurrence + \"> inside <\" + options.topLevelRule.name + \"> Rule,\\n\") +\n (\"<\" + pathMsg + \"> may appears as a prefix path in all these alternatives.\\n\") +\n \"See: https://sap.github.io/chevrotain/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\\n\" +\n \"For Further details.\";\n return errMsg;\n },\n buildAlternationAmbiguityError: function (options) {\n var pathMsg = map(options.prefixPath, function (currtok) {\n return tokenLabel(currtok);\n }).join(\", \");\n var occurrence = options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n var currMessage = \"Ambiguous Alternatives Detected: <\" + options.ambiguityIndices.join(\" ,\") + \"> in <OR\" + occurrence + \">\" +\n (\" inside <\" + options.topLevelRule.name + \"> Rule,\\n\") +\n (\"<\" + pathMsg + \"> may appears as a prefix path in all these alternatives.\\n\");\n currMessage =\n currMessage +\n \"See: https://sap.github.io/chevrotain/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\\n\" +\n \"For Further details.\";\n return currMessage;\n },\n buildEmptyRepetitionError: function (options) {\n var dslName = getProductionDslName(options.repetition);\n if (options.repetition.idx !== 0) {\n dslName += options.repetition.idx;\n }\n var errMsg = \"The repetition <\" + dslName + \"> within Rule <\" + options.topLevelRule.name + \"> can never consume any tokens.\\n\" +\n \"This could lead to an infinite loop.\";\n return errMsg;\n },\n buildTokenNameError: function (options) {\n var tokTypeName = options.tokenType.name;\n var errMsg = \"Invalid Grammar Token name: ->\" + tokTypeName + \"<- it must match the pattern: ->\" + options.expectedPattern.toString() + \"<-\";\n return errMsg;\n },\n buildEmptyAlternationError: function (options) {\n var errMsg = \"Ambiguous empty alternative: <\" + (options.emptyChoiceIdx + 1) + \">\" +\n (\" in <OR\" + options.alternation.idx + \"> inside <\" + options.topLevelRule.name + \"> Rule.\\n\") +\n \"Only the last alternative may be an empty alternative.\";\n return errMsg;\n },\n buildTooManyAlternativesError: function (options) {\n var errMsg = \"An Alternation cannot have more than 256 alternatives:\\n\" +\n (\"<OR\" + options.alternation.idx + \"> inside <\" + options.topLevelRule.name + \"> Rule.\\n has \" + (options.alternation.definition.length +\n 1) + \" alternatives.\");\n return errMsg;\n },\n buildLeftRecursionError: function (options) {\n var ruleName = options.topLevelRule.name;\n var pathNames = utils.map(options.leftRecursionPath, function (currRule) { return currRule.name; });\n var leftRecursivePath = ruleName + \" --> \" + pathNames\n .concat([ruleName])\n .join(\" --> \");\n var errMsg = \"Left Recursion found in grammar.\\n\" +\n (\"rule: <\" + ruleName + \"> can be invoked from itself (directly or indirectly)\\n\") +\n (\"without consuming any Tokens. The grammar path that causes this is: \\n \" + leftRecursivePath + \"\\n\") +\n \" To fix this refactor your grammar to remove the left recursion.\\n\" +\n \"see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.\";\n return errMsg;\n },\n buildInvalidRuleNameError: function (options) {\n var ruleName = options.topLevelRule.name;\n var expectedPatternString = options.expectedPattern.toString();\n var errMsg = \"Invalid grammar rule name: ->\" + ruleName + \"<- it must match the pattern: ->\" + expectedPatternString + \"<-\";\n return errMsg;\n },\n buildDuplicateRuleNameError: function (options) {\n var ruleName;\n if (options.topLevelRule instanceof Rule) {\n ruleName = options.topLevelRule.name;\n }\n else {\n ruleName = options.topLevelRule;\n }\n var errMsg = \"Duplicate definition, rule: ->\" + ruleName + \"<- is already defined in the grammar: ->\" + options.grammarName + \"<-\";\n return errMsg;\n }\n};\n//# sourceMappingURL=errors_public.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { ParserDefinitionErrorType } from \"../parser/parser\";\nimport { forEach, values } from \"../../utils/utils\";\nimport { GAstVisitor } from \"./gast/gast_visitor_public\";\nexport function resolveGrammar(topLevels, errMsgProvider) {\n var refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider);\n refResolver.resolveRefs();\n return refResolver.errors;\n}\nvar GastRefResolverVisitor = /** @class */ (function (_super) {\n __extends(GastRefResolverVisitor, _super);\n function GastRefResolverVisitor(nameToTopRule, errMsgProvider) {\n var _this = _super.call(this) || this;\n _this.nameToTopRule = nameToTopRule;\n _this.errMsgProvider = errMsgProvider;\n _this.errors = [];\n return _this;\n }\n GastRefResolverVisitor.prototype.resolveRefs = function () {\n var _this = this;\n forEach(values(this.nameToTopRule), function (prod) {\n _this.currTopLevel = prod;\n prod.accept(_this);\n });\n };\n GastRefResolverVisitor.prototype.visitNonTerminal = function (node) {\n var ref = this.nameToTopRule[node.nonTerminalName];\n if (!ref) {\n var msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node);\n this.errors.push({\n message: msg,\n type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n ruleName: this.currTopLevel.name,\n unresolvedRefName: node.nonTerminalName\n });\n }\n else {\n node.referencedRule = ref;\n }\n };\n return GastRefResolverVisitor;\n}(GAstVisitor));\nexport { GastRefResolverVisitor };\n//# sourceMappingURL=resolver.js.map","import { defaults, forEach } from \"../../../utils/utils\";\nimport { resolveGrammar as orgResolveGrammar } from \"../resolver\";\nimport { validateGrammar as orgValidateGrammar } from \"../checks\";\nimport { defaultGrammarResolverErrorProvider, defaultGrammarValidatorErrorProvider } from \"../../errors_public\";\nimport { DslMethodsCollectorVisitor } from \"./gast\";\nexport function resolveGrammar(options) {\n options = defaults(options, {\n errMsgProvider: defaultGrammarResolverErrorProvider\n });\n var topRulesTable = {};\n forEach(options.rules, function (rule) {\n topRulesTable[rule.name] = rule;\n });\n return orgResolveGrammar(topRulesTable, options.errMsgProvider);\n}\nexport function validateGrammar(options) {\n options = defaults(options, {\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n ignoredIssues: {}\n });\n return orgValidateGrammar(options.rules, options.maxLookahead, options.tokenTypes, options.ignoredIssues, options.errMsgProvider, options.grammarName);\n}\nexport function assignOccurrenceIndices(options) {\n forEach(options.rules, function (currRule) {\n var methodsCollector = new DslMethodsCollectorVisitor();\n currRule.accept(methodsCollector);\n forEach(methodsCollector.dslMethods, function (methods) {\n forEach(methods, function (currMethod, arrIdx) {\n currMethod.idx = arrIdx + 1;\n });\n });\n });\n}\n//# sourceMappingURL=gast_resolver_public.js.map","import { contains } from \"../utils/utils\";\nvar MISMATCHED_TOKEN_EXCEPTION = \"MismatchedTokenException\";\nvar NO_VIABLE_ALT_EXCEPTION = \"NoViableAltException\";\nvar EARLY_EXIT_EXCEPTION = \"EarlyExitException\";\nvar NOT_ALL_INPUT_PARSED_EXCEPTION = \"NotAllInputParsedException\";\nvar RECOGNITION_EXCEPTION_NAMES = [\n MISMATCHED_TOKEN_EXCEPTION,\n NO_VIABLE_ALT_EXCEPTION,\n EARLY_EXIT_EXCEPTION,\n NOT_ALL_INPUT_PARSED_EXCEPTION\n];\nObject.freeze(RECOGNITION_EXCEPTION_NAMES);\n// hacks to bypass no support for custom Errors in javascript/typescript\nexport function isRecognitionException(error) {\n // can't do instanceof on hacked custom js exceptions\n return contains(RECOGNITION_EXCEPTION_NAMES, error.name);\n}\nexport function MismatchedTokenException(message, token, previousToken) {\n this.name = MISMATCHED_TOKEN_EXCEPTION;\n this.message = message;\n this.token = token;\n this.previousToken = previousToken;\n this.resyncedTokens = [];\n}\n// must use the \"Error.prototype\" instead of \"new Error\"\n// because the stack trace points to where \"new Error\" was invoked\"\nMismatchedTokenException.prototype = Error.prototype;\nexport function NoViableAltException(message, token, previousToken) {\n this.name = NO_VIABLE_ALT_EXCEPTION;\n this.message = message;\n this.token = token;\n this.previousToken = previousToken;\n this.resyncedTokens = [];\n}\nNoViableAltException.prototype = Error.prototype;\nexport function NotAllInputParsedException(message, token) {\n this.name = NOT_ALL_INPUT_PARSED_EXCEPTION;\n this.message = message;\n this.token = token;\n this.resyncedTokens = [];\n}\nNotAllInputParsedException.prototype = Error.prototype;\nexport function EarlyExitException(message, token, previousToken) {\n this.name = EARLY_EXIT_EXCEPTION;\n this.message = message;\n this.token = token;\n this.previousToken = previousToken;\n this.resyncedTokens = [];\n}\nEarlyExitException.prototype = Error.prototype;\n//# sourceMappingURL=exceptions_public.js.map","import { createTokenInstance, EOF } from \"../../../scan/tokens_public\";\nimport { cloneArr, contains, dropRight, find, flatten, has, isEmpty, map } from \"../../../utils/utils\";\nimport { MismatchedTokenException } from \"../../exceptions_public\";\nimport { IN } from \"../../constants\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\nexport var EOF_FOLLOW_KEY = {};\nexport var IN_RULE_RECOVERY_EXCEPTION = \"InRuleRecoveryException\";\nexport function InRuleRecoveryException(message) {\n this.name = IN_RULE_RECOVERY_EXCEPTION;\n this.message = message;\n}\nInRuleRecoveryException.prototype = Error.prototype;\n/**\n * This trait is responsible for the error recovery and fault tolerant logic\n */\nvar Recoverable = /** @class */ (function () {\n function Recoverable() {\n }\n Recoverable.prototype.initRecoverable = function (config) {\n this.firstAfterRepMap = {};\n this.resyncFollows = {};\n this.recoveryEnabled = has(config, \"recoveryEnabled\")\n ? config.recoveryEnabled\n : DEFAULT_PARSER_CONFIG.recoveryEnabled;\n // performance optimization, NOOP will be inlined which\n // effectively means that this optional feature does not exist\n // when not used.\n if (this.recoveryEnabled) {\n this.attemptInRepetitionRecovery = attemptInRepetitionRecovery;\n }\n };\n Recoverable.prototype.getTokenToInsert = function (tokType) {\n var tokToInsert = createTokenInstance(tokType, \"\", NaN, NaN, NaN, NaN, NaN, NaN);\n tokToInsert.isInsertedInRecovery = true;\n return tokToInsert;\n };\n Recoverable.prototype.canTokenTypeBeInsertedInRecovery = function (tokType) {\n return true;\n };\n Recoverable.prototype.tryInRepetitionRecovery = function (grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) {\n var _this = this;\n // TODO: can the resyncTokenType be cached?\n var reSyncTokType = this.findReSyncTokenType();\n var savedLexerState = this.exportLexerState();\n var resyncedTokens = [];\n var passedResyncPoint = false;\n var nextTokenWithoutResync = this.LA(1);\n var currToken = this.LA(1);\n var generateErrorMessage = function () {\n var 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 var msg = _this.errorMessageProvider.buildMismatchTokenMessage({\n expected: expectedTokType,\n actual: nextTokenWithoutResync,\n previous: previousToken,\n ruleName: _this.getCurrRuleFullName()\n });\n var error = new MismatchedTokenException(msg, nextTokenWithoutResync, _this.LA(0));\n // the first token here will be the original cause of the error, this is not part of the resyncedTokens property.\n error.resyncedTokens = dropRight(resyncedTokens);\n _this.SAVE_ERROR(error);\n };\n while (!passedResyncPoint) {\n // re-synced to a point where we can safely exit the repetition/\n if (this.tokenMatcher(currToken, expectedTokType)) {\n generateErrorMessage();\n return; // must return here to avoid reverting the inputIdx\n }\n else if (lookAheadFunc.call(this)) {\n // we skipped enough tokens so we can resync right back into another iteration of the repetition grammar rule\n generateErrorMessage();\n // recursive invocation in other to support multiple re-syncs in the same top level repetition grammar rule\n grammarRule.apply(this, grammarRuleArgs);\n return; // must return here to avoid reverting the inputIdx\n }\n else if (this.tokenMatcher(currToken, reSyncTokType)) {\n passedResyncPoint = true;\n }\n else {\n currToken = this.SKIP_TOKEN();\n this.addToResyncTokens(currToken, resyncedTokens);\n }\n }\n // we were unable to find a CLOSER point to resync inside the Repetition, reset the state.\n // The parsing exception we were trying to prevent will happen in the NEXT parsing step. it may be handled by\n // \"between rules\" resync recovery later in the flow.\n this.importLexerState(savedLexerState);\n };\n Recoverable.prototype.shouldInRepetitionRecoveryBeTried = function (expectTokAfterLastMatch, nextTokIdx, notStuck) {\n // Edge case of arriving from a MANY repetition which is stuck\n // Attempting recovery in this case could cause an infinite loop\n if (notStuck === false) {\n return false;\n }\n // arguments to try and perform resync into the next iteration of the many are missing\n if (expectTokAfterLastMatch === undefined || nextTokIdx === undefined) {\n return false;\n }\n // no need to recover, next token is what we expect...\n if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n return false;\n }\n // error recovery is disabled during backtracking as it can make the parser ignore a valid grammar path\n // and prefer some backtracking path that includes recovered errors.\n if (this.isBackTracking()) {\n return false;\n }\n // if we can perform inRule recovery (single token insertion or deletion) we always prefer that recovery algorithm\n // because if it works, it makes the least amount of changes to the input stream (greedy algorithm)\n //noinspection RedundantIfStatementJS\n if (this.canPerformInRuleRecovery(expectTokAfterLastMatch, this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx))) {\n return false;\n }\n return true;\n };\n // Error Recovery functionality\n Recoverable.prototype.getFollowsForInRuleRecovery = function (tokType, tokIdxInRule) {\n var grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule);\n var follows = this.getNextPossibleTokenTypes(grammarPath);\n return follows;\n };\n Recoverable.prototype.tryInRuleRecovery = function (expectedTokType, follows) {\n if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n var tokToInsert = this.getTokenToInsert(expectedTokType);\n return tokToInsert;\n }\n if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n var nextTok = this.SKIP_TOKEN();\n this.consumeToken();\n return nextTok;\n }\n throw new InRuleRecoveryException(\"sad sad panda\");\n };\n Recoverable.prototype.canPerformInRuleRecovery = function (expectedToken, follows) {\n return (this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||\n this.canRecoverWithSingleTokenDeletion(expectedToken));\n };\n Recoverable.prototype.canRecoverWithSingleTokenInsertion = function (expectedTokType, follows) {\n var _this = this;\n if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n return false;\n }\n // must know the possible following tokens to perform single token insertion\n if (isEmpty(follows)) {\n return false;\n }\n var mismatchedTok = this.LA(1);\n var isMisMatchedTokInFollows = find(follows, function (possibleFollowsTokType) {\n return _this.tokenMatcher(mismatchedTok, possibleFollowsTokType);\n }) !== undefined;\n return isMisMatchedTokInFollows;\n };\n Recoverable.prototype.canRecoverWithSingleTokenDeletion = function (expectedTokType) {\n var isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType);\n return isNextTokenWhatIsExpected;\n };\n Recoverable.prototype.isInCurrentRuleReSyncSet = function (tokenTypeIdx) {\n var followKey = this.getCurrFollowKey();\n var currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey);\n return contains(currentRuleReSyncSet, tokenTypeIdx);\n };\n Recoverable.prototype.findReSyncTokenType = function () {\n var 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 var nextToken = this.LA(1);\n var k = 2;\n while (true) {\n var nextTokenType = nextToken.tokenType;\n if (contains(allPossibleReSyncTokTypes, nextTokenType)) {\n return nextTokenType;\n }\n nextToken = this.LA(k);\n k++;\n }\n };\n Recoverable.prototype.getCurrFollowKey = function () {\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 var currRuleShortName = this.getLastExplicitRuleShortName();\n var currRuleIdx = this.getLastExplicitRuleOccurrenceIndex();\n var prevRuleShortName = this.getPreviousExplicitRuleShortName();\n return {\n ruleName: this.shortRuleNameToFullName(currRuleShortName),\n idxInCallingRule: currRuleIdx,\n inRule: this.shortRuleNameToFullName(prevRuleShortName)\n };\n };\n Recoverable.prototype.buildFullFollowKeyStack = function () {\n var _this = this;\n var explicitRuleStack = this.RULE_STACK;\n var explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK;\n if (!isEmpty(this.LAST_EXPLICIT_RULE_STACK)) {\n explicitRuleStack = map(this.LAST_EXPLICIT_RULE_STACK, function (idx) { return _this.RULE_STACK[idx]; });\n explicitOccurrenceStack = map(this.LAST_EXPLICIT_RULE_STACK, function (idx) { return _this.RULE_OCCURRENCE_STACK[idx]; });\n }\n // TODO: only iterate over explicit rules here\n return map(explicitRuleStack, function (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 Recoverable.prototype.flattenFollowSet = function () {\n var _this = this;\n var followStack = map(this.buildFullFollowKeyStack(), function (currKey) {\n return _this.getFollowSetFromFollowKey(currKey);\n });\n return flatten(followStack);\n };\n Recoverable.prototype.getFollowSetFromFollowKey = function (followKey) {\n if (followKey === EOF_FOLLOW_KEY) {\n return [EOF];\n }\n var followName = followKey.ruleName +\n followKey.idxInCallingRule +\n IN +\n followKey.inRule;\n return this.resyncFollows[followName];\n };\n // It does not make any sense to include a virtual EOF token in the list of resynced tokens\n // as EOF does not really exist and thus does not contain any useful information (line/column numbers)\n Recoverable.prototype.addToResyncTokens = function (token, resyncTokens) {\n if (!this.tokenMatcher(token, EOF)) {\n resyncTokens.push(token);\n }\n return resyncTokens;\n };\n Recoverable.prototype.reSyncTo = function (tokType) {\n var resyncedTokens = [];\n var 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 Recoverable.prototype.attemptInRepetitionRecovery = function (prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n // by default this is a NO-OP\n // The actual implementation is with the function(not method) below\n };\n Recoverable.prototype.getCurrentGrammarPath = function (tokType, tokIdxInRule) {\n var pathRuleStack = this.getHumanReadableRuleStack();\n var pathOccurrenceStack = cloneArr(this.RULE_OCCURRENCE_STACK);\n var grammarPath = {\n ruleStack: pathRuleStack,\n occurrenceStack: pathOccurrenceStack,\n lastTok: tokType,\n lastTokOccurrence: tokIdxInRule\n };\n return grammarPath;\n };\n Recoverable.prototype.getHumanReadableRuleStack = function () {\n var _this = this;\n if (!isEmpty(this.LAST_EXPLICIT_RULE_STACK)) {\n return map(this.LAST_EXPLICIT_RULE_STACK, function (currIdx) {\n return _this.shortRuleNameToFullName(_this.RULE_STACK[currIdx]);\n });\n }\n else {\n return map(this.RULE_STACK, function (currShortName) {\n return _this.shortRuleNameToFullName(currShortName);\n });\n }\n };\n return Recoverable;\n}());\nexport { Recoverable };\nexport function attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n var key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence);\n var firstAfterRepInfo = this.firstAfterRepMap[key];\n if (firstAfterRepInfo === undefined) {\n var currRuleName = this.getCurrRuleFullName();\n var ruleGrammar = this.getGAstProductions()[currRuleName];\n var walker = new nextToksWalker(ruleGrammar, prodOccurrence);\n firstAfterRepInfo = walker.startWalking();\n this.firstAfterRepMap[key] = firstAfterRepInfo;\n }\n var expectTokAfterLastMatch = firstAfterRepInfo.token;\n var nextTokIdx = firstAfterRepInfo.occurrence;\n var isEndOfRule = firstAfterRepInfo.isEndOfRule;\n // special edge case of a TOP most repetition after which the input should END.\n // this will force an attempt for inRule recovery in that scenario.\n if (this.RULE_STACK.length === 1 &&\n isEndOfRule &&\n expectTokAfterLastMatch === undefined) {\n expectTokAfterLastMatch = EOF;\n nextTokIdx = 1;\n }\n if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) {\n // TODO: performance optimization: instead of passing the original args here, we modify\n // the args param (or create a new one) and make sure the lookahead func is explicitly provided\n // to avoid searching the cache for it once more.\n this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch);\n }\n}\n//# sourceMappingURL=recoverable.js.map","import { buildAlternativesLookAheadFunc, buildLookaheadFuncForOptionalProd, buildLookaheadFuncForOr, buildSingleAlternativeLookaheadFunction, PROD_TYPE } from \"../../grammar/lookahead\";\nimport { forEach, has, isES2015MapSupported } from \"../../../utils/utils\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\nimport { AT_LEAST_ONE_IDX, AT_LEAST_ONE_SEP_IDX, getKeyForAutomaticLookahead, MANY_IDX, MANY_SEP_IDX, OPTION_IDX, OR_IDX } from \"../../grammar/keys\";\nimport { collectMethods, getProductionDslName } from \"../../grammar/gast/gast\";\n/**\n * Trait responsible for the lookahead related utilities and optimizations.\n */\nvar LooksAhead = /** @class */ (function () {\n function LooksAhead() {\n }\n LooksAhead.prototype.initLooksAhead = function (config) {\n this.dynamicTokensEnabled = has(config, \"dynamicTokensEnabled\")\n ? config.dynamicTokensEnabled\n : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled;\n this.maxLookahead = has(config, \"maxLookahead\")\n ? config.maxLookahead\n : DEFAULT_PARSER_CONFIG.maxLookahead;\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n this.lookAheadFuncsCache = isES2015MapSupported() ? new Map() : [];\n // Performance optimization on newer engines that support ES6 Map\n // For larger Maps this is slightly faster than using a plain object (array in our case).\n /* istanbul ignore else - The else branch will be tested on older node.js versions and IE11 */\n if (isES2015MapSupported()) {\n this.getLaFuncFromCache = this.getLaFuncFromMap;\n this.setLaFuncCache = this.setLaFuncCacheUsingMap;\n }\n else {\n this.getLaFuncFromCache = this.getLaFuncFromObj;\n this.setLaFuncCache = this.setLaFuncUsingObj;\n }\n };\n LooksAhead.prototype.preComputeLookaheadFunctions = function (rules) {\n var _this = this;\n forEach(rules, function (currRule) {\n _this.TRACE_INIT(currRule.name + \" Rule Lookahead\", function () {\n var _a = collectMethods(currRule), alternation = _a.alternation, repetition = _a.repetition, option = _a.option, repetitionMandatory = _a.repetitionMandatory, repetitionMandatoryWithSeparator = _a.repetitionMandatoryWithSeparator, repetitionWithSeparator = _a.repetitionWithSeparator;\n forEach(alternation, function (currProd) {\n var prodIdx = currProd.idx === 0 ? \"\" : currProd.idx;\n _this.TRACE_INIT(\"\" + getProductionDslName(currProd) + prodIdx, function () {\n var laFunc = buildLookaheadFuncForOr(currProd.idx, currRule, currProd.maxLookahead || _this.maxLookahead, currProd.hasPredicates, _this.dynamicTokensEnabled, _this.lookAheadBuilderForAlternatives);\n var key = getKeyForAutomaticLookahead(_this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx);\n _this.setLaFuncCache(key, laFunc);\n });\n });\n forEach(repetition, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, MANY_IDX, PROD_TYPE.REPETITION, currProd.maxLookahead, getProductionDslName(currProd));\n });\n forEach(option, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, OPTION_IDX, PROD_TYPE.OPTION, currProd.maxLookahead, getProductionDslName(currProd));\n });\n forEach(repetitionMandatory, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_IDX, PROD_TYPE.REPETITION_MANDATORY, currProd.maxLookahead, getProductionDslName(currProd));\n });\n forEach(repetitionMandatoryWithSeparator, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_SEP_IDX, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currProd.maxLookahead, getProductionDslName(currProd));\n });\n forEach(repetitionWithSeparator, function (currProd) {\n _this.computeLookaheadFunc(currRule, currProd.idx, MANY_SEP_IDX, PROD_TYPE.REPETITION_WITH_SEPARATOR, currProd.maxLookahead, getProductionDslName(currProd));\n });\n });\n });\n };\n LooksAhead.prototype.computeLookaheadFunc = function (rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) {\n var _this = this;\n this.TRACE_INIT(\"\" + dslMethodName + (prodOccurrence === 0 ? \"\" : prodOccurrence), function () {\n var laFunc = buildLookaheadFuncForOptionalProd(prodOccurrence, rule, prodMaxLookahead || _this.maxLookahead, _this.dynamicTokensEnabled, prodType, _this.lookAheadBuilderForOptional);\n var key = getKeyForAutomaticLookahead(_this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence);\n _this.setLaFuncCache(key, laFunc);\n });\n };\n LooksAhead.prototype.lookAheadBuilderForOptional = function (alt, tokenMatcher, dynamicTokensEnabled) {\n return buildSingleAlternativeLookaheadFunction(alt, tokenMatcher, dynamicTokensEnabled);\n };\n LooksAhead.prototype.lookAheadBuilderForAlternatives = function (alts, hasPredicates, tokenMatcher, dynamicTokensEnabled) {\n return buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher, dynamicTokensEnabled);\n };\n // this actually returns a number, but it is always used as a string (object prop key)\n LooksAhead.prototype.getKeyForAutomaticLookahead = function (dslMethodIdx, occurrence) {\n var currRuleShortName = this.getLastExplicitRuleShortName();\n return getKeyForAutomaticLookahead(currRuleShortName, dslMethodIdx, occurrence);\n };\n /* istanbul ignore next */\n LooksAhead.prototype.getLaFuncFromCache = function (key) {\n return undefined;\n };\n LooksAhead.prototype.getLaFuncFromMap = function (key) {\n return this.lookAheadFuncsCache.get(key);\n };\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n LooksAhead.prototype.getLaFuncFromObj = function (key) {\n return this.lookAheadFuncsCache[key];\n };\n /* istanbul ignore next */\n LooksAhead.prototype.setLaFuncCache = function (key, value) { };\n LooksAhead.prototype.setLaFuncCacheUsingMap = function (key, value) {\n this.lookAheadFuncsCache.set(key, value);\n };\n /* istanbul ignore next - Using plain array as dictionary will be tested on older node.js versions and IE11 */\n LooksAhead.prototype.setLaFuncUsingObj = function (key, value) {\n this.lookAheadFuncsCache[key] = value;\n };\n return LooksAhead;\n}());\nexport { LooksAhead };\n//# sourceMappingURL=looksahead.js.map","import { isUndefined } from \"../utils/utils\";\nexport function classNameFromInstance(instance) {\n return functionName(instance.constructor);\n}\nvar FUNC_NAME_REGEXP = /^\\s*function\\s*(\\S*)\\s*\\(/;\nvar NAME = \"name\";\n/* istanbul ignore next too many hacks for IE/old versions of node.js here*/\nexport function functionName(func) {\n // Engines that support Function.prototype.name OR the nth (n>1) time after\n // the name has been computed in the following else block.\n var existingNameProp = func.name;\n if (existingNameProp) {\n return existingNameProp;\n }\n // hack for IE and engines that do not support Object.defineProperty on function.name (Node.js 0.10 && 0.12)\n var computedName = func.toString().match(FUNC_NAME_REGEXP)[1];\n return computedName;\n}\n/**\n * @returns {boolean} - has the property been successfully defined\n */\nexport function defineNameProp(obj, nameValue) {\n var namePropDescriptor = Object.getOwnPropertyDescriptor(obj, NAME);\n /* istanbul ignore else -> will only run in old versions of node.js */\n if (isUndefined(namePropDescriptor) || namePropDescriptor.configurable) {\n Object.defineProperty(obj, NAME, {\n enumerable: false,\n configurable: true,\n writable: false,\n value: nameValue\n });\n return true;\n }\n /* istanbul ignore next -> will only run in old versions of node.js */\n return false;\n}\n//# sourceMappingURL=lang_extensions.js.map","import { compact, contains, forEach, isArray, isEmpty, isFunction, isUndefined, keys, map } from \"../../utils/utils\";\nimport { defineNameProp, functionName } from \"../../lang/lang_extensions\";\nimport { validTermsPattern } from \"../grammar/checks\";\nexport function defaultVisit(ctx, param) {\n var childrenNames = keys(ctx);\n var childrenNamesLength = childrenNames.length;\n for (var i = 0; i < childrenNamesLength; i++) {\n var currChildName = childrenNames[i];\n var currChildArray = ctx[currChildName];\n var currChildArrayLength = currChildArray.length;\n for (var j = 0; j < currChildArrayLength; j++) {\n var currChild = currChildArray[j];\n // distinction between Tokens Children and CstNode children\n if (currChild.tokenTypeIdx === undefined) {\n if (currChild.fullName !== undefined) {\n this[currChild.fullName](currChild.children, param);\n }\n else {\n this[currChild.name](currChild.children, param);\n }\n }\n }\n }\n // defaultVisit does not support generic out param\n return undefined;\n}\nexport function createBaseSemanticVisitorConstructor(grammarName, ruleNames) {\n var derivedConstructor = function () { };\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + \"BaseSemantics\");\n var semanticProto = {\n visit: function (cstNode, param) {\n // enables writing more concise visitor methods when CstNode has only a single child\n if (isArray(cstNode)) {\n // A CST Node's children dictionary can never have empty arrays as values\n // If a key is defined there will be at least one element in the corresponding value array.\n cstNode = cstNode[0];\n }\n // enables passing optional CstNodes concisely.\n if (isUndefined(cstNode)) {\n return undefined;\n }\n if (cstNode.fullName !== undefined) {\n return this[cstNode.fullName](cstNode.children, param);\n }\n else {\n return this[cstNode.name](cstNode.children, param);\n }\n },\n validateVisitor: function () {\n var semanticDefinitionErrors = validateVisitor(this, ruleNames);\n if (!isEmpty(semanticDefinitionErrors)) {\n var errorMessages = map(semanticDefinitionErrors, function (currDefError) { return currDefError.msg; });\n throw Error(\"Errors Detected in CST Visitor <\" + functionName(this.constructor) + \">:\\n\\t\" +\n (\"\" + errorMessages.join(\"\\n\\n\").replace(/\\n/g, \"\\n\\t\")));\n }\n }\n };\n derivedConstructor.prototype = semanticProto;\n derivedConstructor.prototype.constructor = derivedConstructor;\n derivedConstructor._RULE_NAMES = ruleNames;\n return derivedConstructor;\n}\nexport function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) {\n var derivedConstructor = function () { };\n // can be overwritten according to:\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/\n // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname\n defineNameProp(derivedConstructor, grammarName + \"BaseSemanticsWithDefaults\");\n var withDefaultsProto = Object.create(baseConstructor.prototype);\n forEach(ruleNames, function (ruleName) {\n withDefaultsProto[ruleName] = defaultVisit;\n });\n derivedConstructor.prototype = withDefaultsProto;\n derivedConstructor.prototype.constructor = derivedConstructor;\n return derivedConstructor;\n}\nexport var CstVisitorDefinitionError;\n(function (CstVisitorDefinitionError) {\n CstVisitorDefinitionError[CstVisitorDefinitionError[\"REDUNDANT_METHOD\"] = 0] = \"REDUNDANT_METHOD\";\n CstVisitorDefinitionError[CstVisitorDefinitionError[\"MISSING_METHOD\"] = 1] = \"MISSING_METHOD\";\n})(CstVisitorDefinitionError || (CstVisitorDefinitionError = {}));\nexport function validateVisitor(visitorInstance, ruleNames) {\n var missingErrors = validateMissingCstMethods(visitorInstance, ruleNames);\n var redundantErrors = validateRedundantMethods(visitorInstance, ruleNames);\n return missingErrors.concat(redundantErrors);\n}\nexport function validateMissingCstMethods(visitorInstance, ruleNames) {\n var errors = map(ruleNames, function (currRuleName) {\n if (!isFunction(visitorInstance[currRuleName])) {\n return {\n msg: \"Missing visitor method: <\" + currRuleName + \"> on \" + functionName(visitorInstance.constructor) + \" CST Visitor.\",\n type: CstVisitorDefinitionError.MISSING_METHOD,\n methodName: currRuleName\n };\n }\n });\n return compact(errors);\n}\nvar VALID_PROP_NAMES = [\"constructor\", \"visit\", \"validateVisitor\"];\nexport function validateRedundantMethods(visitorInstance, ruleNames) {\n var errors = [];\n for (var prop in visitorInstance) {\n if (validTermsPattern.test(prop) &&\n isFunction(visitorInstance[prop]) &&\n !contains(VALID_PROP_NAMES, prop) &&\n !contains(ruleNames, prop)) {\n errors.push({\n msg: \"Redundant visitor method: <\" + prop + \"> on \" + functionName(visitorInstance.constructor) + \" CST Visitor\\n\" +\n \"There is no Grammar Rule corresponding to this method's name.\\n\" +\n (\"For utility methods on visitor classes use methods names that do not match /\" + validTermsPattern.source + \"/.\"),\n type: CstVisitorDefinitionError.REDUNDANT_METHOD,\n methodName: prop\n });\n }\n }\n return errors;\n}\n//# sourceMappingURL=cst_visitor.js.map","import { addNoneTerminalToCst, addTerminalToCst, setNodeLocationFull, setNodeLocationOnlyOffset } from \"../../cst/cst\";\nimport { has, isUndefined, NOOP } from \"../../../utils/utils\";\nimport { createBaseSemanticVisitorConstructor, createBaseVisitorConstructorWithDefaults } from \"../../cst/cst_visitor\";\nimport { getKeyForAltIndex } from \"../../grammar/keys\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\n/**\n * This trait is responsible for the CST building logic.\n */\nvar TreeBuilder = /** @class */ (function () {\n function TreeBuilder() {\n }\n TreeBuilder.prototype.initTreeBuilder = function (config) {\n this.LAST_EXPLICIT_RULE_STACK = [];\n this.CST_STACK = [];\n this.outputCst = has(config, \"outputCst\")\n ? config.outputCst\n : DEFAULT_PARSER_CONFIG.outputCst;\n this.nodeLocationTracking = has(config, \"nodeLocationTracking\")\n ? config.nodeLocationTracking\n : DEFAULT_PARSER_CONFIG.nodeLocationTracking;\n if (!this.outputCst) {\n this.cstInvocationStateUpdate = NOOP;\n this.cstFinallyStateUpdate = NOOP;\n this.cstPostTerminal = NOOP;\n this.cstPostNonTerminal = NOOP;\n this.cstPostRule = NOOP;\n this.getLastExplicitRuleShortName = this.getLastExplicitRuleShortNameNoCst;\n this.getPreviousExplicitRuleShortName = this.getPreviousExplicitRuleShortNameNoCst;\n this.getLastExplicitRuleOccurrenceIndex = this.getLastExplicitRuleOccurrenceIndexNoCst;\n this.manyInternal = this.manyInternalNoCst;\n this.orInternal = this.orInternalNoCst;\n this.optionInternal = this.optionInternalNoCst;\n this.atLeastOneInternal = this.atLeastOneInternalNoCst;\n this.manySepFirstInternal = this.manySepFirstInternalNoCst;\n this.atLeastOneSepFirstInternal = this.atLeastOneSepFirstInternalNoCst;\n }\n else {\n if (/full/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationFull;\n this.setNodeLocationFromNode = setNodeLocationFull;\n this.cstPostRule = NOOP;\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery;\n }\n else {\n this.setNodeLocationFromToken = NOOP;\n this.setNodeLocationFromNode = NOOP;\n this.cstPostRule = this.cstPostRuleFull;\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular;\n }\n }\n else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = (setNodeLocationOnlyOffset);\n this.setNodeLocationFromNode = (setNodeLocationOnlyOffset);\n this.cstPostRule = NOOP;\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery;\n }\n else {\n this.setNodeLocationFromToken = NOOP;\n this.setNodeLocationFromNode = NOOP;\n this.cstPostRule = this.cstPostRuleOnlyOffset;\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular;\n }\n }\n else if (/none/i.test(this.nodeLocationTracking)) {\n this.setNodeLocationFromToken = NOOP;\n this.setNodeLocationFromNode = NOOP;\n this.cstPostRule = NOOP;\n this.setInitialNodeLocation = NOOP;\n }\n else {\n throw Error(\"Invalid <nodeLocationTracking> config option: \\\"\" + config.nodeLocationTracking + \"\\\"\");\n }\n }\n };\n TreeBuilder.prototype.setInitialNodeLocationOnlyOffsetRecovery = function (cstNode) {\n cstNode.location = {\n startOffset: NaN,\n endOffset: NaN\n };\n };\n TreeBuilder.prototype.setInitialNodeLocationOnlyOffsetRegular = function (cstNode) {\n cstNode.location = {\n // without error recovery the starting Location of a new CstNode is guaranteed\n // To be the next Token's startOffset (for valid inputs).\n // For invalid inputs there won't be any CSTOutput so this potential\n // inaccuracy does not matter\n startOffset: this.LA(1).startOffset,\n endOffset: NaN\n };\n };\n TreeBuilder.prototype.setInitialNodeLocationFullRecovery = function (cstNode) {\n cstNode.location = {\n startOffset: NaN,\n startLine: NaN,\n startColumn: NaN,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n };\n };\n /**\n * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n\n * @param cstNode\n */\n TreeBuilder.prototype.setInitialNodeLocationFullRegular = function (cstNode) {\n var 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 // CST\n TreeBuilder.prototype.cstNestedInvocationStateUpdate = function (nestedName, shortName) {\n var cstNode = {\n name: nestedName,\n fullName: this.shortRuleNameToFull[this.getLastExplicitRuleShortName()] +\n nestedName,\n children: {}\n };\n this.setInitialNodeLocation(cstNode);\n this.CST_STACK.push(cstNode);\n };\n TreeBuilder.prototype.cstInvocationStateUpdate = function (fullRuleName, shortName) {\n this.LAST_EXPLICIT_RULE_STACK.push(this.RULE_STACK.length - 1);\n var cstNode = {\n name: fullRuleName,\n children: {}\n };\n this.setInitialNodeLocation(cstNode);\n this.CST_STACK.push(cstNode);\n };\n TreeBuilder.prototype.cstFinallyStateUpdate = function () {\n this.LAST_EXPLICIT_RULE_STACK.pop();\n this.CST_STACK.pop();\n };\n TreeBuilder.prototype.cstNestedFinallyStateUpdate = function () {\n var lastCstNode = this.CST_STACK.pop();\n // TODO: the naming is bad, this should go directly to the\n // (correct) cstLocation update method\n // e.g if we put other logic in postRule...\n this.cstPostRule(lastCstNode);\n };\n TreeBuilder.prototype.cstPostRuleFull = function (ruleCstNode) {\n var prevToken = this.LA(0);\n var loc = ruleCstNode.location;\n // If this condition is true it means we consumed at least one Token\n // In this CstNode or its nested children.\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 TreeBuilder.prototype.cstPostRuleOnlyOffset = function (ruleCstNode) {\n var prevToken = this.LA(0);\n var loc = ruleCstNode.location;\n // If this condition is true it means we consumed at least one Token\n // In this CstNode or its nested children.\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 TreeBuilder.prototype.cstPostTerminal = function (key, consumedToken) {\n var rootCst = this.CST_STACK[this.CST_STACK.length - 1];\n addTerminalToCst(rootCst, consumedToken, key);\n // This is only used when **both** error recovery and CST Output are enabled.\n this.setNodeLocationFromToken(rootCst.location, consumedToken);\n };\n TreeBuilder.prototype.cstPostNonTerminal = function (ruleCstResult, ruleName) {\n // Avoid side effects due to back tracking\n // TODO: This costs a 2-3% in performance, A flag on IParserConfig\n // could be used to get rid of this conditional, but not sure its worth the effort\n // and API complexity.\n if (this.isBackTracking() !== true) {\n var 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 TreeBuilder.prototype.getBaseCstVisitorConstructor = function () {\n if (isUndefined(this.baseCstVisitorConstructor)) {\n var newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(this.className, this.allRuleNames);\n this.baseCstVisitorConstructor = newBaseCstVisitorConstructor;\n return newBaseCstVisitorConstructor;\n }\n return this.baseCstVisitorConstructor;\n };\n TreeBuilder.prototype.getBaseCstVisitorConstructorWithDefaults = function () {\n if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n var newConstructor = createBaseVisitorConstructorWithDefaults(this.className, this.allRuleNames, this.getBaseCstVisitorConstructor());\n this.baseCstVisitorWithDefaultsConstructor = newConstructor;\n return newConstructor;\n }\n return this.baseCstVisitorWithDefaultsConstructor;\n };\n TreeBuilder.prototype.nestedRuleBeforeClause = function (methodOpts, laKey) {\n var nestedName;\n if (methodOpts.NAME !== undefined) {\n nestedName = methodOpts.NAME;\n this.nestedRuleInvocationStateUpdate(nestedName, laKey);\n return nestedName;\n }\n else {\n return undefined;\n }\n };\n TreeBuilder.prototype.nestedAltBeforeClause = function (methodOpts, occurrence, methodKeyIdx, altIdx) {\n var ruleIdx = this.getLastExplicitRuleShortName();\n var shortName = getKeyForAltIndex(ruleIdx, methodKeyIdx, occurrence, altIdx);\n var nestedName;\n if (methodOpts.NAME !== undefined) {\n nestedName = methodOpts.NAME;\n this.nestedRuleInvocationStateUpdate(nestedName, shortName);\n return {\n shortName: shortName,\n nestedName: nestedName\n };\n }\n else {\n return undefined;\n }\n };\n TreeBuilder.prototype.nestedRuleFinallyClause = function (laKey, nestedName) {\n var cstStack = this.CST_STACK;\n var nestedRuleCst = cstStack[cstStack.length - 1];\n this.nestedRuleFinallyStateUpdate();\n // this return a different result than the previous invocation because \"nestedRuleFinallyStateUpdate\" pops the cst stack\n var parentCstNode = cstStack[cstStack.length - 1];\n addNoneTerminalToCst(parentCstNode, nestedName, nestedRuleCst);\n this.setNodeLocationFromNode(parentCstNode.location, nestedRuleCst.location);\n };\n TreeBuilder.prototype.getLastExplicitRuleShortName = function () {\n var lastExplictIndex = this.LAST_EXPLICIT_RULE_STACK[this.LAST_EXPLICIT_RULE_STACK.length - 1];\n return this.RULE_STACK[lastExplictIndex];\n };\n TreeBuilder.prototype.getLastExplicitRuleShortNameNoCst = function () {\n var ruleStack = this.RULE_STACK;\n return ruleStack[ruleStack.length - 1];\n };\n TreeBuilder.prototype.getPreviousExplicitRuleShortName = function () {\n var lastExplicitIndex = this.LAST_EXPLICIT_RULE_STACK[this.LAST_EXPLICIT_RULE_STACK.length - 2];\n return this.RULE_STACK[lastExplicitIndex];\n };\n TreeBuilder.prototype.getPreviousExplicitRuleShortNameNoCst = function () {\n var ruleStack = this.RULE_STACK;\n return ruleStack[ruleStack.length - 2];\n };\n TreeBuilder.prototype.getLastExplicitRuleOccurrenceIndex = function () {\n var lastExplicitIndex = this.LAST_EXPLICIT_RULE_STACK[this.LAST_EXPLICIT_RULE_STACK.length - 1];\n return this.RULE_OCCURRENCE_STACK[lastExplicitIndex];\n };\n TreeBuilder.prototype.getLastExplicitRuleOccurrenceIndexNoCst = function () {\n var occurrenceStack = this.RULE_OCCURRENCE_STACK;\n return occurrenceStack[occurrenceStack.length - 1];\n };\n TreeBuilder.prototype.nestedRuleInvocationStateUpdate = function (nestedRuleName, shortNameKey) {\n this.RULE_OCCURRENCE_STACK.push(1);\n this.RULE_STACK.push(shortNameKey);\n this.cstNestedInvocationStateUpdate(nestedRuleName, shortNameKey);\n };\n TreeBuilder.prototype.nestedRuleFinallyStateUpdate = function () {\n this.RULE_STACK.pop();\n this.RULE_OCCURRENCE_STACK.pop();\n // NOOP when cst is disabled\n this.cstNestedFinallyStateUpdate();\n };\n return TreeBuilder;\n}());\nexport { TreeBuilder };\n//# sourceMappingURL=tree_builder.js.map","import { END_OF_FILE } from \"../parser\";\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 */\nvar LexerAdapter = /** @class */ (function () {\n function LexerAdapter() {\n }\n LexerAdapter.prototype.initLexerAdapter = function () {\n this.tokVector = [];\n this.tokVectorLength = 0;\n this.currIdx = -1;\n };\n Object.defineProperty(LexerAdapter.prototype, \"input\", {\n get: function () {\n return this.tokVector;\n },\n set: function (newInput) {\n if (this.selfAnalysisDone !== true) {\n throw Error(\"Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.\");\n }\n this.reset();\n this.tokVector = newInput;\n this.tokVectorLength = newInput.length;\n },\n enumerable: true,\n configurable: true\n });\n // skips a token and returns the next token\n LexerAdapter.prototype.SKIP_TOKEN = function () {\n if (this.currIdx <= this.tokVector.length - 2) {\n this.consumeToken();\n return this.LA(1);\n }\n else {\n return END_OF_FILE;\n }\n };\n // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers\n // or lexers dependent on parser context.\n LexerAdapter.prototype.LA = function (howMuch) {\n var soughtIdx = this.currIdx + howMuch;\n if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n return END_OF_FILE;\n }\n else {\n return this.tokVector[soughtIdx];\n }\n };\n LexerAdapter.prototype.consumeToken = function () {\n this.currIdx++;\n };\n LexerAdapter.prototype.exportLexerState = function () {\n return this.currIdx;\n };\n LexerAdapter.prototype.importLexerState = function (newState) {\n this.currIdx = newState;\n };\n LexerAdapter.prototype.resetLexerState = function () {\n this.currIdx = -1;\n };\n LexerAdapter.prototype.moveToTerminatedState = function () {\n this.currIdx = this.tokVector.length - 1;\n };\n LexerAdapter.prototype.getLexerPosition = function () {\n return this.exportLexerState();\n };\n return LexerAdapter;\n}());\nexport { LexerAdapter };\n//# sourceMappingURL=lexer_adapter.js.map","import { contains, values } from \"../../../utils/utils\";\nimport { isRecognitionException } from \"../../exceptions_public\";\nimport { DEFAULT_RULE_CONFIG, ParserDefinitionErrorType } from \"../parser\";\nimport { defaultGrammarValidatorErrorProvider } from \"../../errors_public\";\nimport { validateRuleIsOverridden } from \"../../grammar/checks\";\nimport { serializeGrammar } from \"../../grammar/gast/gast_public\";\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 */\nvar RecognizerApi = /** @class */ (function () {\n function RecognizerApi() {\n }\n RecognizerApi.prototype.ACTION = function (impl) {\n return impl.call(this);\n };\n RecognizerApi.prototype.consume = function (idx, tokType, options) {\n return this.consumeInternal(tokType, idx, options);\n };\n RecognizerApi.prototype.subrule = function (idx, ruleToCall, options) {\n return this.subruleInternal(ruleToCall, idx, options);\n };\n RecognizerApi.prototype.option = function (idx, actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, idx);\n };\n RecognizerApi.prototype.or = function (idx, altsOrOpts) {\n return this.orInternal(altsOrOpts, idx);\n };\n RecognizerApi.prototype.many = function (idx, actionORMethodDef) {\n return this.manyInternal(idx, actionORMethodDef);\n };\n RecognizerApi.prototype.atLeastOne = function (idx, actionORMethodDef) {\n return this.atLeastOneInternal(idx, actionORMethodDef);\n };\n RecognizerApi.prototype.CONSUME = function (tokType, options) {\n return this.consumeInternal(tokType, 0, options);\n };\n RecognizerApi.prototype.CONSUME1 = function (tokType, options) {\n return this.consumeInternal(tokType, 1, options);\n };\n RecognizerApi.prototype.CONSUME2 = function (tokType, options) {\n return this.consumeInternal(tokType, 2, options);\n };\n RecognizerApi.prototype.CONSUME3 = function (tokType, options) {\n return this.consumeInternal(tokType, 3, options);\n };\n RecognizerApi.prototype.CONSUME4 = function (tokType, options) {\n return this.consumeInternal(tokType, 4, options);\n };\n RecognizerApi.prototype.CONSUME5 = function (tokType, options) {\n return this.consumeInternal(tokType, 5, options);\n };\n RecognizerApi.prototype.CONSUME6 = function (tokType, options) {\n return this.consumeInternal(tokType, 6, options);\n };\n RecognizerApi.prototype.CONSUME7 = function (tokType, options) {\n return this.consumeInternal(tokType, 7, options);\n };\n RecognizerApi.prototype.CONSUME8 = function (tokType, options) {\n return this.consumeInternal(tokType, 8, options);\n };\n RecognizerApi.prototype.CONSUME9 = function (tokType, options) {\n return this.consumeInternal(tokType, 9, options);\n };\n RecognizerApi.prototype.SUBRULE = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 0, options);\n };\n RecognizerApi.prototype.SUBRULE1 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 1, options);\n };\n RecognizerApi.prototype.SUBRULE2 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 2, options);\n };\n RecognizerApi.prototype.SUBRULE3 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 3, options);\n };\n RecognizerApi.prototype.SUBRULE4 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 4, options);\n };\n RecognizerApi.prototype.SUBRULE5 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 5, options);\n };\n RecognizerApi.prototype.SUBRULE6 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 6, options);\n };\n RecognizerApi.prototype.SUBRULE7 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 7, options);\n };\n RecognizerApi.prototype.SUBRULE8 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 8, options);\n };\n RecognizerApi.prototype.SUBRULE9 = function (ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 9, options);\n };\n RecognizerApi.prototype.OPTION = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 0);\n };\n RecognizerApi.prototype.OPTION1 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 1);\n };\n RecognizerApi.prototype.OPTION2 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 2);\n };\n RecognizerApi.prototype.OPTION3 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 3);\n };\n RecognizerApi.prototype.OPTION4 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 4);\n };\n RecognizerApi.prototype.OPTION5 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 5);\n };\n RecognizerApi.prototype.OPTION6 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 6);\n };\n RecognizerApi.prototype.OPTION7 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 7);\n };\n RecognizerApi.prototype.OPTION8 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 8);\n };\n RecognizerApi.prototype.OPTION9 = function (actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 9);\n };\n RecognizerApi.prototype.OR = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 0);\n };\n RecognizerApi.prototype.OR1 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 1);\n };\n RecognizerApi.prototype.OR2 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 2);\n };\n RecognizerApi.prototype.OR3 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 3);\n };\n RecognizerApi.prototype.OR4 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 4);\n };\n RecognizerApi.prototype.OR5 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 5);\n };\n RecognizerApi.prototype.OR6 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 6);\n };\n RecognizerApi.prototype.OR7 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 7);\n };\n RecognizerApi.prototype.OR8 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 8);\n };\n RecognizerApi.prototype.OR9 = function (altsOrOpts) {\n return this.orInternal(altsOrOpts, 9);\n };\n RecognizerApi.prototype.MANY = function (actionORMethodDef) {\n this.manyInternal(0, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY1 = function (actionORMethodDef) {\n this.manyInternal(1, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY2 = function (actionORMethodDef) {\n this.manyInternal(2, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY3 = function (actionORMethodDef) {\n this.manyInternal(3, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY4 = function (actionORMethodDef) {\n this.manyInternal(4, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY5 = function (actionORMethodDef) {\n this.manyInternal(5, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY6 = function (actionORMethodDef) {\n this.manyInternal(6, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY7 = function (actionORMethodDef) {\n this.manyInternal(7, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY8 = function (actionORMethodDef) {\n this.manyInternal(8, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY9 = function (actionORMethodDef) {\n this.manyInternal(9, actionORMethodDef);\n };\n RecognizerApi.prototype.MANY_SEP = function (options) {\n this.manySepFirstInternal(0, options);\n };\n RecognizerApi.prototype.MANY_SEP1 = function (options) {\n this.manySepFirstInternal(1, options);\n };\n RecognizerApi.prototype.MANY_SEP2 = function (options) {\n this.manySepFirstInternal(2, options);\n };\n RecognizerApi.prototype.MANY_SEP3 = function (options) {\n this.manySepFirstInternal(3, options);\n };\n RecognizerApi.prototype.MANY_SEP4 = function (options) {\n this.manySepFirstInternal(4, options);\n };\n RecognizerApi.prototype.MANY_SEP5 = function (options) {\n this.manySepFirstInternal(5, options);\n };\n RecognizerApi.prototype.MANY_SEP6 = function (options) {\n this.manySepFirstInternal(6, options);\n };\n RecognizerApi.prototype.MANY_SEP7 = function (options) {\n this.manySepFirstInternal(7, options);\n };\n RecognizerApi.prototype.MANY_SEP8 = function (options) {\n this.manySepFirstInternal(8, options);\n };\n RecognizerApi.prototype.MANY_SEP9 = function (options) {\n this.manySepFirstInternal(9, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE = function (actionORMethodDef) {\n this.atLeastOneInternal(0, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE1 = function (actionORMethodDef) {\n return this.atLeastOneInternal(1, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE2 = function (actionORMethodDef) {\n this.atLeastOneInternal(2, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE3 = function (actionORMethodDef) {\n this.atLeastOneInternal(3, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE4 = function (actionORMethodDef) {\n this.atLeastOneInternal(4, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE5 = function (actionORMethodDef) {\n this.atLeastOneInternal(5, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE6 = function (actionORMethodDef) {\n this.atLeastOneInternal(6, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE7 = function (actionORMethodDef) {\n this.atLeastOneInternal(7, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE8 = function (actionORMethodDef) {\n this.atLeastOneInternal(8, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE9 = function (actionORMethodDef) {\n this.atLeastOneInternal(9, actionORMethodDef);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP = function (options) {\n this.atLeastOneSepFirstInternal(0, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP1 = function (options) {\n this.atLeastOneSepFirstInternal(1, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP2 = function (options) {\n this.atLeastOneSepFirstInternal(2, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP3 = function (options) {\n this.atLeastOneSepFirstInternal(3, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP4 = function (options) {\n this.atLeastOneSepFirstInternal(4, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP5 = function (options) {\n this.atLeastOneSepFirstInternal(5, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP6 = function (options) {\n this.atLeastOneSepFirstInternal(6, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP7 = function (options) {\n this.atLeastOneSepFirstInternal(7, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP8 = function (options) {\n this.atLeastOneSepFirstInternal(8, options);\n };\n RecognizerApi.prototype.AT_LEAST_ONE_SEP9 = function (options) {\n this.atLeastOneSepFirstInternal(9, options);\n };\n RecognizerApi.prototype.RULE = function (name, implementation, config) {\n if (config === void 0) { config = DEFAULT_RULE_CONFIG; }\n if (contains(this.definedRulesNames, name)) {\n var errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({\n topLevelRule: name,\n grammarName: this.className\n });\n var error = {\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: name\n };\n this.definitionErrors.push(error);\n }\n this.definedRulesNames.push(name);\n var ruleImplementation = this.defineRule(name, implementation, config);\n this[name] = ruleImplementation;\n return ruleImplementation;\n };\n RecognizerApi.prototype.OVERRIDE_RULE = function (name, impl, config) {\n if (config === void 0) { config = DEFAULT_RULE_CONFIG; }\n var ruleErrors = [];\n ruleErrors = ruleErrors.concat(validateRuleIsOverridden(name, this.definedRulesNames, this.className));\n this.definitionErrors.push.apply(this.definitionErrors, ruleErrors); // mutability for the win\n var ruleImplementation = this.defineRule(name, impl, config);\n this[name] = ruleImplementation;\n return ruleImplementation;\n };\n RecognizerApi.prototype.BACKTRACK = function (grammarRule, args) {\n return function () {\n // save org state\n this.isBackTrackingStack.push(1);\n var orgState = this.saveRecogState();\n try {\n grammarRule.apply(this, args);\n // if no exception was thrown we have succeed parsing the rule.\n return true;\n }\n catch (e) {\n if (isRecognitionException(e)) {\n return false;\n }\n else {\n throw e;\n }\n }\n finally {\n this.reloadRecogState(orgState);\n this.isBackTrackingStack.pop();\n }\n };\n };\n // GAST export APIs\n RecognizerApi.prototype.getGAstProductions = function () {\n return this.gastProductionsCache;\n };\n RecognizerApi.prototype.getSerializedGastProductions = function () {\n return serializeGrammar(values(this.gastProductionsCache));\n };\n return RecognizerApi;\n}());\nexport { RecognizerApi };\n//# sourceMappingURL=recognizer_api.js.map","import { cloneArr, cloneObj, every, flatten, has, isArray, isEmpty, isObject, reduce, uniq, values } from \"../../../utils/utils\";\nimport { AT_LEAST_ONE_IDX, AT_LEAST_ONE_SEP_IDX, BITS_FOR_METHOD_TYPE, BITS_FOR_OCCURRENCE_IDX, MANY_IDX, MANY_SEP_IDX, OPTION_IDX, OR_IDX } from \"../../grammar/keys\";\nimport { isRecognitionException, MismatchedTokenException, NotAllInputParsedException } from \"../../exceptions_public\";\nimport { PROD_TYPE } from \"../../grammar/lookahead\";\nimport { NextTerminalAfterAtLeastOneSepWalker, NextTerminalAfterAtLeastOneWalker, NextTerminalAfterManySepWalker, NextTerminalAfterManyWalker } from \"../../grammar/interpreter\";\nimport { DEFAULT_RULE_CONFIG } from \"../parser\";\nimport { IN_RULE_RECOVERY_EXCEPTION } from \"./recoverable\";\nimport { EOF } from \"../../../scan/tokens_public\";\nimport { augmentTokenTypes, isTokenType, tokenStructuredMatcher, tokenStructuredMatcherNoCategories } from \"../../../scan/tokens\";\nimport { classNameFromInstance } from \"../../../lang/lang_extensions\";\n/**\n * This trait is responsible for the runtime parsing engine\n * Used by the official API (recognizer_api.ts)\n */\nvar RecognizerEngine = /** @class */ (function () {\n function RecognizerEngine() {\n }\n RecognizerEngine.prototype.initRecognizerEngine = function (tokenVocabulary, config) {\n this.className = classNameFromInstance(this);\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.definedRulesNames = [];\n this.tokensMap = {};\n this.allRuleNames = [];\n this.isBackTrackingStack = [];\n this.RULE_STACK = [];\n this.RULE_OCCURRENCE_STACK = [];\n this.gastProductionsCache = {};\n if (has(config, \"serializedGrammar\")) {\n throw Error(\"The Parser's configuration can no longer contain a <serializedGrammar> property.\\n\" +\n \"\\tSee: https://sap.github.io/chevrotain/docs/changes/BREAKING_CHANGES.html#_6-0-0\\n\" +\n \"\\tFor Further details.\");\n }\n if (isArray(tokenVocabulary)) {\n // This only checks for Token vocabularies provided as arrays.\n // That is good enough because the main objective is to detect users of pre-V4.0 APIs\n // rather than all edge cases of empty Token vocabularies.\n if (isEmpty(tokenVocabulary)) {\n throw Error(\"A Token Vocabulary cannot be empty.\\n\" +\n \"\\tNote that the first argument for the parser constructor\\n\" +\n \"\\tis no longer a Token vector (since v4.0).\");\n }\n if (typeof tokenVocabulary[0].startOffset === \"number\") {\n throw Error(\"The Parser constructor no longer accepts a token vector as the first argument.\\n\" +\n \"\\tSee: https://sap.github.io/chevrotain/docs/changes/BREAKING_CHANGES.html#_4-0-0\\n\" +\n \"\\tFor Further details.\");\n }\n }\n if (isArray(tokenVocabulary)) {\n this.tokensMap = reduce(tokenVocabulary, function (acc, tokType) {\n acc[tokType.name] = tokType;\n return acc;\n }, {});\n }\n else if (has(tokenVocabulary, \"modes\") &&\n every(flatten(values(tokenVocabulary.modes)), isTokenType)) {\n var allTokenTypes = flatten(values(tokenVocabulary.modes));\n var uniqueTokens = uniq(allTokenTypes);\n this.tokensMap = reduce(uniqueTokens, function (acc, tokType) {\n acc[tokType.name] = tokType;\n return acc;\n }, {});\n }\n else if (isObject(tokenVocabulary)) {\n this.tokensMap = cloneObj(tokenVocabulary);\n }\n else {\n throw new Error(\"<tokensDictionary> argument must be An Array of Token constructors,\" +\n \" A dictionary of Token constructors or an IMultiModeLexerDefinition\");\n }\n // always add EOF to the tokenNames -> constructors map. it is useful to assure all the input has been\n // parsed with a clear error message (\"expecting EOF but found ...\")\n /* tslint:disable */\n this.tokensMap[\"EOF\"] = EOF;\n // TODO: This check may not be accurate for multi mode lexers\n var noTokenCategoriesUsed = every(values(tokenVocabulary), function (tokenConstructor) { return isEmpty(tokenConstructor.categoryMatches); });\n this.tokenMatcher = noTokenCategoriesUsed\n ? tokenStructuredMatcherNoCategories\n : tokenStructuredMatcher;\n // Because ES2015+ syntax should be supported for creating Token classes\n // We cannot assume that the Token classes were created using the \"extendToken\" utilities\n // Therefore we must augment the Token classes both on Lexer initialization and on Parser initialization\n augmentTokenTypes(values(this.tokensMap));\n };\n RecognizerEngine.prototype.defineRule = function (ruleName, impl, config) {\n if (this.selfAnalysisDone) {\n throw Error(\"Grammar rule <\" + ruleName + \"> may not be defined after the 'performSelfAnalysis' method has been called'\\n\" +\n \"Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.\");\n }\n var resyncEnabled = has(config, \"resyncEnabled\")\n ? config.resyncEnabled\n : DEFAULT_RULE_CONFIG.resyncEnabled;\n var recoveryValueFunc = has(config, \"recoveryValueFunc\")\n ? config.recoveryValueFunc\n : DEFAULT_RULE_CONFIG.recoveryValueFunc;\n // performance optimization: Use small integers as keys for the longer human readable \"full\" rule names.\n // this greatly improves Map access time (as much as 8% for some performance benchmarks).\n /* tslint:disable */\n var shortName = this.ruleShortNameIdx <<\n (BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX);\n /* tslint:enable */\n this.ruleShortNameIdx++;\n this.shortRuleNameToFull[shortName] = ruleName;\n this.fullRuleNameToShort[ruleName] = shortName;\n function invokeRuleWithTry(args) {\n try {\n if (this.outputCst === true) {\n impl.apply(this, args);\n var cst = this.CST_STACK[this.CST_STACK.length - 1];\n this.cstPostRule(cst);\n return cst;\n }\n else {\n return impl.apply(this, args);\n }\n }\n catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc);\n }\n finally {\n this.ruleFinallyStateUpdate();\n }\n }\n var wrappedGrammarRule;\n wrappedGrammarRule = function (idxInCallingRule, args) {\n if (idxInCallingRule === void 0) { idxInCallingRule = 0; }\n this.ruleInvocationStateUpdate(shortName, ruleName, idxInCallingRule);\n return invokeRuleWithTry.call(this, args);\n };\n var ruleNamePropName = \"ruleName\";\n wrappedGrammarRule[ruleNamePropName] = ruleName;\n wrappedGrammarRule[\"originalGrammarAction\"] = impl;\n return wrappedGrammarRule;\n };\n RecognizerEngine.prototype.invokeRuleCatch = function (e, resyncEnabledConfig, recoveryValueFunc) {\n var 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 var reSyncEnabled = resyncEnabledConfig &&\n !this.isBackTracking() &&\n this.recoveryEnabled;\n if (isRecognitionException(e)) {\n var recogError = e;\n if (reSyncEnabled) {\n var reSyncTokType = this.findReSyncTokenType();\n if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {\n recogError.resyncedTokens = this.reSyncTo(reSyncTokType);\n if (this.outputCst) {\n var partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];\n partialCstResult.recoveredNode = true;\n return partialCstResult;\n }\n else {\n return recoveryValueFunc();\n }\n }\n else {\n if (this.outputCst) {\n var partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];\n partialCstResult.recoveredNode = true;\n recogError.partialCstResult = partialCstResult;\n }\n // to be handled Further up the call stack\n throw recogError;\n }\n }\n else if (isFirstInvokedRule) {\n // otherwise a Redundant input error will be created as well and we cannot guarantee that this is indeed the case\n this.moveToTerminatedState();\n // the parser should never throw one of its own errors outside its flow.\n // even if error recovery is disabled\n return recoveryValueFunc();\n }\n else {\n // to be recovered Further up the call stack\n throw recogError;\n }\n }\n else {\n // some other Error type which we don't know how to handle (for example a built in JavaScript Error)\n throw e;\n }\n };\n // Implementation of parsing DSL\n RecognizerEngine.prototype.optionInternal = function (actionORMethodDef, occurrence) {\n var key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence);\n var nestedName = this.nestedRuleBeforeClause(actionORMethodDef, key);\n try {\n return this.optionInternalLogic(actionORMethodDef, occurrence, key);\n }\n finally {\n if (nestedName !== undefined) {\n this.nestedRuleFinallyClause(key, nestedName);\n }\n }\n };\n RecognizerEngine.prototype.optionInternalNoCst = function (actionORMethodDef, occurrence) {\n var key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence);\n return this.optionInternalLogic(actionORMethodDef, occurrence, key);\n };\n RecognizerEngine.prototype.optionInternalLogic = function (actionORMethodDef, occurrence, key) {\n var _this = this;\n var lookAheadFunc = this.getLaFuncFromCache(key);\n var action;\n var predicate;\n if (actionORMethodDef.DEF !== undefined) {\n action = actionORMethodDef.DEF;\n predicate = actionORMethodDef.GATE;\n // predicate present\n if (predicate !== undefined) {\n var orgLookaheadFunction_1 = lookAheadFunc;\n lookAheadFunc = function () {\n return (predicate.call(_this) && orgLookaheadFunction_1.call(_this));\n };\n }\n }\n else {\n action = actionORMethodDef;\n }\n if (lookAheadFunc.call(this) === true) {\n return action.call(this);\n }\n return undefined;\n };\n RecognizerEngine.prototype.atLeastOneInternal = function (prodOccurrence, actionORMethodDef) {\n var laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence);\n var nestedName = this.nestedRuleBeforeClause(actionORMethodDef, laKey);\n try {\n return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n }\n finally {\n if (nestedName !== undefined) {\n this.nestedRuleFinallyClause(laKey, nestedName);\n }\n }\n };\n RecognizerEngine.prototype.atLeastOneInternalNoCst = function (prodOccurrence, actionORMethodDef) {\n var key = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence);\n this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, key);\n };\n RecognizerEngine.prototype.atLeastOneInternalLogic = function (prodOccurrence, actionORMethodDef, key) {\n var _this = this;\n var lookAheadFunc = this.getLaFuncFromCache(key);\n var action;\n var predicate;\n if (actionORMethodDef.DEF !== undefined) {\n action = actionORMethodDef.DEF;\n predicate = actionORMethodDef.GATE;\n // predicate present\n if (predicate !== undefined) {\n var orgLookaheadFunction_2 = lookAheadFunc;\n lookAheadFunc = function () {\n return (predicate.call(_this) && orgLookaheadFunction_2.call(_this));\n };\n }\n }\n else {\n action = actionORMethodDef;\n }\n if (lookAheadFunc.call(this) === true) {\n var notStuck = this.doSingleRepetition(action);\n while (lookAheadFunc.call(this) === true &&\n notStuck === true) {\n notStuck = this.doSingleRepetition(action);\n }\n }\n else {\n throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG);\n }\n // note that while it may seem that this can cause an error because by using a recursive call to\n // AT_LEAST_ONE we change the grammar to AT_LEAST_TWO, AT_LEAST_THREE ... , the possible recursive call\n // from the tryInRepetitionRecovery(...) will only happen IFF there really are TWO/THREE/.... items.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(this.atLeastOneInternal, [prodOccurrence, actionORMethodDef], lookAheadFunc, AT_LEAST_ONE_IDX, prodOccurrence, NextTerminalAfterAtLeastOneWalker);\n };\n RecognizerEngine.prototype.atLeastOneSepFirstInternal = function (prodOccurrence, options) {\n var laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence);\n var nestedName = this.nestedRuleBeforeClause(options, laKey);\n try {\n this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey);\n }\n finally {\n if (nestedName !== undefined) {\n this.nestedRuleFinallyClause(laKey, nestedName);\n }\n }\n };\n RecognizerEngine.prototype.atLeastOneSepFirstInternalNoCst = function (prodOccurrence, options) {\n var laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence);\n this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey);\n };\n RecognizerEngine.prototype.atLeastOneSepFirstInternalLogic = function (prodOccurrence, options, key) {\n var _this = this;\n var action = options.DEF;\n var separator = options.SEP;\n var firstIterationLookaheadFunc = this.getLaFuncFromCache(key);\n // 1st iteration\n if (firstIterationLookaheadFunc.call(this) === true) {\n ;\n action.call(this);\n // TODO: Optimization can move this function construction into \"attemptInRepetitionRecovery\"\n // because it is only needed in error recovery scenarios.\n var separatorLookAheadFunc = function () {\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 action.call(this);\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n NextTerminalAfterAtLeastOneSepWalker\n ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, NextTerminalAfterAtLeastOneSepWalker);\n }\n else {\n throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, options.ERR_MSG);\n }\n };\n RecognizerEngine.prototype.manyInternal = function (prodOccurrence, actionORMethodDef) {\n var laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence);\n var nestedName = this.nestedRuleBeforeClause(actionORMethodDef, laKey);\n try {\n return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n }\n finally {\n if (nestedName !== undefined) {\n this.nestedRuleFinallyClause(laKey, nestedName);\n }\n }\n };\n RecognizerEngine.prototype.manyInternalNoCst = function (prodOccurrence, actionORMethodDef) {\n var laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence);\n return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n };\n RecognizerEngine.prototype.manyInternalLogic = function (prodOccurrence, actionORMethodDef, key) {\n var _this = this;\n var lookaheadFunction = this.getLaFuncFromCache(key);\n var action;\n var predicate;\n if (actionORMethodDef.DEF !== undefined) {\n action = actionORMethodDef.DEF;\n predicate = actionORMethodDef.GATE;\n // predicate present\n if (predicate !== undefined) {\n var orgLookaheadFunction_3 = lookaheadFunction;\n lookaheadFunction = function () {\n return (predicate.call(_this) && orgLookaheadFunction_3.call(_this));\n };\n }\n }\n else {\n action = actionORMethodDef;\n }\n var notStuck = true;\n while (lookaheadFunction.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action);\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(this.manyInternal, [prodOccurrence, actionORMethodDef], lookaheadFunction, MANY_IDX, prodOccurrence, NextTerminalAfterManyWalker, \n // The notStuck parameter is only relevant when \"attemptInRepetitionRecovery\"\n // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]\n // An infinite loop cannot occur as:\n // - Either the lookahead is guaranteed to consume something (Single Token Separator)\n // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).\n notStuck);\n };\n RecognizerEngine.prototype.manySepFirstInternal = function (prodOccurrence, options) {\n var laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence);\n var nestedName = this.nestedRuleBeforeClause(options, laKey);\n try {\n this.manySepFirstInternalLogic(prodOccurrence, options, laKey);\n }\n finally {\n if (nestedName !== undefined) {\n this.nestedRuleFinallyClause(laKey, nestedName);\n }\n }\n };\n RecognizerEngine.prototype.manySepFirstInternalNoCst = function (prodOccurrence, options) {\n var laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence);\n this.manySepFirstInternalLogic(prodOccurrence, options, laKey);\n };\n RecognizerEngine.prototype.manySepFirstInternalLogic = function (prodOccurrence, options, key) {\n var _this = this;\n var action = options.DEF;\n var separator = options.SEP;\n var firstIterationLaFunc = this.getLaFuncFromCache(key);\n // 1st iteration\n if (firstIterationLaFunc.call(this) === true) {\n action.call(this);\n var separatorLookAheadFunc = function () {\n return _this.tokenMatcher(_this.LA(1), separator);\n };\n // 2nd..nth iterations\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator);\n // No need for checking infinite loop here due to consuming the separator.\n action.call(this);\n }\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n NextTerminalAfterManySepWalker\n ], separatorLookAheadFunc, MANY_SEP_IDX, prodOccurrence, NextTerminalAfterManySepWalker);\n }\n };\n RecognizerEngine.prototype.repetitionSepSecondInternal = function (prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) {\n while (separatorLookAheadFunc()) {\n // note that this CONSUME will never enter recovery because\n // the separatorLookAheadFunc checks that the separator really does exist.\n this.CONSUME(separator);\n action.call(this);\n }\n // we can only arrive to this function after an error\n // has occurred (hence the name 'second') so the following\n // IF will always be entered, its possible to remove it...\n // however it is kept to avoid confusion and be consistent.\n // Performance optimization: \"attemptInRepetitionRecovery\" will be defined as NOOP unless recovery is enabled\n /* istanbul ignore else */\n this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [\n prodOccurrence,\n separator,\n separatorLookAheadFunc,\n action,\n nextTerminalAfterWalker\n ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, nextTerminalAfterWalker);\n };\n RecognizerEngine.prototype.doSingleRepetition = function (action) {\n var beforeIteration = this.getLexerPosition();\n action.call(this);\n var afterIteration = this.getLexerPosition();\n // This boolean will indicate if this repetition progressed\n // or if we are \"stuck\" (potential infinite loop in the repetition).\n return afterIteration > beforeIteration;\n };\n RecognizerEngine.prototype.orInternalNoCst = function (altsOrOpts, occurrence) {\n var alts = isArray(altsOrOpts)\n ? altsOrOpts\n : altsOrOpts.DEF;\n var laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence);\n var laFunc = this.getLaFuncFromCache(laKey);\n var altIdxToTake = laFunc.call(this, alts);\n if (altIdxToTake !== undefined) {\n var chosenAlternative = alts[altIdxToTake];\n return chosenAlternative.ALT.call(this);\n }\n this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG);\n };\n RecognizerEngine.prototype.orInternal = function (altsOrOpts, occurrence) {\n var laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence);\n var nestedName = this.nestedRuleBeforeClause(altsOrOpts, laKey);\n try {\n var alts = isArray(altsOrOpts)\n ? altsOrOpts\n : altsOrOpts.DEF;\n var laFunc = this.getLaFuncFromCache(laKey);\n var altIdxToTake = laFunc.call(this, alts);\n if (altIdxToTake !== undefined) {\n var chosenAlternative = alts[altIdxToTake];\n var nestedAltBeforeClauseResult = this.nestedAltBeforeClause(chosenAlternative, occurrence, OR_IDX, altIdxToTake);\n try {\n return chosenAlternative.ALT.call(this);\n }\n finally {\n if (nestedAltBeforeClauseResult !== undefined) {\n this.nestedRuleFinallyClause(nestedAltBeforeClauseResult.shortName, nestedAltBeforeClauseResult.nestedName);\n }\n }\n }\n this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG);\n }\n finally {\n if (nestedName !== undefined) {\n this.nestedRuleFinallyClause(laKey, nestedName);\n }\n }\n };\n RecognizerEngine.prototype.ruleFinallyStateUpdate = function () {\n this.RULE_STACK.pop();\n this.RULE_OCCURRENCE_STACK.pop();\n // NOOP when cst is disabled\n this.cstFinallyStateUpdate();\n if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {\n var firstRedundantTok = this.LA(1);\n var errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({\n firstRedundant: firstRedundantTok,\n ruleName: this.getCurrRuleFullName()\n });\n this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok));\n }\n };\n RecognizerEngine.prototype.subruleInternal = function (ruleToCall, idx, options) {\n var ruleResult;\n try {\n var args = options !== undefined ? options.ARGS : undefined;\n ruleResult = ruleToCall.call(this, idx, args);\n this.cstPostNonTerminal(ruleResult, options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : ruleToCall.ruleName);\n return ruleResult;\n }\n catch (e) {\n this.subruleInternalError(e, options, ruleToCall.ruleName);\n }\n };\n RecognizerEngine.prototype.subruleInternalError = function (e, options, ruleName) {\n if (isRecognitionException(e) && e.partialCstResult !== undefined) {\n this.cstPostNonTerminal(e.partialCstResult, options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : ruleName);\n delete e.partialCstResult;\n }\n throw e;\n };\n RecognizerEngine.prototype.consumeInternal = function (tokType, idx, options) {\n var consumedToken;\n try {\n var nextToken = this.LA(1);\n if (this.tokenMatcher(nextToken, tokType) === true) {\n this.consumeToken();\n consumedToken = nextToken;\n }\n else {\n this.consumeInternalError(tokType, nextToken, options);\n }\n }\n catch (eFromConsumption) {\n consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption);\n }\n this.cstPostTerminal(options !== undefined && options.LABEL !== undefined\n ? options.LABEL\n : tokType.name, consumedToken);\n return consumedToken;\n };\n RecognizerEngine.prototype.consumeInternalError = function (tokType, nextToken, options) {\n var msg;\n var previousToken = this.LA(0);\n if (options !== undefined && options.ERR_MSG) {\n msg = options.ERR_MSG;\n }\n else {\n msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: tokType,\n actual: nextToken,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName()\n });\n }\n throw this.SAVE_ERROR(new MismatchedTokenException(msg, nextToken, previousToken));\n };\n RecognizerEngine.prototype.consumeInternalRecovery = function (tokType, idx, eFromConsumption) {\n // no recovery allowed during backtracking, otherwise backtracking may recover invalid syntax and accept it\n // but the original syntax could have been parsed successfully without any backtracking + recovery\n if (this.recoveryEnabled &&\n // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n eFromConsumption.name === \"MismatchedTokenException\" &&\n !this.isBackTracking()) {\n var follows = this.getFollowsForInRuleRecovery(tokType, idx);\n try {\n return this.tryInRuleRecovery(tokType, follows);\n }\n catch (eFromInRuleRecovery) {\n if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {\n // failed in RuleRecovery.\n // throw the original error in order to trigger reSync error recovery\n throw eFromConsumption;\n }\n else {\n throw eFromInRuleRecovery;\n }\n }\n }\n else {\n throw eFromConsumption;\n }\n };\n RecognizerEngine.prototype.saveRecogState = function () {\n // errors is a getter which will clone the errors array\n var savedErrors = this.errors;\n var savedRuleStack = cloneArr(this.RULE_STACK);\n return {\n errors: savedErrors,\n lexerState: this.exportLexerState(),\n RULE_STACK: savedRuleStack,\n CST_STACK: this.CST_STACK,\n LAST_EXPLICIT_RULE_STACK: this.LAST_EXPLICIT_RULE_STACK\n };\n };\n RecognizerEngine.prototype.reloadRecogState = function (newState) {\n this.errors = newState.errors;\n this.importLexerState(newState.lexerState);\n this.RULE_STACK = newState.RULE_STACK;\n };\n RecognizerEngine.prototype.ruleInvocationStateUpdate = function (shortName, fullName, idxInCallingRule) {\n this.RULE_OCCURRENCE_STACK.push(idxInCallingRule);\n this.RULE_STACK.push(shortName);\n // NOOP when cst is disabled\n this.cstInvocationStateUpdate(fullName, shortName);\n };\n RecognizerEngine.prototype.isBackTracking = function () {\n return this.isBackTrackingStack.length !== 0;\n };\n RecognizerEngine.prototype.getCurrRuleFullName = function () {\n var shortName = this.getLastExplicitRuleShortName();\n return this.shortRuleNameToFull[shortName];\n };\n RecognizerEngine.prototype.shortRuleNameToFullName = function (shortName) {\n return this.shortRuleNameToFull[shortName];\n };\n RecognizerEngine.prototype.isAtEndOfInput = function () {\n return this.tokenMatcher(this.LA(1), EOF);\n };\n RecognizerEngine.prototype.reset = function () {\n this.resetLexerState();\n this.isBackTrackingStack = [];\n this.errors = [];\n this.RULE_STACK = [];\n this.LAST_EXPLICIT_RULE_STACK = [];\n // TODO: extract a specific rest for TreeBuilder trait\n this.CST_STACK = [];\n this.RULE_OCCURRENCE_STACK = [];\n };\n return RecognizerEngine;\n}());\nexport { RecognizerEngine };\n//# sourceMappingURL=recognizer_engine.js.map","import { EarlyExitException, isRecognitionException, NoViableAltException } from \"../../exceptions_public\";\nimport { cloneArr, defaults } from \"../../../utils/utils\";\nimport { getLookaheadPathsForOptionalProd, getLookaheadPathsForOr } from \"../../grammar/lookahead\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\n/**\n * Trait responsible for runtime parsing errors.\n */\nvar ErrorHandler = /** @class */ (function () {\n function ErrorHandler() {\n }\n ErrorHandler.prototype.initErrorHandler = function (config) {\n this._errors = [];\n this.errorMessageProvider = defaults(config.errorMessageProvider, DEFAULT_PARSER_CONFIG.errorMessageProvider);\n };\n ErrorHandler.prototype.SAVE_ERROR = function (error) {\n if (isRecognitionException(error)) {\n error.context = {\n ruleStack: this.getHumanReadableRuleStack(),\n ruleOccurrenceStack: cloneArr(this.RULE_OCCURRENCE_STACK)\n };\n this._errors.push(error);\n return error;\n }\n else {\n throw Error(\"Trying to save an Error which is not a RecognitionException\");\n }\n };\n Object.defineProperty(ErrorHandler.prototype, \"errors\", {\n // TODO: extract these methods to ErrorHandler Trait?\n get: function () {\n return cloneArr(this._errors);\n },\n set: function (newErrors) {\n this._errors = newErrors;\n },\n enumerable: true,\n configurable: true\n });\n // TODO: consider caching the error message computed information\n ErrorHandler.prototype.raiseEarlyExitException = function (occurrence, prodType, userDefinedErrMsg) {\n var ruleName = this.getCurrRuleFullName();\n var ruleGrammar = this.getGAstProductions()[ruleName];\n var lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, this.maxLookahead);\n var insideProdPaths = lookAheadPathsPerAlternative[0];\n var actualTokens = [];\n for (var i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i));\n }\n var msg = this.errorMessageProvider.buildEarlyExitMessage({\n expectedIterationPaths: insideProdPaths,\n actual: actualTokens,\n previous: this.LA(0),\n customUserDescription: userDefinedErrMsg,\n ruleName: ruleName\n });\n throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)));\n };\n // TODO: consider caching the error message computed information\n ErrorHandler.prototype.raiseNoAltException = function (occurrence, errMsgTypes) {\n var ruleName = this.getCurrRuleFullName();\n var ruleGrammar = this.getGAstProductions()[ruleName];\n // TODO: getLookaheadPathsForOr can be slow for large enough maxLookahead and certain grammars, consider caching ?\n var lookAheadPathsPerAlternative = getLookaheadPathsForOr(occurrence, ruleGrammar, this.maxLookahead);\n var actualTokens = [];\n for (var i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i));\n }\n var previousToken = this.LA(0);\n var errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n expectedPathsPerAlt: lookAheadPathsPerAlternative,\n actual: actualTokens,\n previous: previousToken,\n customUserDescription: errMsgTypes,\n ruleName: this.getCurrRuleFullName()\n });\n throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken));\n };\n return ErrorHandler;\n}());\nexport { ErrorHandler };\n//# sourceMappingURL=error_handler.js.map","import { NextAfterTokenWalker, nextPossibleTokensAfter } from \"../../grammar/interpreter\";\nimport { first, isUndefined } from \"../../../utils/utils\";\nvar ContentAssist = /** @class */ (function () {\n function ContentAssist() {\n }\n ContentAssist.prototype.initContentAssist = function () { };\n ContentAssist.prototype.computeContentAssist = function (startRuleName, precedingInput) {\n var startRuleGast = this.gastProductionsCache[startRuleName];\n if (isUndefined(startRuleGast)) {\n throw Error(\"Rule ->\" + startRuleName + \"<- does not exist in this grammar.\");\n }\n return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead);\n };\n // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...\n // TODO: should this be more explicitly part of the public API?\n ContentAssist.prototype.getNextPossibleTokenTypes = function (grammarPath) {\n var topRuleName = first(grammarPath.ruleStack);\n var gastProductions = this.getGAstProductions();\n var topProduction = gastProductions[topRuleName];\n var nextPossibleTokenTypes = new NextAfterTokenWalker(topProduction, grammarPath).startWalking();\n return nextPossibleTokenTypes;\n };\n return ContentAssist;\n}());\nexport { ContentAssist };\n//# sourceMappingURL=context_assist.js.map","import { forEach, has, isArray, isFunction, peek, some } from \"../../../utils/utils\";\nimport { Alternation, Flat, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"../../grammar/gast/gast_public\";\nimport { Lexer } from \"../../../scan/lexer_public\";\nimport { augmentTokenTypes, hasShortKeyProperty } from \"../../../scan/tokens\";\nimport { createToken, createTokenInstance } from \"../../../scan/tokens_public\";\nimport { END_OF_FILE } from \"../parser\";\nimport { BITS_FOR_OCCURRENCE_IDX } from \"../../grammar/keys\";\nvar RECORDING_NULL_OBJECT = {\n description: \"This Object indicates the Parser is during Recording Phase\"\n};\nObject.freeze(RECORDING_NULL_OBJECT);\nvar HANDLE_SEPARATOR = true;\nvar MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1;\nvar RFT = createToken({ name: \"RECORDING_PHASE_TOKEN\", pattern: Lexer.NA });\naugmentTokenTypes([RFT]);\nvar RECORDING_PHASE_TOKEN = createTokenInstance(RFT, \"This IToken indicates the Parser is in Recording Phase\\n\\t\" +\n \"\" +\n \"See: https://sap.github.io/chevrotain/docs/guide/internals.html#grammar-recording for details\", \n// Using \"-1\" instead of NaN (as in EOF) because an actual number is less likely to\n// cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.\n-1, -1, -1, -1, -1, -1);\nObject.freeze(RECORDING_PHASE_TOKEN);\nvar RECORDING_PHASE_CSTNODE = {\n name: \"This CSTNode indicates the Parser is in Recording Phase\\n\\t\" +\n \"See: https://sap.github.io/chevrotain/docs/guide/internals.html#grammar-recording for details\",\n children: {}\n};\n/**\n * This trait handles the creation of the GAST structure for Chevrotain Grammars\n */\nvar GastRecorder = /** @class */ (function () {\n function GastRecorder() {\n }\n GastRecorder.prototype.initGastRecorder = function (config) {\n this.recordingProdStack = [];\n this.RECORDING_PHASE = false;\n };\n GastRecorder.prototype.enableRecording = function () {\n var _this = this;\n this.RECORDING_PHASE = true;\n this.TRACE_INIT(\"Enable Recording\", function () {\n var _loop_1 = function (i) {\n var idx = i > 0 ? i : \"\";\n _this[\"CONSUME\" + idx] = function (arg1, arg2) {\n return this.consumeInternalRecord(arg1, i, arg2);\n };\n _this[\"SUBRULE\" + idx] = function (arg1, arg2) {\n return this.subruleInternalRecord(arg1, i, arg2);\n };\n _this[\"OPTION\" + idx] = function (arg1) {\n return this.optionInternalRecord(arg1, i);\n };\n _this[\"OR\" + idx] = function (arg1) {\n return this.orInternalRecord(arg1, i);\n };\n _this[\"MANY\" + idx] = function (arg1) {\n this.manyInternalRecord(i, arg1);\n };\n _this[\"MANY_SEP\" + idx] = function (arg1) {\n this.manySepFirstInternalRecord(i, arg1);\n };\n _this[\"AT_LEAST_ONE\" + idx] = function (arg1) {\n this.atLeastOneInternalRecord(i, arg1);\n };\n _this[\"AT_LEAST_ONE_SEP\" + idx] = function (arg1) {\n this.atLeastOneSepFirstInternalRecord(i, arg1);\n };\n };\n /**\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 (var i = 0; i < 10; i++) {\n _loop_1(i);\n }\n // DSL methods with the idx(suffix) as an argument\n _this[\"consume\"] = function (idx, arg1, arg2) {\n return this.consumeInternalRecord(arg1, idx, arg2);\n };\n _this[\"subrule\"] = function (idx, arg1, arg2) {\n return this.subruleInternalRecord(arg1, idx, arg2);\n };\n _this[\"option\"] = function (idx, arg1) {\n return this.optionInternalRecord(arg1, idx);\n };\n _this[\"or\"] = function (idx, arg1) {\n return this.orInternalRecord(arg1, idx);\n };\n _this[\"many\"] = function (idx, arg1) {\n this.manyInternalRecord(idx, arg1);\n };\n _this[\"atLeastOne\"] = function (idx, arg1) {\n this.atLeastOneInternalRecord(idx, arg1);\n };\n _this.ACTION = _this.ACTION_RECORD;\n _this.BACKTRACK = _this.BACKTRACK_RECORD;\n _this.LA = _this.LA_RECORD;\n });\n };\n GastRecorder.prototype.disableRecording = function () {\n var _this = this;\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\", function () {\n for (var i = 0; i < 10; i++) {\n var idx = i > 0 ? i : \"\";\n delete _this[\"CONSUME\" + idx];\n delete _this[\"SUBRULE\" + idx];\n delete _this[\"OPTION\" + idx];\n delete _this[\"OR\" + idx];\n delete _this[\"MANY\" + idx];\n delete _this[\"MANY_SEP\" + idx];\n delete _this[\"AT_LEAST_ONE\" + idx];\n delete _this[\"AT_LEAST_ONE_SEP\" + idx];\n }\n delete _this[\"consume\"];\n delete _this[\"subrule\"];\n delete _this[\"option\"];\n delete _this[\"or\"];\n delete _this[\"many\"];\n delete _this[\"atLeastOne\"];\n delete _this.ACTION;\n delete _this.BACKTRACK;\n delete _this.LA;\n });\n };\n // TODO: is there any way to use this method to check no\n // Parser methods are called inside an ACTION?\n // Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?\n GastRecorder.prototype.ACTION_RECORD = function (impl) {\n // NO-OP during recording\n return;\n };\n // Executing backtracking logic will break our recording logic assumptions\n GastRecorder.prototype.BACKTRACK_RECORD = function (grammarRule, args) {\n return function () { return true; };\n };\n // LA is part of the official API and may be used for custom lookahead logic\n // by end users who may forget to wrap it in ACTION or inside a GATE\n GastRecorder.prototype.LA_RECORD = function (howMuch) {\n // We cannot use the RECORD_PHASE_TOKEN here because someone may depend\n // On LA return EOF at the end of the input so an infinite loop may occur.\n return END_OF_FILE;\n };\n GastRecorder.prototype.topLevelRuleRecord = function (name, def) {\n try {\n var newTopLevelRule = new Rule({ definition: [], name: name });\n newTopLevelRule.name = name;\n this.recordingProdStack.push(newTopLevelRule);\n def.call(this);\n this.recordingProdStack.pop();\n return newTopLevelRule;\n }\n catch (originalError) {\n if (originalError.KNOWN_RECORDER_ERROR !== true) {\n try {\n originalError.message =\n originalError.message +\n '\\n\\t This error was thrown during the \"grammar recording phase\" For more info see:\\n\\t' +\n \"https://sap.github.io/chevrotain/docs/guide/internals.html#grammar-recording\";\n }\n catch (mutabilityError) {\n // We may not be able to modify the original error object\n throw originalError;\n }\n }\n throw originalError;\n }\n };\n // Implementation of parsing DSL\n GastRecorder.prototype.optionInternalRecord = function (actionORMethodDef, occurrence) {\n return recordProd.call(this, Option, actionORMethodDef, occurrence);\n };\n GastRecorder.prototype.atLeastOneInternalRecord = function (occurrence, actionORMethodDef) {\n recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence);\n };\n GastRecorder.prototype.atLeastOneSepFirstInternalRecord = function (occurrence, options) {\n recordProd.call(this, RepetitionMandatoryWithSeparator, options, occurrence, HANDLE_SEPARATOR);\n };\n GastRecorder.prototype.manyInternalRecord = function (occurrence, actionORMethodDef) {\n recordProd.call(this, Repetition, actionORMethodDef, occurrence);\n };\n GastRecorder.prototype.manySepFirstInternalRecord = function (occurrence, options) {\n recordProd.call(this, RepetitionWithSeparator, options, occurrence, HANDLE_SEPARATOR);\n };\n GastRecorder.prototype.orInternalRecord = function (altsOrOpts, occurrence) {\n return recordOrProd.call(this, altsOrOpts, occurrence);\n };\n GastRecorder.prototype.subruleInternalRecord = function (ruleToCall, occurrence, options) {\n assertMethodIdxIsValid(occurrence);\n if (!ruleToCall || has(ruleToCall, \"ruleName\") === false) {\n var error = new Error(\"<SUBRULE\" + getIdxSuffix(occurrence) + \"> argument is invalid\" +\n (\" expecting a Parser method reference but got: <\" + JSON.stringify(ruleToCall) + \">\") +\n (\"\\n inside top level rule: <\" + this.recordingProdStack[0].name + \">\"));\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n var prevProd = peek(this.recordingProdStack);\n var ruleName = ruleToCall[\"ruleName\"];\n var newNoneTerminal = new NonTerminal({\n idx: occurrence,\n nonTerminalName: ruleName,\n // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created\n referencedRule: undefined\n });\n prevProd.definition.push(newNoneTerminal);\n return this.outputCst\n ? RECORDING_PHASE_CSTNODE\n : RECORDING_NULL_OBJECT;\n };\n GastRecorder.prototype.consumeInternalRecord = function (tokType, occurrence, options) {\n assertMethodIdxIsValid(occurrence);\n if (!hasShortKeyProperty(tokType)) {\n var error = new Error(\"<CONSUME\" + getIdxSuffix(occurrence) + \"> argument is invalid\" +\n (\" expecting a TokenType reference but got: <\" + JSON.stringify(tokType) + \">\") +\n (\"\\n inside top level rule: <\" + this.recordingProdStack[0].name + \">\"));\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n var prevProd = peek(this.recordingProdStack);\n var newNoneTerminal = new Terminal({\n idx: occurrence,\n terminalType: tokType\n });\n prevProd.definition.push(newNoneTerminal);\n return RECORDING_PHASE_TOKEN;\n };\n return GastRecorder;\n}());\nexport { GastRecorder };\nfunction recordProd(prodConstructor, mainProdArg, occurrence, handleSep) {\n if (handleSep === void 0) { handleSep = false; }\n assertMethodIdxIsValid(occurrence);\n var prevProd = peek(this.recordingProdStack);\n var grammarAction = isFunction(mainProdArg)\n ? mainProdArg\n : mainProdArg.DEF;\n var newProd = new prodConstructor({ definition: [], idx: occurrence });\n if (has(mainProdArg, \"NAME\")) {\n newProd.name = mainProdArg.NAME;\n }\n if (handleSep) {\n newProd.separator = mainProdArg.SEP;\n }\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;\n }\n this.recordingProdStack.push(newProd);\n grammarAction.call(this);\n prevProd.definition.push(newProd);\n this.recordingProdStack.pop();\n return RECORDING_NULL_OBJECT;\n}\nfunction recordOrProd(mainProdArg, occurrence) {\n var _this = this;\n assertMethodIdxIsValid(occurrence);\n var prevProd = peek(this.recordingProdStack);\n // Only an array of alternatives\n var hasOptions = isArray(mainProdArg) === false;\n var alts = hasOptions === false ? mainProdArg : mainProdArg.DEF;\n var newOrProd = new Alternation({\n definition: [],\n idx: occurrence,\n ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true\n });\n if (has(mainProdArg, \"NAME\")) {\n newOrProd.name = mainProdArg.NAME;\n }\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;\n }\n var hasPredicates = some(alts, function (currAlt) { return isFunction(currAlt.GATE); });\n newOrProd.hasPredicates = hasPredicates;\n prevProd.definition.push(newOrProd);\n forEach(alts, function (currAlt) {\n var currAltFlat = new Flat({ definition: [] });\n newOrProd.definition.push(currAltFlat);\n if (has(currAlt, \"NAME\")) {\n currAltFlat.name = currAlt.NAME;\n }\n if (has(currAlt, \"IGNORE_AMBIGUITIES\")) {\n currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES;\n }\n // **implicit** ignoreAmbiguities due to usage of gate\n else if (has(currAlt, \"GATE\")) {\n currAltFlat.ignoreAmbiguities = true;\n }\n _this.recordingProdStack.push(currAltFlat);\n currAlt.ALT.call(_this);\n _this.recordingProdStack.pop();\n });\n return RECORDING_NULL_OBJECT;\n}\nfunction getIdxSuffix(idx) {\n return idx === 0 ? \"\" : \"\" + idx;\n}\nfunction assertMethodIdxIsValid(idx) {\n if (idx < 0 || idx > MAX_METHOD_IDX) {\n var error = new Error(\n // The stack trace will contain all the needed details\n \"Invalid DSL Method idx value: <\" + idx + \">\\n\\t\" +\n (\"Idx value must be a none negative value smaller than \" + (MAX_METHOD_IDX +\n 1)));\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n}\n//# sourceMappingURL=gast_recorder.js.map","import { has, timer } from \"../../../utils/utils\";\nimport { DEFAULT_PARSER_CONFIG } from \"../parser\";\n/**\n * Trait responsible for runtime parsing errors.\n */\nvar PerformanceTracer = /** @class */ (function () {\n function PerformanceTracer() {\n }\n PerformanceTracer.prototype.initPerformanceTracer = function (config) {\n if (has(config, \"traceInitPerf\")) {\n var userTraceInitPerf = config.traceInitPerf;\n var traceIsNumber = typeof userTraceInitPerf === \"number\";\n this.traceInitMaxIdent = traceIsNumber\n ? userTraceInitPerf\n : Infinity;\n this.traceInitPerf = traceIsNumber\n ? userTraceInitPerf > 0\n : userTraceInitPerf;\n }\n else {\n this.traceInitMaxIdent = 0;\n this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf;\n }\n this.traceInitIndent = -1;\n };\n PerformanceTracer.prototype.TRACE_INIT = function (phaseDesc, phaseImpl) {\n // No need to optimize this using NOOP pattern because\n // It is not called in a hot spot...\n if (this.traceInitPerf === true) {\n this.traceInitIndent++;\n var indent = new Array(this.traceInitIndent + 1).join(\"\\t\");\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(indent + \"--> <\" + phaseDesc + \">\");\n }\n var _a = timer(phaseImpl), time = _a.time, value = _a.value;\n /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */\n var traceMethod = time > 10 ? console.warn : console.log;\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(indent + \"<-- <\" + phaseDesc + \"> time: \" + time + \"ms\");\n }\n this.traceInitIndent--;\n return value;\n }\n else {\n return phaseImpl();\n }\n };\n return PerformanceTracer;\n}());\nexport { PerformanceTracer };\n//# sourceMappingURL=perf_tracer.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { applyMixins, cloneObj, forEach, has, isEmpty, map, PRINT_WARNING, toFastProperties, values } from \"../../utils/utils\";\nimport { computeAllProdsFollows } from \"../grammar/follow\";\nimport { createTokenInstance, EOF } from \"../../scan/tokens_public\";\nimport { expandAllNestedRuleNames } from \"../cst/cst\";\nimport { defaultGrammarValidatorErrorProvider, defaultParserErrorProvider } from \"../errors_public\";\nimport { resolveGrammar, validateGrammar } from \"../grammar/gast/gast_resolver_public\";\nimport { Recoverable } from \"./traits/recoverable\";\nimport { LooksAhead } from \"./traits/looksahead\";\nimport { TreeBuilder } from \"./traits/tree_builder\";\nimport { LexerAdapter } from \"./traits/lexer_adapter\";\nimport { RecognizerApi } from \"./traits/recognizer_api\";\nimport { RecognizerEngine } from \"./traits/recognizer_engine\";\nimport { ErrorHandler } from \"./traits/error_handler\";\nimport { ContentAssist } from \"./traits/context_assist\";\nimport { GastRecorder } from \"./traits/gast_recorder\";\nimport { PerformanceTracer } from \"./traits/perf_tracer\";\nexport var END_OF_FILE = createTokenInstance(EOF, \"\", NaN, NaN, NaN, NaN, NaN, NaN);\nObject.freeze(END_OF_FILE);\nexport var DEFAULT_PARSER_CONFIG = Object.freeze({\n recoveryEnabled: false,\n maxLookahead: 4,\n ignoredIssues: {},\n dynamicTokensEnabled: false,\n outputCst: true,\n errorMessageProvider: defaultParserErrorProvider,\n nodeLocationTracking: \"none\",\n traceInitPerf: false,\n skipValidations: false\n});\nexport var DEFAULT_RULE_CONFIG = Object.freeze({\n recoveryValueFunc: function () { return undefined; },\n resyncEnabled: true\n});\nexport var ParserDefinitionErrorType;\n(function (ParserDefinitionErrorType) {\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_RULE_NAME\"] = 0] = \"INVALID_RULE_NAME\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"DUPLICATE_RULE_NAME\"] = 1] = \"DUPLICATE_RULE_NAME\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_RULE_OVERRIDE\"] = 2] = \"INVALID_RULE_OVERRIDE\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"DUPLICATE_PRODUCTIONS\"] = 3] = \"DUPLICATE_PRODUCTIONS\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"UNRESOLVED_SUBRULE_REF\"] = 4] = \"UNRESOLVED_SUBRULE_REF\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"LEFT_RECURSION\"] = 5] = \"LEFT_RECURSION\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"NONE_LAST_EMPTY_ALT\"] = 6] = \"NONE_LAST_EMPTY_ALT\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"AMBIGUOUS_ALTS\"] = 7] = \"AMBIGUOUS_ALTS\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"CONFLICT_TOKENS_RULES_NAMESPACE\"] = 8] = \"CONFLICT_TOKENS_RULES_NAMESPACE\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_TOKEN_NAME\"] = 9] = \"INVALID_TOKEN_NAME\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"INVALID_NESTED_RULE_NAME\"] = 10] = \"INVALID_NESTED_RULE_NAME\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"DUPLICATE_NESTED_NAME\"] = 11] = \"DUPLICATE_NESTED_NAME\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"NO_NON_EMPTY_LOOKAHEAD\"] = 12] = \"NO_NON_EMPTY_LOOKAHEAD\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"AMBIGUOUS_PREFIX_ALTS\"] = 13] = \"AMBIGUOUS_PREFIX_ALTS\";\n ParserDefinitionErrorType[ParserDefinitionErrorType[\"TOO_MANY_ALTS\"] = 14] = \"TOO_MANY_ALTS\";\n})(ParserDefinitionErrorType || (ParserDefinitionErrorType = {}));\nexport function EMPTY_ALT(value) {\n if (value === void 0) { value = undefined; }\n return function () {\n return value;\n };\n}\nvar Parser = /** @class */ (function () {\n function Parser(tokenVocabulary, config) {\n if (config === void 0) { config = DEFAULT_PARSER_CONFIG; }\n this.ignoredIssues = DEFAULT_PARSER_CONFIG.ignoredIssues;\n this.definitionErrors = [];\n this.selfAnalysisDone = false;\n var that = this;\n that.initErrorHandler(config);\n that.initLexerAdapter();\n that.initLooksAhead(config);\n that.initRecognizerEngine(tokenVocabulary, config);\n that.initRecoverable(config);\n that.initTreeBuilder(config);\n that.initContentAssist();\n that.initGastRecorder(config);\n that.initPerformanceTracer(config);\n /* istanbul ignore if - complete over-kill to test this, we should only add a test when we actually hard deprecate it and throw an error... */\n if (has(config, \"ignoredIssues\") &&\n config.ignoredIssues !== DEFAULT_PARSER_CONFIG.ignoredIssues) {\n PRINT_WARNING(\"The <ignoredIssues> IParserConfig property is soft-deprecated and will be removed in future versions.\\n\\t\" +\n \"Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\");\n }\n this.ignoredIssues = has(config, \"ignoredIssues\")\n ? config.ignoredIssues\n : DEFAULT_PARSER_CONFIG.ignoredIssues;\n this.skipValidations = has(config, \"skipValidations\")\n ? config.skipValidations\n : DEFAULT_PARSER_CONFIG.skipValidations;\n }\n /**\n * @deprecated use the **instance** method with the same name instead\n */\n Parser.performSelfAnalysis = function (parserInstance) {\n ;\n parserInstance.performSelfAnalysis();\n };\n Parser.prototype.performSelfAnalysis = function () {\n var _this = this;\n this.TRACE_INIT(\"performSelfAnalysis\", function () {\n var defErrorsMsgs;\n _this.selfAnalysisDone = true;\n var className = _this.className;\n _this.TRACE_INIT(\"toFastProps\", function () {\n // Without this voodoo magic the parser would be x3-x4 slower\n // It seems it is better to invoke `toFastProperties` **before**\n // Any manipulations of the `this` object done during the recording phase.\n toFastProperties(_this);\n });\n _this.TRACE_INIT(\"Grammar Recording\", function () {\n try {\n _this.enableRecording();\n // Building the GAST\n forEach(_this.definedRulesNames, function (currRuleName) {\n var wrappedRule = _this[currRuleName];\n var originalGrammarAction = wrappedRule[\"originalGrammarAction\"];\n var recordedRuleGast = undefined;\n _this.TRACE_INIT(currRuleName + \" Rule\", function () {\n recordedRuleGast = _this.topLevelRuleRecord(currRuleName, originalGrammarAction);\n });\n _this.gastProductionsCache[currRuleName] = recordedRuleGast;\n });\n }\n finally {\n _this.disableRecording();\n }\n });\n var resolverErrors = [];\n _this.TRACE_INIT(\"Grammar Resolving\", function () {\n resolverErrors = resolveGrammar({\n rules: values(_this.gastProductionsCache)\n });\n _this.definitionErrors.push.apply(_this.definitionErrors, resolverErrors); // mutability for the win?\n });\n _this.TRACE_INIT(\"Grammar Validations\", function () {\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 var validationErrors = validateGrammar({\n rules: values(_this.gastProductionsCache),\n maxLookahead: _this.maxLookahead,\n tokenTypes: values(_this.tokensMap),\n ignoredIssues: _this.ignoredIssues,\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n grammarName: className\n });\n _this.definitionErrors.push.apply(_this.definitionErrors, validationErrors); // mutability for the win?\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\", function () {\n var allFollows = computeAllProdsFollows(values(_this.gastProductionsCache));\n _this.resyncFollows = allFollows;\n });\n }\n _this.TRACE_INIT(\"ComputeLookaheadFunctions\", function () {\n _this.preComputeLookaheadFunctions(values(_this.gastProductionsCache));\n });\n }\n _this.TRACE_INIT(\"expandAllNestedRuleNames\", function () {\n // TODO: is this needed for EmbeddedActionsParser?\n var cstAnalysisResult = expandAllNestedRuleNames(values(_this.gastProductionsCache), _this.fullRuleNameToShort);\n _this.allRuleNames = cstAnalysisResult.allRuleNames;\n });\n if (!Parser.DEFER_DEFINITION_ERRORS_HANDLING &&\n !isEmpty(_this.definitionErrors)) {\n defErrorsMsgs = map(_this.definitionErrors, function (defError) { return defError.message; });\n throw new Error(\"Parser Definition Errors detected:\\n \" + defErrorsMsgs.join(\"\\n-------------------------------\\n\"));\n }\n });\n };\n // Set this flag to true if you don't want the Parser to throw error when problems in it's definition are detected.\n // (normally during the parser's constructor).\n // This is a design time flag, it will not affect the runtime error handling of the parser, just design time errors,\n // for example: duplicate rule names, referencing an unresolved subrule, ect...\n // This flag should not be enabled during normal usage, it is used in special situations, for example when\n // needing to display the parser definition errors in some GUI(online playground).\n Parser.DEFER_DEFINITION_ERRORS_HANDLING = false;\n return Parser;\n}());\nexport { Parser };\napplyMixins(Parser, [\n Recoverable,\n LooksAhead,\n TreeBuilder,\n LexerAdapter,\n RecognizerEngine,\n RecognizerApi,\n ErrorHandler,\n ContentAssist,\n GastRecorder,\n PerformanceTracer\n]);\nvar CstParser = /** @class */ (function (_super) {\n __extends(CstParser, _super);\n function CstParser(tokenVocabulary, config) {\n if (config === void 0) { config = DEFAULT_PARSER_CONFIG; }\n var _this = this;\n var configClone = cloneObj(config);\n configClone.outputCst = true;\n _this = _super.call(this, tokenVocabulary, configClone) || this;\n return _this;\n }\n return CstParser;\n}(Parser));\nexport { CstParser };\nvar EmbeddedActionsParser = /** @class */ (function (_super) {\n __extends(EmbeddedActionsParser, _super);\n function EmbeddedActionsParser(tokenVocabulary, config) {\n if (config === void 0) { config = DEFAULT_PARSER_CONFIG; }\n var _this = this;\n var configClone = cloneObj(config);\n configClone.outputCst = false;\n _this = _super.call(this, tokenVocabulary, configClone) || this;\n return _this;\n }\n return EmbeddedActionsParser;\n}(Parser));\nexport { EmbeddedActionsParser };\n//# sourceMappingURL=parser.js.map","import { VERSION } from \"../version\";\nexport function createSyntaxDiagramsCode(grammar, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.resourceBase, resourceBase = _c === void 0 ? \"https://unpkg.com/chevrotain@\" + VERSION + \"/diagrams/\" : _c, _d = _b.css, css = _d === void 0 ? \"https://unpkg.com/chevrotain@\" + VERSION + \"/diagrams/diagrams.css\" : _d;\n var header = \"\\n<!-- This is a generated file -->\\n<!DOCTYPE html>\\n<meta charset=\\\"utf-8\\\">\\n<style>\\n body {\\n background-color: hsl(30, 20%, 95%)\\n }\\n</style>\\n\\n\";\n var cssHtml = \"\\n<link rel='stylesheet' href='\" + css + \"'>\\n\";\n var scripts = \"\\n<script src='\" + resourceBase + \"vendor/railroad-diagrams.js'></script>\\n<script src='\" + resourceBase + \"src/diagrams_builder.js'></script>\\n<script src='\" + resourceBase + \"src/diagrams_behavior.js'></script>\\n<script src='\" + resourceBase + \"src/main.js'></script>\\n\";\n var diagramsDiv = \"\\n<div id=\\\"diagrams\\\" align=\\\"center\\\"></div> \\n\";\n var serializedGrammar = \"\\n<script>\\n window.serializedGrammar = \" + JSON.stringify(grammar, null, \" \") + \";\\n</script>\\n\";\n var initLogic = \"\\n<script>\\n var diagramsDiv = document.getElementById(\\\"diagrams\\\");\\n main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\\n</script>\\n\";\n return (header + cssHtml + scripts + diagramsDiv + serializedGrammar + initLogic);\n}\n//# sourceMappingURL=render_public.js.map","import { forEach, map } from \"../utils/utils\";\nimport { RepetitionMandatory, Option, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Terminal, NonTerminal, Alternation, Flat, Repetition } from \"../parse/grammar/gast/gast_public\";\n/**\n * Missing features\n * 1. Rule arguments\n * 2. Gates\n * 3. embedded actions\n */\nvar NL = \"\\n\";\nexport function genUmdModule(options) {\n return \"\\n(function (root, factory) {\\n if (typeof define === 'function' && define.amd) {\\n // AMD. Register as an anonymous module.\\n define(['chevrotain'], factory);\\n } else if (typeof module === 'object' && module.exports) {\\n // Node. Does not work with strict CommonJS, but\\n // only CommonJS-like environments that support module.exports,\\n // like Node.\\n module.exports = factory(require('chevrotain'));\\n } else {\\n // Browser globals (root is window)\\n root.returnExports = factory(root.b);\\n }\\n}(typeof self !== 'undefined' ? self : this, function (chevrotain) {\\n\\n\" + genClass(options) + \"\\n \\nreturn {\\n \" + options.name + \": \" + options.name + \" \\n}\\n}));\\n\";\n}\nexport function genWrapperFunction(options) {\n return \" \\n\" + genClass(options) + \"\\nreturn new \" + options.name + \"(tokenVocabulary, config) \\n\";\n}\nexport function genClass(options) {\n // TODO: how to pass the token vocabulary? Constructor? other?\n var result = \"\\nfunction \" + options.name + \"(tokenVocabulary, config) {\\n // invoke super constructor\\n // No support for embedded actions currently, so we can 'hardcode'\\n // The use of CstParser.\\n chevrotain.CstParser.call(this, tokenVocabulary, config)\\n\\n const $ = this\\n\\n \" + genAllRules(options.rules) + \"\\n\\n // very important to call this after all the rules have been defined.\\n // otherwise the parser may not work correctly as it will lack information\\n // derived during the self analysis phase.\\n this.performSelfAnalysis(this)\\n}\\n\\n// inheritance as implemented in javascript in the previous decade... :(\\n\" + options.name + \".prototype = Object.create(chevrotain.CstParser.prototype)\\n\" + options.name + \".prototype.constructor = \" + options.name + \" \\n \";\n return result;\n}\nexport function genAllRules(rules) {\n var rulesText = map(rules, function (currRule) {\n return genRule(currRule, 1);\n });\n return rulesText.join(\"\\n\");\n}\nexport function genRule(prod, n) {\n var result = indent(n, \"$.RULE(\\\"\" + prod.name + \"\\\", function() {\") + NL;\n result += genDefinition(prod.definition, n + 1);\n result += indent(n + 1, \"})\") + NL;\n return result;\n}\nexport function genTerminal(prod, n) {\n var name = prod.terminalType.name;\n // TODO: potential performance optimization, avoid tokenMap Dictionary access\n return indent(n, \"$.CONSUME\" + prod.idx + \"(this.tokensMap.\" + name + \")\" + NL);\n}\nexport function genNonTerminal(prod, n) {\n return indent(n, \"$.SUBRULE\" + prod.idx + \"($.\" + prod.nonTerminalName + \")\" + NL);\n}\nexport function genAlternation(prod, n) {\n var result = indent(n, \"$.OR\" + prod.idx + \"([\") + NL;\n var alts = map(prod.definition, function (altDef) { return genSingleAlt(altDef, n + 1); });\n result += alts.join(\",\" + NL);\n result += NL + indent(n, \"])\" + NL);\n return result;\n}\nexport function genSingleAlt(prod, n) {\n var result = indent(n, \"{\") + NL;\n if (prod.name) {\n result += indent(n + 1, \"NAME: \\\"\" + prod.name + \"\\\",\") + NL;\n }\n result += indent(n + 1, \"ALT: function() {\") + NL;\n result += genDefinition(prod.definition, n + 1);\n result += indent(n + 1, \"}\") + NL;\n result += indent(n, \"}\");\n return result;\n}\nfunction genProd(prod, n) {\n /* istanbul ignore else */\n if (prod instanceof NonTerminal) {\n return genNonTerminal(prod, n);\n }\n else if (prod instanceof Option) {\n return genDSLRule(\"OPTION\", prod, n);\n }\n else if (prod instanceof RepetitionMandatory) {\n return genDSLRule(\"AT_LEAST_ONE\", prod, n);\n }\n else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return genDSLRule(\"AT_LEAST_ONE_SEP\", prod, n);\n }\n else if (prod instanceof RepetitionWithSeparator) {\n return genDSLRule(\"MANY_SEP\", prod, n);\n }\n else if (prod instanceof Repetition) {\n return genDSLRule(\"MANY\", prod, n);\n }\n else if (prod instanceof Alternation) {\n return genAlternation(prod, n);\n }\n else if (prod instanceof Terminal) {\n return genTerminal(prod, n);\n }\n else if (prod instanceof Flat) {\n return genDefinition(prod.definition, n);\n }\n else {\n throw Error(\"non exhaustive match\");\n }\n}\nfunction genDSLRule(dslName, prod, n) {\n var result = indent(n, \"$.\" + (dslName + prod.idx) + \"(\");\n if (prod.name || prod.separator) {\n result += \"{\" + NL;\n if (prod.name) {\n result += indent(n + 1, \"NAME: \\\"\" + prod.name + \"\\\"\") + \",\" + NL;\n }\n if (prod.separator) {\n result +=\n indent(n + 1, \"SEP: this.tokensMap.\" + prod.separator.name) +\n \",\" +\n NL;\n }\n result += \"DEF: \" + genDefFunction(prod.definition, n + 2) + NL;\n result += indent(n, \"}\") + NL;\n }\n else {\n result += genDefFunction(prod.definition, n + 1);\n }\n result += indent(n, \")\") + NL;\n return result;\n}\nfunction genDefFunction(definition, n) {\n var def = \"function() {\" + NL;\n def += genDefinition(definition, n);\n def += indent(n, \"}\") + NL;\n return def;\n}\nfunction genDefinition(def, n) {\n var result = \"\";\n forEach(def, function (prod) {\n result += genProd(prod, n + 1);\n });\n return result;\n}\nfunction indent(howMuch, text) {\n var spaces = Array(howMuch * 4 + 1).join(\" \");\n return spaces + text;\n}\n//# sourceMappingURL=generate.js.map","import { genUmdModule, genWrapperFunction } from \"./generate\";\nexport function generateParserFactory(options) {\n var wrapperText = genWrapperFunction({\n name: options.name,\n rules: options.rules\n });\n var constructorWrapper = new Function(\"tokenVocabulary\", \"config\", \"chevrotain\", wrapperText);\n return function (config) {\n return constructorWrapper(options.tokenVocabulary, config, \n // TODO: check how the require is transpiled/webpacked\n require(\"../api\"));\n };\n}\nexport function generateParserModule(options) {\n return genUmdModule({ name: options.name, rules: options.rules });\n}\n//# sourceMappingURL=generate_public.js.map","// semantic version\nexport { VERSION } from \"./version\";\nexport { Parser, CstParser, EmbeddedActionsParser, ParserDefinitionErrorType, EMPTY_ALT } from \"./parse/parser/parser\";\nexport { Lexer, LexerDefinitionErrorType } from \"./scan/lexer_public\";\n// Tokens utilities\nexport { createToken, createTokenInstance, EOF, tokenLabel, tokenMatcher, tokenName } from \"./scan/tokens_public\";\n// Other Utilities\nexport { defaultGrammarResolverErrorProvider, defaultGrammarValidatorErrorProvider, defaultParserErrorProvider } from \"./parse/errors_public\";\nexport { EarlyExitException, isRecognitionException, MismatchedTokenException, NotAllInputParsedException, NoViableAltException } from \"./parse/exceptions_public\";\nexport { defaultLexerErrorProvider } from \"./scan/lexer_errors_public\";\n// grammar reflection API\nexport { Alternation, Flat, NonTerminal, Option, Repetition, RepetitionMandatory, RepetitionMandatoryWithSeparator, RepetitionWithSeparator, Rule, Terminal } from \"./parse/grammar/gast/gast_public\";\n// GAST Utilities\nexport { serializeGrammar, serializeProduction } from \"./parse/grammar/gast/gast_public\";\nexport { GAstVisitor } from \"./parse/grammar/gast/gast_visitor_public\";\nexport { assignOccurrenceIndices, resolveGrammar, validateGrammar } from \"./parse/grammar/gast/gast_resolver_public\";\n/* istanbul ignore next */\nexport function clearCache() {\n console.warn(\"The clearCache function was 'soft' removed from the Chevrotain API.\" +\n \"\\n\\t It performs no action other than printing this message.\" +\n \"\\n\\t Please avoid using it as it will be completely removed in the future\");\n}\nexport { createSyntaxDiagramsCode } from \"./diagrams/render_public\";\nexport { generateParserFactory, generateParserModule } from \"./generate/generate_public\";\n//# sourceMappingURL=api.js.map","/******************************************************************************\n *\n * Copyright (c) 2019, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {override_config} from \"../config\";\n\nfunction error_to_json(error) {\n const obj = {};\n if (typeof error !== \"string\") {\n Object.getOwnPropertyNames(error).forEach(key => {\n obj[key] = error[key];\n }, error);\n } else {\n obj[\"message\"] = error;\n }\n return obj;\n}\n\n/**\n * The base class for Perspective's async API. It initializes and keeps track of\n * tables, views, and processes messages from the user into Perspective.\n *\n * Child classes must implement the `post()` interface, which defines how the\n * worker sends messages.\n */\nexport class Server {\n constructor(perspective) {\n this.perspective = perspective;\n this._tables = {};\n this._views = {};\n\n this._callback_cache = new Map();\n }\n\n /**\n * `Server` must be extended and the `post` method implemented before it can\n * be initialized.\n */\n init(msg) {\n if (msg.config) {\n override_config(msg.config);\n }\n this.post(msg);\n }\n\n post() {\n throw new Error(\"post() not implemented!\");\n }\n\n /**\n * Garbage collect un-needed views.\n */\n clear_views(client_id) {\n for (let key of Object.keys(this._views)) {\n if (this._views[key].client_id === client_id) {\n try {\n this._views[key].delete();\n } catch (e) {\n console.error(e);\n }\n delete this._views[key];\n }\n }\n console.debug(`GC ${Object.keys(this._views).length} views in memory`);\n }\n\n /**\n * Given a message, execute its instructions. This method is the dispatcher\n * for all Perspective actions, including table/view creation, deletion, and\n * all method calls to/from the table and view.\n *\n * @param {*} msg an Object containing `cmd` (a String instruction) and\n * associated data for that instruction\n * @param {*} client_id\n */\n process(msg, client_id) {\n switch (msg.cmd) {\n case \"init_profile_thread\":\n this.perspective.initialize_profile_thread();\n break;\n case \"init\":\n this.init(msg);\n break;\n case \"table\":\n if (typeof msg.args[0] === \"undefined\") {\n this._tables[msg.name] = [];\n } else {\n const msgs = this._tables[msg.name];\n this._tables[msg.name] = this.perspective.table(msg.args[0], msg.options);\n if (msgs) {\n for (const msg of msgs) {\n this.process(msg);\n }\n }\n }\n break;\n case \"table_generate\":\n let g;\n eval(\"g = \" + msg.args);\n g(function(tbl) {\n this._tables[msg.name] = tbl;\n this.post({\n id: msg.id,\n data: \"created!\"\n });\n });\n break;\n case \"table_execute\":\n let f;\n eval(\"f = \" + msg.f);\n f(this._tables[msg.name]);\n break;\n case \"table_method\":\n case \"view_method\":\n this.process_method_call(msg);\n break;\n case \"view\":\n // create a new view and track it with `client_id`\n this._views[msg.view_name] = this._tables[msg.table_name].view(msg.config);\n this._views[msg.view_name].client_id = client_id;\n break;\n }\n }\n\n /**\n * Send an error to the client.\n */\n process_error(msg, error) {\n this.post({\n id: msg.id,\n error: error_to_json(error)\n });\n }\n\n /**\n * Execute a subscription to a Perspective event.\n */\n process_subscribe(msg, obj) {\n try {\n let callback;\n if (msg.method.slice(0, 2) === \"on\") {\n callback = ev => {\n let result = {\n id: msg.id,\n data: ev\n };\n try {\n // post transferable data for arrow\n if (msg.args && msg.args[0]) {\n if (msg.method === \"on_update\" && msg.args[0][\"mode\"] === \"row\") {\n // actual arrow is in the `delta`\n this.post(result, ev.delta);\n return;\n }\n }\n\n this.post(result);\n } catch (e) {\n console.error(`Removing failed callback to \\`${msg.method}()\\` (presumably due to failed connection)`);\n const remove_method = msg.method.substring(3);\n obj[`remove_${remove_method}`](callback);\n }\n };\n if (msg.callback_id) {\n this._callback_cache.set(msg.callback_id, callback);\n }\n } else if (msg.callback_id) {\n callback = this._callback_cache.get(msg.callback_id);\n this._callback_cache.delete(msg.callback_id);\n }\n if (callback) {\n obj[msg.method](callback, ...msg.args);\n } else {\n console.error(`Callback not found for remote call \"${JSON.stringify(msg)}\"`);\n }\n } catch (error) {\n this.process_error(msg, error);\n return;\n }\n }\n\n process_method_call_response(msg, result) {\n if (msg.method === \"delete\") {\n delete this._views[msg.name];\n }\n if (msg.method === \"to_arrow\") {\n this.post(\n {\n id: msg.id,\n data: result\n },\n [result]\n );\n } else {\n this.post({\n id: msg.id,\n data: result\n });\n }\n }\n\n /**\n * Given a call to a table or view method, process it.\n *\n * @param {Object} msg\n */\n process_method_call(msg) {\n let obj, result;\n msg.cmd === \"table_method\" ? (obj = this._tables[msg.name]) : (obj = this._views[msg.name]);\n\n if (!obj && msg.cmd === \"view_method\") {\n // cannot have a host without a table, but can have a host without a\n // view\n this.process_error(msg, {message: \"View is not initialized\"});\n return;\n }\n\n if (obj && obj.push) {\n obj.push(msg);\n return;\n }\n\n try {\n if (msg.subscribe) {\n this.process_subscribe(msg, obj);\n return;\n } else {\n result = obj[msg.method].apply(obj, msg.args);\n if (result instanceof Promise) {\n result.then(result => this.process_method_call_response(msg, result)).catch(error => this.process_error(msg, error));\n } else {\n this.process_method_call_response(msg, result);\n }\n }\n } catch (error) {\n this.process_error(msg, error);\n return;\n }\n }\n}\n","module.exports = function() {\n var utils = require(\"!!/Users/v625154/work/perspective/packages/perspective-webpack-plugin/src/js/utils.js\");\n var workerPath = utils.publicPath(__webpack_public_path__) + \"perspective.wasm.worker.js\";\n if (utils.isCrossOrigin(__webpack_public_path__)) {\n return new Promise(function(resolve) {\n utils.XHRWorker(workerPath, resolve);\n });\n } else {\n return new Promise(function(resolve) {\n resolve(new Worker(workerPath)); \n });\n }\n };","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"chevrotain\"), require(\"lit-html\"), require(\"core-js/modules/web.dom-collections.iterator\"), require(\"@finos/perspective/dist/esm/config\"), require(\"@finos/perspective\"), require(\"core-js/modules/es.string.replace\"), require(\"lodash/debounce\"), require(\"awesomplete\"), require(\"lodash/isEqual\"), require(\"core-js/modules/es.typed-array.uint8-array\"), require(\"core-js/modules/web.url\"), require(\"@webcomponents/webcomponentsjs\"), require(\"core-js/modules/es.array.unscopables.flat-map\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"chevrotain\", \"lit-html\", \"core-js/modules/web.dom-collections.iterator\", \"@finos/perspective/dist/esm/config\", \"@finos/perspective\", \"core-js/modules/es.string.replace\", \"lodash/debounce\", \"awesomplete\", \"lodash/isEqual\", \"core-js/modules/es.typed-array.uint8-array\", \"core-js/modules/web.url\", \"@webcomponents/webcomponentsjs\", \"core-js/modules/es.array.unscopables.flat-map\"], factory);\n\telse {\n\t\tvar a = typeof exports === 'object' ? factory(require(\"chevrotain\"), require(\"lit-html\"), require(\"core-js/modules/web.dom-collections.iterator\"), require(\"@finos/perspective/dist/esm/config\"), require(\"@finos/perspective\"), require(\"core-js/modules/es.string.replace\"), require(\"lodash/debounce\"), require(\"awesomplete\"), require(\"lodash/isEqual\"), require(\"core-js/modules/es.typed-array.uint8-array\"), require(\"core-js/modules/web.url\"), require(\"@webcomponents/webcomponentsjs\"), require(\"core-js/modules/es.array.unscopables.flat-map\")) : factory(root[\"chevrotain\"], root[\"lit-html\"], root[\"core-js/modules/web.dom-collections.iterator\"], root[\"@finos/perspective/dist/esm/config\"], root[\"@finos/perspective\"], root[\"core-js/modules/es.string.replace\"], root[\"lodash/debounce\"], root[\"awesomplete\"], root[\"lodash/isEqual\"], root[\"core-js/modules/es.typed-array.uint8-array\"], root[\"core-js/modules/web.url\"], root[\"@webcomponents/webcomponentsjs\"], root[\"core-js/modules/es.array.unscopables.flat-map\"]);\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(window, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__1__, __WEBPACK_EXTERNAL_MODULE__3__, __WEBPACK_EXTERNAL_MODULE__4__, __WEBPACK_EXTERNAL_MODULE__6__, __WEBPACK_EXTERNAL_MODULE__8__, __WEBPACK_EXTERNAL_MODULE__9__, __WEBPACK_EXTERNAL_MODULE__10__, __WEBPACK_EXTERNAL_MODULE__24__, __WEBPACK_EXTERNAL_MODULE__25__, __WEBPACK_EXTERNAL_MODULE__26__, __WEBPACK_EXTERNAL_MODULE__27__, __WEBPACK_EXTERNAL_MODULE__29__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 30);\n","module.exports = __WEBPACK_EXTERNAL_MODULE__0__;","module.exports = __WEBPACK_EXTERNAL_MODULE__1__;","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\n/**\n * Instantiate a Template DOM object from an HTML text string.\n *\n * Params\n * ------\n * template : An HTML string representing a template.\n *\n * Returns\n * -------\n * A Template DOM object.\n */\n\nexport function importTemplate(template) {\n const div = document.createElement(\"div\");\n div.innerHTML = template;\n return Array.prototype.slice.call(div.children)[0];\n}\n\nfunction setTemplateContent(template) {\n // return early in browsers that have template tag support\n if (template.content) {\n return;\n }\n template.content = document.createDocumentFragment();\n let child;\n while ((child = template.firstChild)) {\n Node.prototype.appendChild.call(template.content, child);\n }\n}\n\n/**\n * A simple tool for creating Web Components v0.\n *\n * Params\n * ------\n * template : An HTML string representing a template. Should have an 'id'\n * attribute which will become the new Web Component's tag name.\n * proto : The new Web Component's prototype object, as per spec.\n */\nexport function registerElement(templateString, styleString, proto) {\n const template = importTemplate(templateString);\n setTemplateContent(template);\n if (styleString) {\n template.innerHTML = `<style>${styleString.toString()}</style>` + template.innerHTML;\n }\n template.innerHTML = `<style id=\"psp_styles\" scope=\"${template.getAttribute(\"id\")}\">test{}</style>` + template.innerHTML;\n\n const _perspective_element = class extends proto {\n attributeChangedCallback(name, old, value) {\n if (value === null) {\n value = \"null\";\n }\n if (name[0] !== \"_\" && old != value && !!Object.getOwnPropertyDescriptor(proto.prototype, name).set) {\n this[name] = value;\n }\n }\n\n connectedCallback() {\n if (this._initialized) {\n return;\n }\n this._initializing = true;\n var node = document.importNode(template.content, true);\n this.attachShadow({mode: \"open\"});\n this.shadowRoot.appendChild(node);\n\n if (super.connectedCallback) {\n super.connectedCallback();\n }\n\n // Call all attributes bound to setters on the proto\n for (let key of Object.getOwnPropertyNames(proto.prototype)) {\n if (key !== \"connectedCallback\") {\n if (this.hasAttribute(key) && key[0] !== \"_\" && !!Object.getOwnPropertyDescriptor(proto.prototype, key).set) {\n this[key] = this.getAttribute(key);\n }\n }\n }\n this._initializing = false;\n this._initialized = true;\n }\n\n static get observedAttributes() {\n return Object.getOwnPropertyNames(proto.prototype);\n }\n };\n\n for (let key of Object.getOwnPropertyNames(proto.prototype)) {\n let descriptor = Object.getOwnPropertyDescriptor(proto.prototype, key);\n if (descriptor && descriptor.set) {\n let old = descriptor.set;\n descriptor.set = function(val) {\n if (!this.hasAttribute(key) || this.getAttribute(key) !== val) {\n this.setAttribute(key, val);\n return;\n }\n if (!this._initializing && !this._initialized) {\n return;\n }\n old.call(this, val);\n };\n Object.defineProperty(proto.prototype, key, descriptor);\n }\n }\n\n let name = template.getAttribute(\"id\");\n console.log(`Registered ${name}`);\n\n window.customElements.define(name, _perspective_element);\n}\n\nexport function bindTemplate(template, ...styleStrings) {\n const style = styleStrings.map(x => x.toString()).join(\"\\n\");\n return function(cls) {\n return registerElement(template, {toString: () => style}, cls);\n };\n}\n\n/**\n * A decorator for declaring a setter property of an HTMLElement descendent\n * class as serialized JSON. Handles converting these types before invoking\n * the underlying function/\n *\n * @param {object} _default the default value to supply the setter when\n * undefined, removed or invalid.\n */\nfunction _attribute(_default) {\n return function(cls, name, desc) {\n const old_set = desc.value;\n desc.set = function(x) {\n let attr = this.getAttribute(name);\n try {\n if (x === null || x === undefined || x === \"\") {\n x = _default();\n }\n if (typeof x !== \"string\") {\n x = JSON.stringify(x);\n }\n if (x !== attr) {\n attr = x;\n }\n attr = JSON.parse(attr);\n } catch (e) {\n console.warn(`Invalid value for attribute \"${name}\": ${x}`);\n attr = _default();\n }\n old_set.call(this, attr);\n };\n desc.get = function() {\n if (this.hasAttribute(name)) {\n return JSON.parse(this.getAttribute(name));\n } else {\n return _default();\n }\n };\n delete desc[\"value\"];\n delete desc[\"writable\"];\n return desc;\n };\n}\n\nexport function copy_to_clipboard(csv) {\n let element = document.createElement(\"textarea\");\n document.body.appendChild(element);\n element.value = csv;\n element.select();\n document.execCommand(\"copy\");\n document.body.removeChild(element);\n}\n\n/**\n * Just like `setTimeout` except it returns a promise which resolves after the\n * callback has (also resolved).\n *\n * @param {func} cb\n * @param {*} timeout\n */\nexport async function setPromise(cb = async () => {}, timeout = 0) {\n await new Promise(x => setTimeout(x, timeout));\n return await cb();\n}\n\n/**\n * Returns a promise whose resolve method can be called from elsewhere.\n */\nexport function invertPromise() {\n let resolve;\n let promise = new Promise(_resolve => {\n resolve = _resolve;\n });\n promise.resolve = resolve;\n return promise;\n}\n\nexport function throttlePromise(target, property, descriptor) {\n const lock = Symbol(\"private lock\");\n const f = descriptor.value;\n descriptor.value = async function(...args) {\n if (this[lock]) {\n await this[lock];\n if (this[lock]) {\n await this[lock];\n return;\n }\n }\n this[lock] = invertPromise();\n let result;\n try {\n result = await f.call(this, ...args);\n } catch (e) {\n console.error(e);\n } finally {\n const l = this[lock];\n this[lock] = undefined;\n l.resolve();\n return result;\n }\n };\n return descriptor;\n}\n\n/**\n * Swap 2 HTMLElements in a container.\n * @param {HTMLElement} container\n * @param {HTMLElement} elem1\n * @param {HTMLElement} elem2\n */\nexport function swap(container, ...elems) {\n if (elems[0] === elems[1]) return;\n if (elems.every(x => x.classList.contains(\"null-column\"))) return;\n let [i, j] = elems.map(x => Array.prototype.slice.call(container.children).indexOf(x));\n if (j < i) {\n [i, j] = [j, i];\n elems = elems.reverse();\n }\n container.insertBefore(elems[1], elems[0]);\n if (j + 1 === container.children.length) {\n container.appendChild(elems[0]);\n } else {\n container.insertBefore(elems[0], container.children[j + 1]);\n }\n}\n\nexport const json_attribute = _attribute(() => ({}));\nexport const array_attribute = _attribute(() => []);\n\nexport const registerPlugin = (name, plugin) => {\n if (global.registerPlugin) {\n global.registerPlugin(name, plugin);\n } else {\n global.__perspective_plugins__ = global.__perspective_plugins__ || [];\n global.__perspective_plugins__.push([name, plugin]);\n }\n};\n","module.exports = __WEBPACK_EXTERNAL_MODULE__3__;","module.exports = __WEBPACK_EXTERNAL_MODULE__4__;","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {html, render} from \"lit-html\";\n\nconst RENDERERS = {};\n\nexport const renderers = new (class {\n /**\n * Register a plugin with the <perspective-viewer> component.\n *\n * @param {string} name The logical unique name of the plugin. This will be\n * used to set the component's `view` attribute.\n * @param {object} plugin An object with this plugin's prototype.\n * Valid keys are:\n * @param {string} plugin.name The display name for this plugin.\n * @param {string} plugin.create (required) The creation function - may\n * return a `Promise`.\n * @param {string} plugin.delete The deletion function.\n * @param {string} plugin.mode The selection mode - may be \"toggle\" or\n * \"select\".\n */\n registerPlugin(name, plugin) {\n if (RENDERERS[name]) {\n throw new Error(`A perspective-viewer plugin \"${name}\" has already been registered`);\n }\n for (const id in RENDERERS) {\n const old_plugin = RENDERERS[id];\n if (old_plugin && old_plugin.name === plugin.name) {\n console.warn(`Conflicting plugin name \"${plugin.name}\", qualifying with id`);\n old_plugin.name = `${old_plugin.name} [${id}]`;\n plugin.name = `${plugin.name} [${name}]`;\n }\n }\n RENDERERS[name] = plugin;\n }\n\n getPlugin(name) {\n return RENDERERS[name];\n }\n\n getInstance() {\n return RENDERERS;\n }\n})();\n\nglobal.registerPlugin = renderers.registerPlugin;\n\nglobal.getPlugin = renderers.getPlugin;\n\nif (global.__perspective_plugins__) {\n global.__perspective_plugins__.forEach(([name, plugin]) => global.registerPlugin(name, plugin));\n}\n\nconst template = csv =>\n html`\n <pre style=\"margin:0;overflow:scroll;position:absolute;width:100%;height:100%\">${csv}</pre>\n `;\n\nexport function register_debug_plugin() {\n global.registerPlugin(\"debug\", {\n name: \"Debug\",\n create: async function(div) {\n const csv = await this._view.to_csv({config: {delimiter: \"|\"}});\n const timer = this._render_time();\n render(template(csv), div);\n timer();\n },\n selectMode: \"toggle\",\n resize: function() {},\n delete: function() {}\n });\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__6__;","/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn \"@media \" + item[2] + \"{\" + content + \"}\";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join(\"\");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === \"string\")\n\t\t\tmodules = [[null, modules, \"\"]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === \"number\")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== \"number\" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = \"(\" + item[2] + \") and (\" + mediaQuery + \")\";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || '';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap && typeof btoa === 'function') {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn '/*# sourceURL=' + cssMapping.sourceRoot + source + ' */'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n\t}\n\n\treturn [content].join('\\n');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n\t// eslint-disable-next-line no-undef\n\tvar base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n\tvar data = 'sourceMappingURL=data:application/json;charset=utf-8;base64,' + base64;\n\n\treturn '/*# ' + data + ' */';\n}\n","module.exports = __WEBPACK_EXTERNAL_MODULE__8__;","module.exports = __WEBPACK_EXTERNAL_MODULE__9__;","module.exports = __WEBPACK_EXTERNAL_MODULE__10__;","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","exports = module.exports = require(\"../css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".awesomplete [hidden] {\\n display: none;\\n}\\n\\n.awesomplete .visually-hidden {\\n position: absolute;\\n clip: rect(0, 0, 0, 0);\\n}\\n\\n.awesomplete {\\n display: inline-block;\\n position: relative;\\n}\\n\\n.awesomplete > input {\\n display: block;\\n}\\n\\n.awesomplete > ul {\\n position: absolute;\\n left: 0;\\n z-index: 1;\\n min-width: 100%;\\n box-sizing: border-box;\\n list-style: none;\\n padding: 0;\\n margin: 0;\\n background: #fff;\\n}\\n\\n.awesomplete > ul:empty {\\n display: none;\\n}\\n\\n.awesomplete > ul {\\n\\tborder-radius: .3em;\\n\\tmargin: .2em 0 0;\\n\\tbackground: hsla(0,0%,100%,.9);\\n\\tbackground: linear-gradient(to bottom right, white, hsla(0,0%,100%,.8));\\n\\tborder: 1px solid rgba(0,0,0,.3);\\n\\tbox-shadow: .05em .2em .6em rgba(0,0,0,.2);\\n\\ttext-shadow: none;\\n}\\n\\n@supports (transform: scale(0)) {\\n\\t.awesomplete > ul {\\n\\t\\ttransition: .3s cubic-bezier(.4,.2,.5,1.4);\\n\\t\\ttransform-origin: 1.43em -.43em;\\n\\t}\\n\\t\\n\\t.awesomplete > ul[hidden],\\n\\t.awesomplete > ul:empty {\\n\\t\\topacity: 0;\\n\\t\\ttransform: scale(0);\\n\\t\\tdisplay: block;\\n\\t\\ttransition-timing-function: ease;\\n\\t}\\n}\\n\\n\\t/* Pointer */\\n\\t.awesomplete > ul:before {\\n\\t\\tcontent: \\\"\\\";\\n\\t\\tposition: absolute;\\n\\t\\ttop: -.43em;\\n\\t\\tleft: 1em;\\n\\t\\twidth: 0; height: 0;\\n\\t\\tpadding: .4em;\\n\\t\\tbackground: white;\\n\\t\\tborder: inherit;\\n\\t\\tborder-right: 0;\\n\\t\\tborder-bottom: 0;\\n\\t\\t-webkit-transform: rotate(45deg);\\n\\t\\ttransform: rotate(45deg);\\n\\t}\\n\\n\\t.awesomplete > ul > li {\\n\\t\\tposition: relative;\\n\\t\\tpadding: .2em .5em;\\n\\t\\tcursor: pointer;\\n\\t}\\n\\t\\n\\t.awesomplete > ul > li:hover {\\n\\t\\tbackground: hsl(200, 40%, 80%);\\n\\t\\tcolor: black;\\n\\t}\\n\\t\\n\\t.awesomplete > ul > li[aria-selected=\\\"true\\\"] {\\n\\t\\tbackground: hsl(205, 40%, 40%);\\n\\t\\tcolor: white;\\n\\t}\\n\\t\\n\\t\\t.awesomplete mark {\\n\\t\\t\\tbackground: hsl(65, 100%, 50%);\\n\\t\\t}\\n\\t\\t\\n\\t\\t.awesomplete li:hover mark {\\n\\t\\t\\tbackground: hsl(68, 100%, 41%);\\n\\t\\t}\\n\\t\\t\\n\\t\\t.awesomplete li[aria-selected=\\\"true\\\"] mark {\\n\\t\\t\\tbackground: hsl(86, 100%, 21%);\\n\\t\\t\\tcolor: inherit;\\n\\t\\t}\\n\", \"\"]);\n\n// exports\n","module.exports = \"<!--\\r\\n \\r\\n Copyright (c) 2017, the Perspective Authors.\\r\\n \\r\\n This file is part of the Perspective library, distributed under the terms of\\r\\n the Apache License 2.0. The full license can be found in the LICENSE file.\\r\\n\\r\\n-->\\r\\n\\r\\n<template id=\\\"perspective-row\\\">\\r\\n <div id=\\\"psp_row\\\">\\r\\n <span class='is_visible'></span>\\r\\n <div draggable='true' class=\\\"row_draggable\\\">\\r\\n <span id='name' class=\\\"column_name\\\"></span>\\r\\n <div class=\\\"row_computed\\\">\\r\\n <span id=\\\"row_edit\\\"></span>\\r\\n </div>\\r\\n <span id=\\\"sort_order\\\"></span>\\r\\n <select id=\\\"column_aggregate\\\" class=\\\"string\\\"></select>\\r\\n <select id=\\\"filter_operator\\\"></select>\\r\\n <input id=\\\"filter_operand\\\" placeholder=\\\"Value\\\" />\\r\\n <span id=\\\"row_exclamation\\\" hidden>&#x26A0;</span>\\r\\n <span id='row_close'>&#x2715;</span>\\r\\n </div>\\r\\n </div>\\r\\n</template>\";","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":host{display:block;border:0 solid transparent}:host .row_computed{display:none;flex-direction:row}.dropping *{pointer-events:none}:host #psp_row{display:var(--psp_row-display,flex);margin:var(--psp_row-margin,0);overflow:visible;align-items:var(--column_selector--align-items,center);width:auto!important;height:auto!important;float:none!important}:host .is_visible{width:var(--column_selector--width,20px);min-width:var(--column_selector--width,20px);height:var(--is_visible--height,auto);cursor:var(--is_visible--cursor,pointer);font-size:var(--column_selector--font-size,14px);margin-top:-2px;display:var(--is_visible-display,none);color:var(--column-selector--color,#999);font-family:var(--column-selector--font-family,Arial)!important}:host #sort_order{display:none;font-family:var(--button--font-family,inherit);margin-right:4px;cursor:pointer;width:10px;display:var(--sort_order-display,none);padding:var(--sort_order-padding,0)}:host #sort_order:before{content:var(--row-sort-order--before, \\\"-\\\")}:host #sort_order:hover{color:var(--active--color,inherit)}:host #filter_operand{display:var(--filter_operand-display,none);margin:0;padding:0;height:19px;color:inherit;outline:0;border-color:var(--inactive--color,#ccc)}:host #filter_operator{margin:0 0 0 15px;display:var(--filter_operator-display,none);height:17px}:host #filter_operator:hover{color:var(--active--color,inherit)}@keyframes expand2{from{transform:translateX(10px)}}@keyframes expand3{from{transform:scale(.9)}}:host(:hover) .is_visible{color:var(--active--color,--column-selector--color)}:host #row_close{display:var(--row_close-display,inline);cursor:pointer;min-width:5px;max-width:5px;margin-right:3px;flex-grow:0;margin-left:3px;color:#999;font-family:Arial;font-size:10px}:host .is_visible:before{content:var(--is_visible--before,none)}:host #row_exclamation{color:red}:host #row_close:hover{color:var(--active--color,inherit)}:host .row_draggable select{border:none}:host .row_draggable select:focus{outline:0}:host select::-ms-expand{display:none}:host select{margin-left:15px;padding-right:15px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:var(--select--background,url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNC45IDEwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0LjkgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojQUFBQUFBO30KPC9zdHlsZT4KPHRpdGxlPmFycm93czwvdGl0bGU+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMS40LDQuNyAyLjUsMy4yIDMuNSw0LjcgIi8+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMy41LDUuMyAyLjUsNi44IDEuNCw1LjMgIi8+Cjwvc3ZnPg==) no-repeat 95% 50%);background-color:var(--select--background-color,#fff);color:inherit;border-radius:5px;height:24px;padding:var(--column_type--padding,0 0 0 5px);font-size:12px}:host .awesomplete>ul{border-radius:0;margin:0;border:none;transition:none!important;background:var(--plugin--background,#fff)!important}:host .awesomplete>ul:before{content:none}:host .awesomplete>input,:host input{border-color:#ccc;border-width:0 0 1px;box-sizing:border-box;background-color:transparent}:host .row_draggable{animation:var(--row_draggable--animation,expand2 .5s ease-out);cursor:move;border-style:solid;background-color:var(--row_draggable-background-color,none);overflow:var(--row_draggable-overflow,visible);border-color:var(--row_draggable-border-color,none);border-width:var(--row_draggable-border-width,0);padding:var(--row_draggable-padding,0);font-size:12px;flex-grow:1;color:inherit;transition:height .2s;box-sizing:border-box;height:var(--row_draggable-height,21px);min-height:var(--row_draggable-height,21px);display:var(--row_draggable-display,flex);align-items:var(--row-draggable--align-items);flex-direction:var(--row-draggable--flex-direction,column);justify-content:var(--row_draggable--justify-content,center);margin:var(--row_draggable--margin,0);transition:var(--row_draggable--transition,none)}:host .row_draggable *{opacity:var(--row_draggable_children-opacity,1)}:host .row_draggable select{margin:0 0 0 27px}:host ul{transition:background-color .2s,border-color .2s}:host(.null-column) .is_visible{opacity:0!important}:host(.null-column) .row_draggable{background-color:var(--null--background,transparent)!important;border-color:#ccc!important;border-width:0 0 1px!important}:host([drop-target]) .row_draggable{background-color:var(--active--background,#f0f0ff)!important;animation:var(--drop-target--animation,var(--row_draggable--animation,expand3 .5s ease-out));border:none!important}:host .float:before,:host .integer:before{content:var(--float--column-type--content, var(--column-type--content, \\\"123\\\"));color:var(--float--column-type--color,var(--column-type--color,#016bc6))}:host .string:before{content:var(--string--column-type--content, var(--column-type--content, \\\"abc\\\"));color:var(--string--column-type--color,var(--column-type--color,#fe9292))}:host .boolean:before{content:var(--boolean--column-type--content, var(--column-type--content, \\\"t/f\\\"));color:var(--boolean--column-type--color,var(--column-type--color,#999))}:host .date:before{content:var(--date--column-type--content, var(--column-type--content, \\\"mdy\\\"));color:var(--date--column-type--color,var(--column-type--color,#999))}:host .datetime:before{content:var(--datetime--column-type--content, var(--column-type--content, \\\"mdy\\\"));color:var(--datetime--column-type--color,var(--column-type--color,#999))}:host .column_name{overflow:hidden;max-width:var(--column_name-max-width,none);white-space:nowrap;text-overflow:ellipsis}:host span#name:before{font-family:var(--interface-monospace--font-family,monospace);position:relative;display:inline-block;padding:var(--column_type--padding,0 5px);min-width:18px;display:var(--name-before-display,none);width:var(--column_type--width,auto)}:host #column_aggregate{display:var(--column_aggregate-display,none);font-size:10px;font-family:Arial,sans-serif;width:88%;height:20px}:host span#name{flex:var(--column-name--flex,0 1 auto);width:100%;white-space:nowrap;margin:var(--column_name-margin,0)}\", \"\"]);\n\n// exports\n","module.exports = \"<!--\\n\\nCopyright (c) 2017, the Perspective Authors.\\n\\nThis file is part of the Perspective library, distributed under the terms of\\nthe Apache License 2.0. The full license can be found in the LICENSE file.\\n\\n-->\\n\\n<template id=\\\"perspective-autocomplete-widget\\\">\\n <div class=\\\"psp-autocomplete-widget undocked\\\">\\n <div class=\\\"psp-autocomplete-widget__list\\\" role=\\\"list\\\"></div>\\n <div class=\\\"psp-autocomplete-widget__details\\\"></div>\\n </div>\\n</template>\";","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":host{width:100%}:host div.psp-autocomplete-widget{color:var(--color,#666);font-family:var(--interface-monospace--font-family,monospace);box-sizing:border-box;display:none;z-index:100000;max-height:75px;font-size:12px;margin-top:5px;overflow-x:hidden;overflow-y:hidden;word-break:break-word}:host div.psp-autocomplete-widget.undocked{max-height:100px;min-width:150px;position:absolute;top:24px}:host div.psp-autocomplete-widget.undocked.show-details{min-width:300px}:host div.psp-autocomplete-widget.undocked.show-details div.psp-autocomplete-widget__list{border-right:none}:host div.psp-autocomplete-widget.docked{background:var(--plugin--background,none);position:static;min-width:auto;width:100%}:host div.psp-autocomplete-widget.docked div.psp-autocomplete-widget__list{background:var(--plugin--background,none);border:none}:host div.psp-autocomplete-widget.docked div.psp-autocomplete-widget__details{position:absolute;left:100%;z-index:100000;min-width:150px;max-width:200px}:host div.psp-autocomplete-widget.docked div.psp-autocomplete__item{border-bottom:1px solid #ccc}:host div.psp-autocomplete-widget div.psp-autocomplete-widget__list{border:1px solid #ccc;background:var(--plugin--background,#fff);flex:auto;min-width:40%;overflow-y:scroll}:host div.psp-autocomplete-widget div.psp-autocomplete-widget__list.small{align-self:flex-start}:host div.psp-autocomplete-widget div.psp-autocomplete-widget__details{background:var(--plugin--background,#fff);border:1px solid #ccc;display:none;flex:auto;padding:5px 5px 5px 10px;overflow-y:scroll;word-wrap:break-word}:host div.psp-autocomplete-widget div.psp-autocomplete-widget__details span{display:block}:host div.psp-autocomplete-widget div.psp-autocomplete-widget__details .psp-autocomplete-item-detail__item--label{margin-bottom:5px}:host div.psp-autocomplete-widget div.psp-autocomplete-widget__details .psp-autocomplete-item-detail__item--signature{font-size:11px;margin-bottom:5px}:host div.psp-autocomplete-widget div.psp-autocomplete-widget__details .psp-autocomplete-item-detail__item--help{font-size:10px}:host div.psp-autocomplete-widget div.psp-autocomplete__item{display:block;overflow-x:auto;padding:5px;word-break:keep-all}:host div.psp-autocomplete-widget div.psp-autocomplete__item:hover{background:var(--autocomplete-hover-background,#b7d2e0);cursor:pointer}:host div.psp-autocomplete-widget div.psp-autocomplete__item:focus,:host div.psp-autocomplete-widget div.psp-autocomplete__item[aria-selected=true]{background:var(--autocomplete-select-background,#3d6c8e);color:var(--color,#fff);cursor:pointer}:host div.psp-autocomplete-widget div.psp-autocomplete__item:focus span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name::before,:host div.psp-autocomplete-widget div.psp-autocomplete__item[aria-selected=true] span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name::before{color:var(--color,#fff)!important}:host div.psp-autocomplete-widget div.psp-autocomplete__item span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name{font-family:var(--interface--font-family,Arial,sans-serif)}:host div.psp-autocomplete-widget div.psp-autocomplete__item span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name:before{font-family:var(--interface-monospace--font-family,monospace);position:relative;display:inline-block;padding:var(--column_type--padding,0 5px);min-width:18px;width:var(--column_type--width,auto)}:host div.psp-autocomplete-widget div.psp-autocomplete__item span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name.float:before,:host div.psp-autocomplete-widget div.psp-autocomplete__item span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name.integer:before{content:var(--float--column-type--content, var(--column-type--content, \\\"123\\\"));color:var(--float--column-type--color,var(--column-type--color,#016bc6))}:host div.psp-autocomplete-widget div.psp-autocomplete__item span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name.string:before{content:var(--string--column-type--content, var(--column-type--content, \\\"abc\\\"));color:var(--string--column-type--color,var(--column-type--color,#fe9292))}:host div.psp-autocomplete-widget div.psp-autocomplete__item span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name.boolean:before{content:var(--boolean--column-type--content, var(--column-type--content, \\\"t/f\\\"));color:var(--boolean--column-type--color,var(--column-type--color,#999))}:host div.psp-autocomplete-widget div.psp-autocomplete__item span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name.date:before{content:var(--date--column-type--content, var(--column-type--content, \\\"mdy\\\"));color:var(--date--column-type--color,var(--column-type--color,#999))}:host div.psp-autocomplete-widget div.psp-autocomplete__item span.psp-autocomplete-item__label.psp-autocomplete-item__label--column-name.datetime:before{content:var(--datetime--column-type--content, var(--column-type--content, \\\"mdy\\\"));color:var(--datetime--column-type--color,var(--column-type--color,#999))}\", \"\"]);\n\n// exports\n","module.exports = \"<!--\\n\\nCopyright (c) 2017, the Perspective Authors.\\n\\nThis file is part of the Perspective library, distributed under the terms of\\nthe Apache License 2.0. The full license can be found in the LICENSE file.\\n\\n-->\\n\\n<template id=\\\"perspective-expression-editor\\\">\\n <div role=\\\"textbox\\\" contenteditable=\\\"true\\\" class=\\\"perspective-expression-editor__edit_area\\\"></div>\\n</template>\";","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":host{width:100%}:host .perspective-expression-editor__edit_area{background:var(--background-color,none);border:1px solid var(--inactive-color,#ccc);box-sizing:border-box;color:var(--color,#666);font-size:12px;display:block;font-family:var(--interface-monospace--font-family,monospace);height:75px;margin-top:5px;max-width:250px;min-height:50px;padding:5px;resize:auto;outline:0;overflow:auto;white-space:pre-wrap;width:100%}:host .perspective-expression-editor__edit_area:hover{cursor:text}:host .perspective-expression-editor__edit_area .psp-expression__column_name{font-family:var(--interface--font-family,Arial,sans-serif)}:host .perspective-expression-editor__edit_area .psp-expression__column_name:before{font-family:var(--interface-monospace--font-family,monospace);position:relative;display:inline-block;padding:var(--column_type--padding,0 5px);min-width:18px;width:var(--column_type--width,auto)}:host .perspective-expression-editor__edit_area .psp-expression__column_name.float:before,:host .perspective-expression-editor__edit_area .psp-expression__column_name.integer:before{content:var(--float--column-type--content, var(--column-type--content, \\\"123\\\"));color:var(--float--column-type--color,var(--column-type--color,#016bc6))}:host .perspective-expression-editor__edit_area .psp-expression__column_name.string:before{content:var(--string--column-type--content, var(--column-type--content, \\\"abc\\\"));color:var(--string--column-type--color,var(--column-type--color,#fe9292))}:host .perspective-expression-editor__edit_area .psp-expression__column_name.boolean:before{content:var(--boolean--column-type--content, var(--column-type--content, \\\"t/f\\\"));color:var(--boolean--column-type--color,var(--column-type--color,#999))}:host .perspective-expression-editor__edit_area .psp-expression__column_name.date:before{content:var(--date--column-type--content, var(--column-type--content, \\\"mdy\\\"));color:var(--date--column-type--color,var(--column-type--color,#999))}:host .perspective-expression-editor__edit_area .psp-expression__column_name.datetime:before{content:var(--datetime--column-type--content, var(--column-type--content, \\\"mdy\\\"));color:var(--datetime--column-type--color,var(--column-type--color,#999))}:host .perspective-expression-editor__edit_area .psp-expression__function{color:var(--expression--function-color,#e78340)}:host .perspective-expression-editor__edit_area .psp-expression__operator{color:var(--expression--operator-color,#646464)}:host .perspective-expression-editor__edit_area .psp-expression__suggestion{color:#d3d3d3;text-decoration:underline}:host .perspective-expression-editor__edit_area .psp-expression__errored{font-weight:700;color:var(--expression--error-color,#fa3333);text-decoration:underline dotted var(--expression--error-color,#fa3333)}\", \"\"]);\n\n// exports\n","module.exports = \"<!--\\n\\nCopyright (c) 2017, the Perspective Authors.\\n\\nThis file is part of the Perspective library, distributed under the terms of\\nthe Apache License 2.0. The full license can be found in the LICENSE file.\\n\\n-->\\n\\n<template id=\\\"perspective-computed-expression-widget\\\">\\n <div class=\\\"psp-computed-expression-widget__body psp-computed-expression-widget__container\\\">\\n <div class=\\\"psp-computed-expression-widget__container\\\">\\n <div class=\\\"psp-computed-expression-widget__action\\\">\\n <span class=\\\"psp-icon psp-icon__close\\\" id=\\\"psp-computed-expression-widget-close\\\" aria-label=\\\"Close Computed Expression Widget\\\"></span>\\n <span id=\\\"psp-computed-expression-widget-title\\\">New Column</span>\\n </div>\\n <div class=\\\"psp-computed-expression-widget__content psp-computed-expression-widget__content--nomargin\\\">\\n <perspective-expression-editor aria-autocomplete=\\\"list\\\" aria-label=\\\"Type a computed expression here\\\" aria-placeholder=\\\"Type a computed expression\\\" aria-haspopup=\\\"true\\\"></perspective-expression-editor>\\n <perspective-autocomplete-widget id=\\\"psp-computed-expression-widget-autocomplete\\\"></perspective-autocomplete-widget>\\n <div class=\\\"psp-computed-expression-widget__label psp-computed-expression-widget__error\\\" id=\\\"psp-computed-expression-widget-error\\\"></div>\\n </div>\\n </div>\\n <div id=\\\"psp-computed-expression-widget-actions\\\">\\n <button id=\\\"psp-computed-expression-widget-button-save\\\" class=\\\"psp-computed-expression-widget__button\\\" disabled>Save</button>\\n </div>\\n </div>\\n</template>\";","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":host{display:none;flex-direction:column;max-height:35%;margin-top:34px;margin-bottom:24px;width:100%;flex:0 0 auto!important}:host *{box-sizing:border-box}:host .psp-computed-expression-widget__body{margin-bottom:0}:host .psp-computed-expression-widget__container{display:flex;flex-direction:column}:host .psp-computed-expression-widget__container.row{align-items:center;flex-direction:row}:host .psp-computed-expression-widget__container:first-of-type{margin-bottom:0}:host .psp-computed-expression-widget__action{margin-bottom:10px}:host .psp-computed-expression-widget__action span#psp-computed-expression-widget-close{color:#999;display:flex;font-family:var(--column-close--font-family,inherit);font-size:16px;width:20px;min-width:20px;margin-top:-2px;height:0}:host .psp-computed-expression-widget__action span#psp-computed-expression-widget-close:before{font-feature-settings:\\\"liga\\\";content:var(--column-close--before, \\\"x\\\")}:host .psp-computed-expression-widget__action span#psp-computed-expression-widget-close:hover{cursor:pointer}:host .psp-computed-expression-widget__action span#psp-computed-expression-widget-title{display:flex;margin-left:34px;margin-top:3px;font-size:12px;color:var(--color,#666)}:host .psp-computed-expression-widget__content{align-items:center;display:flex;flex-direction:column;margin-top:5px}:host .psp-computed-expression-widget__content.psp-computed-expression-widget__content--absolute{position:absolute}:host .psp-computed-expression-widget__content.psp-computed-expression-widget__content--nomargin{margin-top:0;position:relative}:host #psp-computed-expression-widget-actions{display:flex;justify-content:flex-end;margin-left:20px;margin-top:12px}:host .psp-computed-expression-widget__label{color:var(--color,#a9a9a9);font-size:10px;margin-top:5px;max-width:100%}:host .psp-computed-expression-widget__label.psp-computed-expression-widget__error{background-color:#cb4549;box-sizing:border-box;color:#fff!important;display:none;position:absolute;z-index:10000;max-height:75px;padding:10px;overflow-x:hidden;overflow-y:scroll;top:100%;width:100%;word-break:break-word}:host .psp-computed-expression-widget__button{border-radius:0;border-bottom:1px solid #ccc;border-left:0;border-right:0;border-top:0;font-size:12px;margin-left:6px;padding:2px 5px}:host .psp-computed-expression-widget__button:hover{cursor:pointer}:host .psp-computed-expression-widget__button[disabled]{background:#666!important;color:#a0a0a0!important;cursor:not-allowed;border-bottom-color:#000!important;opacity:.5}:host .psp-computed-expression-widget__button#psp-computed-expression-widget-button-remove{background:#e76056;border-bottom-color:#bf4d45;color:#fff;display:none}:host .psp-computed-expression-widget__button#psp-computed-expression-widget-button-remove:active{background:#bf4d45;border-bottom-color:#9d3f39}:host .psp-computed-expression-widget__button#psp-computed-expression-widget-button-save{background:#0171d2;border-bottom-color:#0160b1;color:#fff;height:22px}:host .psp-computed-expression-widget__button#psp-computed-expression-widget-button-save:active{background:#0160b1;border-bottom-color:#014986}\", \"\"]);\n\n// exports\n","module.exports = \"<!--\\r\\n \\r\\n Copyright (c) 2017, the Perspective Authors.\\r\\n \\r\\n This file is part of the Perspective library, distributed under the terms of\\r\\n the Apache License 2.0. The full license can be found in the LICENSE file.\\r\\n\\r\\n-->\\r\\n\\r\\n<template id=\\\"perspective-viewer\\\">\\r\\n\\r\\n <div id=\\\"app\\\">\\r\\n <div id=\\\"menubar\\\">\\r\\n <div id=\\\"copy_button\\\" class=\\\"noselect button\\\" title=\\\"Copy CSV\\\"></div>\\r\\n <div id=\\\"download_button\\\" class=\\\"noselect button\\\" title=\\\"Download CSV\\\"></div>\\r\\n <div id=\\\"reset_button\\\" class=\\\"noselect button\\\" title=\\\"Reset Viewer\\\"></div>\\r\\n </div>\\r\\n <div id='side_panel' class=\\\"column fixed noselect\\\">\\r\\n <div id=\\\"vis_selector_container\\\">\\r\\n <select id=\\\"vis_selector\\\">\\r\\n </select>\\r\\n </div>\\r\\n <div id=\\\"columns_container\\\" style=\\\"visibility: hidden\\\">\\r\\n <ul id='active_columns'></ul>\\r\\n <div id=\\\"sub_columns\\\">\\r\\n <ul id='inactive_columns'></ul>\\r\\n <div id=\\\"side_panel__actions\\\" style=\\\"visibility: hidden\\\">\\r\\n <div id=\\\"add-computed-expression\\\" class=\\\"side_panel-action\\\"><span class=\\\"psp-icon psp-icon__add\\\"></span><span class=\\\"psp-title__columnName\\\">New Column</span></div>\\r\\n </div>\\r\\n </div>\\r\\n <perspective-computed-expression-widget></perspective-computed-expression-widget>\\r\\n </div>\\r\\n <div id=\\\"resize_bar\\\"></div>\\r\\n </div>\\r\\n <div class=\\\"column noselect\\\">\\r\\n <div id='top_panel'>\\r\\n <div class=\\\"rrow\\\">\\r\\n <div id=\\\"row_pivots\\\">\\r\\n <div class=\\\"psp-text-field\\\">\\r\\n <ul class=\\\"psp-text-field__input\\\" for=\\\"row-pivots\\\"></ul>\\r\\n <label for=\\\"row_pivots\\\"></label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <span id=\\\"transpose_button\\\" class=\\\"rrow centered\\\" title=\\\"Transpose Pivots\\\">&#x21C4;</span>\\r\\n <div class=\\\"rrow\\\">\\r\\n <div id=\\\"column_pivots\\\">\\r\\n <div class=\\\"psp-text-field\\\">\\r\\n <ul class=\\\"psp-text-field__input\\\" for=\\\"column-pivots\\\"></ul>\\r\\n <label for=\\\"column_pivots\\\"></label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"rrow\\\">\\r\\n <div id=\\\"sort\\\">\\r\\n <div class=\\\"psp-text-field\\\">\\r\\n <ul class=\\\"psp-text-field__input\\\" for=\\\"sort\\\"></ul>\\r\\n <label for=\\\"sort\\\"></label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <div class=\\\"rrow\\\" style='flex-grow:3;height:auto;flex:1 1 400px;max-width:none'>\\r\\n <div id=\\\"filters\\\">\\r\\n <div class=\\\"psp-text-field\\\">\\r\\n <ul class=\\\"psp-text-field__input\\\" for='filters'></ul>\\r\\n <label for=\\\"filters\\\"></label>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n <div id=\\\"pivot_chart_container\\\">\\r\\n <div class=\\\"plugin_information plugin_information--warning hidden\\\" id=\\\"plugin_information--size\\\">\\r\\n <span class=\\\"plugin_information__text\\\" id=\\\"plugin_information_count\\\">Estimated rendering</span>\\r\\n <span class=\\\"plugin_information__actions\\\">\\r\\n <span class=\\\"plugin_information__action\\\">Render all points</span>\\r\\n <span class=\\\"plugin_information__action--close\\\" id=\\\"close_button\\\"></span>\\r\\n </span>\\r\\n </div>\\r\\n <div id=\\\"pivot_chart\\\"></div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n <div id=\\\"config_button\\\" class=\\\"noselect button\\\" title=\\\"Right click for additional options\\\"></div>\\r\\n\\r\\n <div id='drop_target'>\\r\\n <div id='drop_target_inner'>\\r\\n\\r\\n </div>\\r\\n </div>\\r\\n </div>\\r\\n\\r\\n</template>\";","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \":host #app #top_panel #row_pivots label:before{content:var(--row_pivots--before, \\\"Row Pivots\\\")}:host #app #top_panel #column_pivots label:before{content:var(--column_pivots--before, \\\"Column Pivots\\\")}:host #app #top_panel #sort label:before{content:\\\"Sort\\\"}:host #app #top_panel #filters label:before{content:\\\"Filter\\\"}:host #app #side_panel #active_columns perspective-row:before{font-size:10px;margin-left:var(--column_selector--width,20px);left:1px;padding:var(--column_type--padding,0 0 0 5px);color:var(--inactive--color,#666);position:absolute;margin-top:-15px}:host:hover #config_button{opacity:1}#config_button{background:0 0;opacity:1!important}.button{padding:var(--button--padding,12px 14px 24px 8px)}[settings=true] #config_button{opacity:1!important}@keyframes expand{from{opacity:0}}:host{position:relative;display:inline-block;overflow:hidden;word-wrap:normal;--highcharts-full--gradient:linear-gradient(#4d342f 0%, #e4521b 22.5%, #feeb65 42.5%, #f0f0f0 50%, #dcedc8 57.5%, #42b3d5 67.5%, #1a237e 100%);--highcharts-positive--gradient:linear-gradient(#dcedc8 0%, #42b3d5 35%, #1a237e 100%);--highcharts-negative--gradient:linear-gradient(#feeb65 100%, #e4521b 70%, #4d342f 0%);--hypergrid-tree-header--background:#fff;--hypergrid-tree-header--color:#666;--hypergrid-header--background:#fff;--hypergrid-separator--color:#666;--hypergrid-header--color:#666;--hypergrid-positive--color:#1078d1;--hypergrid-negative--color:#ff8888;--hypergrid--font-size:12px;--hypergrid-header--font-size:12px;--hypergrid--font-family:Helvetica,Arial,sans-serif;--hypergrid-header--font-family:Helvetica,Arial,sans-serif;--hypergrid-row-hover--background:#f6f6f6;--hypergrid-row-hover--color:#666;--hypergrid-cell-hover--background:#eeeeee;--hypergrid-cell-hover--color:#666;--integer--hypergrid--text-align:right;--float--hypergrid--text-align:right;--d3fc-series:rgba(31, 119, 180, 0.5);--d3fc-series-1:#0366d6;--d3fc-series-2:#ff7f0e;--d3fc-series-3:#2ca02c;--d3fc-series-4:#d62728;--d3fc-series-5:#9467bd;--d3fc-series-6:#8c564b;--d3fc-series-7:#e377c2;--d3fc-series-8:#7f7f7f;--d3fc-series-9:#bcbd22;--d3fc-series-10:#17becf;--d3fc-full--gradient:linear-gradient(#4d342f 0%, #e4521b 22.5%, #feeb65 42.5%, #f0f0f0 50%, #dcedc8 57.5%, #42b3d5 67.5%, #1a237e 100%);--d3fc-positive--gradient:linear-gradient(#dcedc8 0%, #42b3d5 35%, #1a237e 100%);--d3fc-negative--gradient:linear-gradient(#feeb65 100%, #e4521b 70%, #4d342f 0%)}:host #pivot_chart{position:absolute;width:100%;height:100%;display:grid;justify-content:stretch}:host .hidden{display:none}:host .psp-icon{color:#999}:host .psp-icon:hover{cursor:pointer}:host .psp-icon__add{display:flex;width:20px;min-width:20px;margin-top:-2px;height:0;font-family:var(--column-add--font-family,inherit)}:host .psp-icon__add:before{font-feature-settings:\\\"liga\\\";content:var(--column-add--before, \\\"+\\\")}:host .psp-title__columnName{display:flex;margin-left:34px;margin-top:3px;font-size:12px;color:#666}:host .side_panel-action:hover{cursor:pointer}:host *{box-sizing:border-box;line-height:1.42857143}:host #app{display:flex;position:relative;width:100%;height:100%}:host #app.hide_message #drop_target{display:none}:host .chart{padding:15px}:host #pivot_chart_container{flex-grow:1;position:relative;border:var(--plugin--border,none);overflow:hidden}:host .config{display:flex}:host #column_pivots #psp_row,:host #filters #psp_row,:host #row_pivots #psp_row,:host #sort #psp_row{display:inline}:host ul{min-height:20px;padding:0;margin:0;font-size:12px}:host #active_columns perspective-row{animation:.3s ease-out expand;--column-selector--color:var(--active--color, #999);--is_visible--before:var(--active-column-selector--content, \\\"\\\\25CF\\\")}:host #inactive_columns perspective-row{animation:.3s ease-out expand;--column-selector--color:var(--inactive-column-selector--color, #999);--is_visible--before:var(--inactive-column-selector--content, \\\"\\\\25CB\\\");--row_draggable--animation:none;opacity:var(--inactive-column--opacity,1);transition:opacity .3s}:host #inactive_columns perspective-row:hover{transition:none;opacity:1}:host #top_panel perspective-row{animation:.3s ease-out expand;--column-name--flex:1;padding:0 10px 0 0;margin-bottom:-1px;display:var(--top-panel-row--display,inline-block);--psp_row-display:inline-block}:host #active_columns,:host #inactive_columns{list-style:none;padding:0;width:100%;margin:var(--column-container--margin,8px 0 0 0);overflow-y:overlay;overflow-x:hidden;position:relative}:host #inactive_columns perspective-row.active{--row_draggable--margin:0px 0px 0px 10px;opacity:0;height:0!important;overflow:hidden}:host .columns_horizontal #sub_columns.collapse #side_panel__actions{margin-top:0}:host #sub_columns{min-height:33.3%;flex-shrink:100000;display:flex;flex-direction:column;overflow-x:hidden;width:100%}:host #sub_columns.collapse{flex-shrink:0;min-height:64px}:host #sub_columns.collapse #inactive_columns{display:none}:host .column{display:flex;list-style:none;flex-direction:column;flex:1}:host .rrow{display:flex;flex-grow:1;min-height:24px;align-items:center;max-width:400px;list-style:none;min-width:140px;margin:var(--column-drop-container--margin,5px 10px 0 0)}:host .rrow>div{display:flex;min-height:24px;flex-direction:column;justify-content:flex-end}:host #top_panel>.rrow>*{width:100%;padding:12px 0;margin:-12px 0}:host .rrow #psp_row{white-space:nowrap}:host #sort perspective-row{--sort_order-display:inline;--sort_order-padding:0 0 0 4px}:host #sort perspective-row[sort-order=asc]{--row-sort-order--before:var(--sort-order-asc--before, \\\"\\\\2191\\\")}:host #sort perspective-row[sort-order=desc]{--row-sort-order--before:var(--sort-order-desc--before, \\\"\\\\2193\\\")}:host #sort perspective-row[sort-order=none]{--row-sort-order--before:var(--sort-order-none--before, \\\"-\\\")}:host #sort perspective-row[sort-order=\\\"asc abs\\\"]{--row-sort-order--before:var(--sort-order-asc-abs--before, \\\"\\\\21E7\\\")}:host #sort perspective-row[sort-order=\\\"desc abs\\\"]{--row-sort-order--before:var(--sort-order-desc-abs--before, \\\"\\\\21E9\\\")}:host #sort perspective-row[sort-order=\\\"col asc\\\"]{--row-sort-order--before:var(--sort-order-col-asc--before, \\\"\\\\2192\\\")}:host #sort perspective-row[sort-order=\\\"col desc\\\"]{--row-sort-order--before:var(--sort-order-col-desc--before, \\\"\\\\2190\\\")}:host #sort perspective-row[sort-order=\\\"col asc abs\\\"]{--row-sort-order--before:var(--sort-order-col-asc-abs--before, \\\"\\\\21E8\\\")}:host #sort perspective-row[sort-order=\\\"col desc abs\\\"]{--row-sort-order--before:var(--sort-order-col-desc-abs--before, \\\"\\\\21E6\\\")}:host #top_panel perspective-row::after{content:\\\",\\\"}:host #top_panel perspective-row:last-child::after{display:none;content:\\\"\\\"!important}:host label{white-space:nowrap;display:inline-block;vertical-align:middle;margin-bottom:0}:host #drop_target{position:absolute;left:0;top:0;right:0;bottom:0;padding:30px}:host #drop_target_inner{width:100%;height:100%;display:flex;align-items:center;justify-content:center}:host #drop_target_inner h3{font-weight:300}:host #config_button{position:absolute;top:0;left:0;opacity:0;display:flex;align-items:center;justify-content:center;transition:opacity .2s ease-out}:host #config_button:hover{color:var(--active--color,inherit)}:host .button{cursor:pointer;font-size:16px;font-weight:400}:host select::-ms-expand{display:none}:host select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background:var(--select--background,url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgNC45IDEwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0LjkgMTA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojQUFBQUFBO30KPC9zdHlsZT4KPHRpdGxlPmFycm93czwvdGl0bGU+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMS40LDQuNyAyLjUsMy4yIDMuNSw0LjcgIi8+Cjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iMy41LDUuMyAyLjUsNi44IDEuNCw1LjMgIi8+Cjwvc3ZnPg==) no-repeat 95% 50%);background-color:#fff;color:inherit;border-radius:5px;height:24px;padding:var(--select--padding,0 0 0 6px);font-size:12px;font-family:inherit}:host input{padding:0 10px}:host .centered{display:flex;align-items:center;justify-content:center}:host #top_panel{display:flex;flex-wrap:wrap;justify-content:flex-start;padding:var(--top_panel--padding,5px 0 10px 0);max-width:1000px;z-index:1}:host #side_panel{position:relative;flex:0 0 auto;padding:var(--side_panel--padding,10px 10px 0 11px)}:host #side_panel>div{display:flex}:host #vis_selector_container{min-height:29px;margin-left:var(--column_selector--width,20px);overflow:hidden}:host #vis_selector{flex-grow:1}:host #transpose_button{cursor:pointer;min-width:5px;max-width:5px;flex-grow:0;color:#999;font-family:Arial;font-size:12px}:host #transpose_button:hover{color:var(--active--color,inherit)}:host #resize_bar{position:absolute;top:0;right:0;bottom:0;width:8px;cursor:col-resize}:host ::-webkit-scrollbar{width:8px;height:8px}:host :hover::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.3)}:host ::-webkit-scrollbar-thumb{border-radius:4px;background-color:rgba(0,0,0,0)}:host ::-webkit-scrollbar-corner{background-color:rgba(0,0,0,0)}\", \"\"]);\n\n// exports\n","exports = module.exports = require(\"../../../../node_modules/css-loader/lib/css-base.js\")(false);\n// imports\n\n\n// module\nexports.push([module.id, \".psp-text-field{position:relative;background-color:var(--column-drop-container--background,#fff);border-width:0 0 1px;border-style:solid;border-color:var(--inactive--color,#ccc);display:flex;flex-direction:column;justify-content:flex-end;min-height:24px;transition:border-color .3s ease-out}:host(.dragging) .psp-text-field.dropping{border-bottom-width:2px;border-style:solid;border-color:var(--active--color,#1a7da1)}:host(.dragging) .psp-text-field{border-bottom-width:1px;border-style:solid;border-color:var(--active--color,#1a7da1)}.psp-text-field>.psp-text-field__input{border:0;line-height:20px;vertical-align:bottom;padding-bottom:0;display:none}.psp-text-field__input+label{height:var(--column--height,auto);line-height:17px;box-sizing:border-box;color:var(--inactive--color,#ccc);font-weight:400;white-space:nowrap;padding:var(--column-drop-container--padding,0 0 2px 10px);font-size:12px;display:inline-block;transition:font-size .3s,margin .3s}.dropping .psp-text-field__input,.psp-text-field__input:not(:empty){display:block!important}.dropping .psp-text-field__input::after{content:\\\"|\\\";width:0;overflow:visible;margin-top:-1px;position:absolute}.dropping *{pointer-events:none}.dropping .psp-text-field label,.psp-text-field__input:not(:empty)+label{position:absolute;top:0;margin:var(--column-drop-label--margin,0);font-size:var(--column-drop-label--font-size,12px);display:var(--column-drop-label--display,none)}.dropping perspective-row.inserting{border-top:25px solid transparent}.dropping perspective-row.postserting{border-bottom:25px solid transparent}:host perspective-row{height:var(--column--height,21px);--row_draggable-height:var(--column--height, 21px)}:host([row-pivots]) #active_columns perspective-row{height:var(--active-column--height,41px);min-height:var(--active-column--height,41px);--row_draggable-height:var(--active-column--height, 41px);--column_aggregate-display:inline-block;--is_visible--height:var(--active-column-selector--height, auto)}:host{font-family:Arial,sans-serif;background-color:#eee;color:#333}:host #app.columns_horizontal #columns_container{flex-direction:row-reverse}:host #app.columns_horizontal #active_columns,:host #app.columns_horizontal #inactive_columns{display:flex;flex-direction:column;flex:0 1 auto;width:100%}:host #app.columns_horizontal #inactive_columns{flex:1 1 auto}:host #app.columns_horizontal #sub_columns{flex-shrink:1}:host #app.columns_horizontal #sub_columns perspective-row{--column_name-margin:0 25px 0 0}:host #app.columns_horizontal #side_panel #divider{display:none}:host #app.columns_horizontal perspective-computed-expression-widget{max-height:none;margin-right:24px;width:auto}:host #side_panel perspective-row{--name-before-display:inline-block;--is_visible-display:inline-block;--row_draggable-padding:0px 10px 0px 0px;--row_close-display:none;--column_name-max-width:180px}:host #top_panel perspective-row{--row_draggable-display:inline-flex;--row-draggable--flex-direction:row;--row-draggable--align-items:center}:host #columns_container{flex-direction:column;height:calc(100% - 29px)}:host #columns_container #active_columns{flex:0 1 auto}:host #columns_container #active_columns perspective-row{margin-bottom:2px;--row_draggable-background-color:var(--column--background, white);--row_draggable-border-color:var(--inactive--color, #ccc);--row_draggable-border-width:0 0 1px 0;--row_draggable-overflow:hidden;--row_draggable--justify-content:space-evenly}:host #columns_container #active_columns perspective-row:last-child{--row_draggable-border-width:var(--row_draggable-border-last-child-width, 0 0 1px 0)}:host #columns_container #active_columns perspective-row[drop-target]{--row_draggable_children-opacity:0}:host #columns_container #active_columns perspective-row.null-column{--row_draggable_children-opacity:0;pointer-events:none}:host #columns_container #active_columns.one_lock perspective-row:first-child,:host #columns_container #active_columns.two_lock perspective-row:first-child{--active--color:#ccc;--is_visible--cursor:normal}:host #columns_container #active_columns.two_lock perspective-row:nth-child(2){--active--color:#ccc;--is_visible--cursor:normal}:host #columns_container #active_columns perspective-row:only-child{--active--color:#ccc;--is_visible--cursor:normal}:host #columns_container #active_columns,:host #columns_container #inactive_columns{border:none!important}:host ul{transition:background-color .2s,border-color .2s;outline:0;border-style:solid;border-color:var(--inactive--color,#ccc);font-size:12px;padding:var(--column-drop-container--padding,0 10px 0 10px);border-width:0 0 1px}:host #side_panel #side_panel__actions{display:flex;flex-direction:column;flex-shrink:1000;justify-content:flex-start;position:relative;overflow-y:hidden;width:100%;padding-top:20px;margin:var(--column-container--margin,8px);min-height:36px}:host #side_panel #side_panel__actions button.side_panel-action{align-items:center;align-content:center;background:0 0;border:none;display:flex;flex-direction:row;font-size:12px;padding-right:10px;-webkit-appearance:none;-moz-appearance:none;appearance:none}:host #side_panel #side_panel__actions button.side_panel-action span{margin-left:5px;font-size:15px}:host #side_panel #side_panel__actions button.side_panel-action:hover{cursor:pointer}:host .noselect{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}:host svg .highcharts-legend-box{fill:none}:host #pivot_chart{background-color:var(--plugin--background,#fff)}:host #drop_target{border:var(--plugin--border,none);background:var(--plugin--background,#fff)}:host #pivot_chart_container{box-shadow:var(--plugin--box-shadow,none)}:host #filters perspective-row{margin:0;--filter_operator-display:inline-block;--filter_operand-display:inline-block}:host .plugin_information{color:var(--warning--color,inherit);display:flex;position:absolute;flex-direction:row;justify-content:flex-start;padding:.5rem;width:100%;z-index:10000;transition:opacity .3s ease-out;opacity:1}:host .plugin_information.hidden{display:none;opacity:0}:host .plugin_information.plugin_information--warning{background:#ffca28}:host .plugin_information .plugin_information__text{font-size:12px;margin-right:.25rem;display:flex;flex-wrap:wrap;align-items:center}:host .plugin_information .plugin_information__text:before{content:var(--overflow_hint--before);font-family:var(--overflow_hint--font-family);color:var(--overflow_hint--color);padding:var(--overflow_hint--padding);font-size:16px}:host .plugin_information .plugin_information__action{font-size:12px;text-decoration:underline;cursor:pointer;margin-right:.25rem}:host .plugin_information .plugin_information__action--close{margin-left:12px;display:inline-flex;font-size:12px;cursor:pointer}:host .plugin_information .plugin_information__actions{margin-left:auto;display:flex;align-items:center;flex-direction:row;justify-content:flex-start}:host .plugin_information .plugin_information--overflow-hint-percent{font-weight:700}:host .plugin_information .plugin_information--overflow-hint{white-space:nowrap}:host #drop_target_inner h3{color:#aaa;font-weight:300}:host #config_button,:host #copy_button,:host #download_button,:host #reset_button{font-weight:400;font-family:var(--button--font-family,Arial);color:var(--inactive--color,#999);font-size:var(--button--font-size,16px);transition:opacity .3s;overflow:hidden}:host #config_button:hover,:host #copy_button:hover,:host #download_button:hover,:host #reset_button:hover{color:var(--active--color,inherit)}:host #config_button:before{font-feature-settings:\\\"liga\\\";content:var(--settings-button--content, \\\"\\\\1F527\\\")}:host #reset_button:before{font-feature-settings:\\\"liga\\\";content:var(--reset_button--before, \\\"Reset\\\")}:host #close_button:before{font-family:var(--button--font-family,Arial);font-feature-settings:\\\"liga\\\";content:var(--close_button--before, \\\"Close\\\")}:host #download_button:before{font-feature-settings:\\\"liga\\\";content:var(--download_button--before, \\\"Save\\\")}:host #copy_button:before{font-feature-settings:\\\"liga\\\";content:var(--copy_button--before, \\\"Copy\\\")}:host #menubar{display:none;flex-direction:column;padding-top:55px}:host #app.show_menu #menubar{display:flex}:host select{border-radius:0;background-color:var(--select--background-color,#fff);border-style:solid;border-color:var(--inactive--color,#ccc);border-width:0 0 1px}:host select:focus{outline:0}:host input{border-style:solid;border-color:var(--inactive--color,#ccc);border-width:0 0 1px}:host input::placeholder{color:var(--inactive--color,#ccc)}:host option[value=\\\"\\\"]{color:#fff!important}:host #app{background-color:inherit}:host ::-webkit-scrollbar,:host ::shadow ::-webkit-scrollbar{width:12px}:host ::-webkit-scrollbar-thumb,:host ::shadow ::-webkit-scrollbar-thumb{background:#ccc}:host ::-webkit-scrollbar-track,:host ::shadow ::-webkit-scrollbar-track{background:0 0}\", \"\"]);\n\n// exports\n","module.exports = __WEBPACK_EXTERNAL_MODULE__24__;","module.exports = __WEBPACK_EXTERNAL_MODULE__25__;","module.exports = __WEBPACK_EXTERNAL_MODULE__26__;","module.exports = __WEBPACK_EXTERNAL_MODULE__27__;","/*\n\nForked from https://github.com/timruffles/mobile-drag-drop/ v2.3.0-rc.2\n\nCopyright (c) 2013 Tim Ruffles\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/\n\nconst CLASS_PREFIX = \"dnd-poly-\";\nconst CLASS_DRAG_IMAGE = CLASS_PREFIX + \"drag-image\";\nconst CLASS_DRAG_IMAGE_SNAPBACK = CLASS_PREFIX + \"snapback\";\nconst CLASS_DRAG_OPERATION_ICON = CLASS_PREFIX + \"icon\";\nconst EVENT_PREFIX = \"dnd-poly-\";\nconst EVENT_DRAG_DRAGSTART_PENDING = EVENT_PREFIX + \"dragstart-pending\";\nconst EVENT_DRAG_DRAGSTART_CANCEL = EVENT_PREFIX + \"dragstart-cancel\";\nconst ALLOWED_EFFECTS = [\"none\", \"copy\", \"copyLink\", \"copyMove\", \"link\", \"linkMove\", \"move\", \"all\"];\nconst DROP_EFFECTS = [\"none\", \"copy\", \"move\", \"link\"];\n\nfunction detectFeatures() {\n const features = {\n dragEvents: \"ondragstart\" in document.documentElement,\n draggable: \"draggable\" in document.documentElement,\n userAgentSupportingNativeDnD: undefined\n };\n const isBlinkEngine = !!window.chrome || /chrome/i.test(navigator.userAgent);\n features.userAgentSupportingNativeDnD = !(/iPad|iPhone|iPod|Android/.test(navigator.userAgent) || (isBlinkEngine && \"ontouchstart\" in document.documentElement));\n return features;\n}\nfunction supportsPassiveEventListener() {\n let supportsPassiveEventListeners = false;\n try {\n const opts = Object.defineProperty({}, \"passive\", {\n get: function() {\n supportsPassiveEventListeners = true;\n }\n });\n window.addEventListener(\"test\", null, opts);\n } catch (e) {}\n return supportsPassiveEventListeners;\n}\n\nconst supportsPassive = supportsPassiveEventListener();\nfunction isDOMElement(object) {\n return object && object.tagName;\n}\nfunction addDocumentListener(ev, handler, passive) {\n if (passive === void 0) {\n passive = true;\n }\n document.addEventListener(ev, handler, supportsPassive ? {passive: passive} : false);\n}\nfunction removeDocumentListener(ev, handler) {\n document.removeEventListener(ev, handler);\n}\nfunction onEvt(el, event, handler, capture) {\n if (capture === void 0) {\n capture = false;\n }\n const options = supportsPassive ? {passive: true, capture: capture} : capture;\n el.addEventListener(event, handler, options);\n return {\n off: function() {\n el.removeEventListener(event, handler, options);\n }\n };\n}\nfunction prepareNodeCopyAsDragImage(srcNode, dstNode) {\n if (srcNode.nodeType === 1) {\n const cs = getComputedStyle(srcNode);\n for (let i = 0; i < cs.length; i++) {\n const csName = cs[i];\n dstNode.style.setProperty(csName, cs.getPropertyValue(csName), cs.getPropertyPriority(csName));\n }\n dstNode.style.pointerEvents = \"none\";\n dstNode.removeAttribute(\"id\");\n dstNode.removeAttribute(\"class\");\n dstNode.removeAttribute(\"draggable\");\n if (dstNode.nodeName === \"CANVAS\") {\n const canvasSrc = srcNode;\n const canvasDst = dstNode;\n const canvasSrcImgData = canvasSrc.getContext(\"2d\").getImageData(0, 0, canvasSrc.width, canvasSrc.height);\n canvasDst.getContext(\"2d\").putImageData(canvasSrcImgData, 0, 0);\n }\n }\n if (srcNode.hasChildNodes()) {\n for (let i = 0; i < srcNode.childNodes.length; i++) {\n prepareNodeCopyAsDragImage(srcNode.childNodes[i], dstNode.childNodes[i]);\n }\n }\n}\nfunction createDragImage(sourceNode) {\n const dragImage = sourceNode.cloneNode(true);\n prepareNodeCopyAsDragImage(sourceNode, dragImage);\n return dragImage;\n}\nfunction average(array) {\n if (array.length === 0) {\n return 0;\n }\n return (\n array.reduce(function(s, v) {\n return v + s;\n }, 0) / array.length\n );\n}\nfunction isTouchIdentifierContainedInTouchEvent(touchEvent, touchIdentifier) {\n for (let i = 0; i < touchEvent.changedTouches.length; i++) {\n const touch = touchEvent.changedTouches[i];\n if (touch.identifier === touchIdentifier) {\n return true;\n }\n }\n return false;\n}\nfunction updateCentroidCoordinatesOfTouchesIn(coordinateProp, event, outPoint) {\n const pageXs = [],\n pageYs = [];\n for (let i = 0; i < event.touches.length; i++) {\n const touch = event.touches[i];\n pageXs.push(touch[coordinateProp + \"X\"]);\n pageYs.push(touch[coordinateProp + \"Y\"]);\n }\n outPoint.x = average(pageXs);\n outPoint.y = average(pageYs);\n}\nconst TRANSFORM_CSS_VENDOR_PREFIXES = [\"\", \"-webkit-\"];\nfunction extractTransformStyles(sourceNode) {\n return TRANSFORM_CSS_VENDOR_PREFIXES.map(function(prefix) {\n const transform = sourceNode.style[prefix + \"transform\"];\n if (!transform || transform === \"none\") {\n return \"\";\n }\n return transform.replace(/translate\\(\\D*\\d+[^,]*,\\D*\\d+[^,]*\\)\\s*/g, \"\");\n });\n}\nfunction translateElementToPoint(element, pnt, originalTransforms, offset, centerOnCoordinates) {\n if (centerOnCoordinates === void 0) {\n centerOnCoordinates = true;\n }\n let x = pnt.x,\n y = pnt.y;\n if (offset) {\n x += offset.x;\n y += offset.y;\n }\n if (centerOnCoordinates) {\n x -= parseInt(element.offsetWidth, 10) / 2;\n y -= parseInt(element.offsetHeight, 10) / 2;\n }\n const translate = \"translate3d(\" + x + \"px,\" + y + \"px, 0)\";\n for (let i = 0; i < TRANSFORM_CSS_VENDOR_PREFIXES.length; i++) {\n const transformProp = TRANSFORM_CSS_VENDOR_PREFIXES[i] + \"transform\";\n element.style[transformProp] = translate + \" \" + originalTransforms[i];\n }\n}\nfunction applyDragImageSnapback(sourceEl, dragImage, dragImageTransforms, transitionEndCb) {\n const cs = getComputedStyle(sourceEl);\n if (cs.visibility === \"hidden\" || cs.display === \"none\") {\n console.log(\"dnd-poly: source node is not visible. skipping snapback transition.\");\n transitionEndCb();\n return;\n }\n dragImage.classList.add(CLASS_DRAG_IMAGE_SNAPBACK);\n const csDragImage = getComputedStyle(dragImage);\n const durationInS = parseFloat(csDragImage.transitionDuration);\n if (isNaN(durationInS) || durationInS === 0) {\n console.log(\"dnd-poly: no transition used - skipping snapback\");\n transitionEndCb();\n return;\n }\n console.log(\"dnd-poly: starting dragimage snap back\");\n const rect = sourceEl.getBoundingClientRect();\n const pnt = {\n x: rect.left,\n y: rect.top\n };\n pnt.x += document.body.scrollLeft || document.documentElement.scrollLeft;\n pnt.y += document.body.scrollTop || document.documentElement.scrollTop;\n pnt.x -= parseInt(cs.marginLeft, 10);\n pnt.y -= parseInt(cs.marginTop, 10);\n const delayInS = parseFloat(csDragImage.transitionDelay);\n const durationInMs = Math.round((durationInS + delayInS) * 1000);\n translateElementToPoint(dragImage, pnt, dragImageTransforms, undefined, false);\n setTimeout(transitionEndCb, durationInMs);\n}\n\nconst DataTransfer = (function() {\n function DataTransfer(_dataStore, _setDragImageHandler) {\n this._dataStore = _dataStore;\n this._setDragImageHandler = _setDragImageHandler;\n this._dropEffect = DROP_EFFECTS[0];\n }\n Object.defineProperty(DataTransfer.prototype, \"dropEffect\", {\n get: function() {\n return this._dropEffect;\n },\n set: function(value) {\n if (this._dataStore.mode !== 0 && ALLOWED_EFFECTS.indexOf(value) > -1) {\n this._dropEffect = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTransfer.prototype, \"types\", {\n get: function() {\n if (this._dataStore.mode !== 0) {\n return Object.freeze(this._dataStore.types);\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DataTransfer.prototype, \"effectAllowed\", {\n get: function() {\n return this._dataStore.effectAllowed;\n },\n set: function(value) {\n if (this._dataStore.mode === 2 && ALLOWED_EFFECTS.indexOf(value) > -1) {\n this._dataStore.effectAllowed = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n DataTransfer.prototype.setData = function(type, data) {\n if (this._dataStore.mode === 2) {\n if (type.indexOf(\" \") > -1) {\n throw new Error(\"illegal arg: type contains space\");\n }\n this._dataStore.data[type] = data;\n if (this._dataStore.types.indexOf(type) === -1) {\n this._dataStore.types.push(type);\n }\n }\n };\n DataTransfer.prototype.getData = function(type) {\n if (this._dataStore.mode === 1 || this._dataStore.mode === 2) {\n return this._dataStore.data[type] || \"\";\n }\n };\n DataTransfer.prototype.clearData = function(format) {\n if (this._dataStore.mode === 2) {\n if (format && this._dataStore.data[format]) {\n delete this._dataStore.data[format];\n const index = this._dataStore.types.indexOf(format);\n if (index > -1) {\n this._dataStore.types.splice(index, 1);\n }\n return;\n }\n this._dataStore.data = {};\n this._dataStore.types = [];\n }\n };\n DataTransfer.prototype.setDragImage = function(image, x, y) {\n if (this._dataStore.mode === 2) {\n this._setDragImageHandler(image, x, y);\n }\n };\n return DataTransfer;\n})();\n\nfunction tryFindDraggableTarget(event) {\n let el = event.target;\n do {\n if (el.draggable === false) {\n continue;\n }\n if (el.draggable === true) {\n return el;\n }\n if (el.getAttribute && el.getAttribute(\"draggable\") === \"true\") {\n return el;\n }\n } while ((el = el.parentNode) && el !== document.body);\n}\nfunction determineDropEffect(effectAllowed, sourceNode) {\n if (!effectAllowed) {\n if (sourceNode.nodeType === 3 && sourceNode.tagName === \"A\") {\n return DROP_EFFECTS[3];\n }\n return DROP_EFFECTS[1];\n }\n if (effectAllowed === ALLOWED_EFFECTS[0]) {\n return DROP_EFFECTS[0];\n }\n if (effectAllowed.indexOf(ALLOWED_EFFECTS[1]) === 0 || effectAllowed === ALLOWED_EFFECTS[7]) {\n return DROP_EFFECTS[1];\n }\n if (effectAllowed.indexOf(ALLOWED_EFFECTS[4]) === 0) {\n return DROP_EFFECTS[3];\n }\n if (effectAllowed === ALLOWED_EFFECTS[6]) {\n return DROP_EFFECTS[2];\n }\n return DROP_EFFECTS[1];\n}\nfunction createDragEventFromTouch(targetElement, e, type, cancelable, window, dataTransfer, relatedTarget) {\n if (relatedTarget === void 0) {\n relatedTarget = null;\n }\n const touch = e.changedTouches[0];\n const dndEvent = new Event(type, {\n bubbles: true,\n cancelable: cancelable\n });\n dndEvent.dataTransfer = dataTransfer;\n dndEvent.relatedTarget = relatedTarget;\n dndEvent.screenX = touch.screenX;\n dndEvent.screenY = touch.screenY;\n dndEvent.clientX = touch.clientX;\n dndEvent.clientY = touch.clientY;\n dndEvent.pageX = touch.pageX;\n dndEvent.pageY = touch.pageY;\n const targetRect = targetElement.getBoundingClientRect();\n dndEvent.offsetX = dndEvent.clientX - targetRect.left;\n dndEvent.offsetY = dndEvent.clientY - targetRect.top;\n return dndEvent;\n}\nfunction dispatchDragEvent(dragEvent, targetElement, touchEvent, dataStore, dataTransfer, cancelable, relatedTarget) {\n if (cancelable === void 0) {\n cancelable = true;\n }\n if (relatedTarget === void 0) {\n relatedTarget = null;\n }\n console.log(\"dnd-poly: dispatching \" + dragEvent);\n const leaveEvt = createDragEventFromTouch(targetElement, touchEvent, dragEvent, cancelable, document.defaultView, dataTransfer, relatedTarget);\n const cancelled = !targetElement.dispatchEvent(leaveEvt);\n dataStore.mode = 0;\n return cancelled;\n}\nfunction determineDragOperation(effectAllowed, dropEffect) {\n if (!effectAllowed || effectAllowed === ALLOWED_EFFECTS[7]) {\n return dropEffect;\n }\n if (dropEffect === DROP_EFFECTS[1]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[1]) === 0) {\n return DROP_EFFECTS[1];\n }\n } else if (dropEffect === DROP_EFFECTS[3]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[3]) === 0 || effectAllowed.indexOf(\"Link\") > -1) {\n return DROP_EFFECTS[3];\n }\n } else if (dropEffect === DROP_EFFECTS[2]) {\n if (effectAllowed.indexOf(DROP_EFFECTS[2]) === 0 || effectAllowed.indexOf(\"Move\") > -1) {\n return DROP_EFFECTS[2];\n }\n }\n return DROP_EFFECTS[0];\n}\n\nconst DragOperationController = (function() {\n function DragOperationController(_initialEvent, _config, _sourceNode, _dragOperationEndedCb) {\n this._initialEvent = _initialEvent;\n this._config = _config;\n this._sourceNode = _sourceNode;\n this._dragOperationEndedCb = _dragOperationEndedCb;\n this._dragOperationState = 0;\n this._immediateUserSelection = null;\n this._currentDropTarget = null;\n console.log(\"dnd-poly: setting up potential drag operation..\");\n this._lastTouchEvent = _initialEvent;\n this._initialTouch = _initialEvent.changedTouches[0];\n this._touchMoveHandler = this._onTouchMove.bind(this);\n this._touchEndOrCancelHandler = this._onTouchEndOrCancel.bind(this);\n addDocumentListener(\"touchmove\", this._touchMoveHandler, false);\n addDocumentListener(\"touchend\", this._touchEndOrCancelHandler, false);\n addDocumentListener(\"touchcancel\", this._touchEndOrCancelHandler, false);\n }\n DragOperationController.prototype._setup = function() {\n const _this = this;\n console.log(\"dnd-poly: starting drag and drop operation\");\n this._dragOperationState = 1;\n this._currentDragOperation = DROP_EFFECTS[0];\n this._dragDataStore = {\n data: {},\n effectAllowed: undefined,\n mode: 3,\n types: []\n };\n this._currentHotspotCoordinates = {\n x: null,\n y: null\n };\n this._dragImagePageCoordinates = {\n x: null,\n y: null\n };\n let dragImageSrc = this._sourceNode;\n this._dataTransfer = new DataTransfer(this._dragDataStore, function(element, x, y) {\n dragImageSrc = element;\n if (typeof x === \"number\" || typeof y === \"number\") {\n _this._dragImageOffset = {\n x: x || 0,\n y: y || 0\n };\n }\n });\n this._dragDataStore.mode = 2;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n if (dispatchDragEvent(\"dragstart\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {\n console.log(\"dnd-poly: dragstart cancelled\");\n this._dragOperationState = 3;\n this._cleanup();\n return false;\n }\n updateCentroidCoordinatesOfTouchesIn(\"page\", this._lastTouchEvent, this._dragImagePageCoordinates);\n const dragImage = this._config.dragImageSetup(dragImageSrc);\n this._dragImageTransforms = extractTransformStyles(dragImage);\n dragImage.style.position = \"absolute\";\n dragImage.style.left = \"0px\";\n dragImage.style.top = \"0px\";\n dragImage.style.zIndex = \"999999\";\n dragImage.classList.add(CLASS_DRAG_IMAGE);\n dragImage.classList.add(CLASS_DRAG_OPERATION_ICON);\n this._dragImage = dragImage;\n if (!this._dragImageOffset) {\n if (this._config.dragImageOffset) {\n this._dragImageOffset = {\n x: this._config.dragImageOffset.x,\n y: this._config.dragImageOffset.y\n };\n } else if (this._config.dragImageCenterOnTouch) {\n const cs = getComputedStyle(dragImageSrc);\n this._dragImageOffset = {\n x: 0 - parseInt(cs.marginLeft, 10),\n y: 0 - parseInt(cs.marginTop, 10)\n };\n } else {\n const targetRect = dragImageSrc.getBoundingClientRect();\n const cs = getComputedStyle(dragImageSrc);\n this._dragImageOffset = {\n x: targetRect.left - this._initialTouch.clientX - parseInt(cs.marginLeft, 10) + targetRect.width / 2,\n y: targetRect.top - this._initialTouch.clientY - parseInt(cs.marginTop, 10) + targetRect.height / 2\n };\n }\n }\n translateElementToPoint(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);\n document.body.appendChild(this._dragImage);\n this._iterationIntervalId = window.setInterval(function() {\n if (_this._iterationLock) {\n console.log(\"dnd-poly: iteration skipped because previous iteration hast not yet finished.\");\n return;\n }\n _this._iterationLock = true;\n _this._dragAndDropProcessModelIteration();\n _this._iterationLock = false;\n }, this._config.iterationInterval);\n return true;\n };\n DragOperationController.prototype._cleanup = function() {\n console.log(\"dnd-poly: cleanup\");\n if (this._iterationIntervalId) {\n clearInterval(this._iterationIntervalId);\n this._iterationIntervalId = null;\n }\n removeDocumentListener(\"touchmove\", this._touchMoveHandler);\n removeDocumentListener(\"touchend\", this._touchEndOrCancelHandler);\n removeDocumentListener(\"touchcancel\", this._touchEndOrCancelHandler);\n if (this._dragImage) {\n this._dragImage.parentNode.removeChild(this._dragImage);\n this._dragImage = null;\n }\n this._dragOperationEndedCb(this._config, this._lastTouchEvent, this._dragOperationState);\n };\n DragOperationController.prototype._onTouchMove = function(event) {\n const _this = this;\n if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {\n return;\n }\n this._lastTouchEvent = event;\n if (this._dragOperationState === 0) {\n let startDrag = void 0;\n if (this._config.dragStartConditionOverride) {\n try {\n startDrag = this._config.dragStartConditionOverride(event);\n } catch (e) {\n console.error(\"dnd-poly: error in dragStartConditionOverride hook: \" + e);\n startDrag = false;\n }\n } else {\n startDrag = event.touches.length === 1;\n }\n if (!startDrag) {\n this._cleanup();\n return;\n }\n if (this._setup() === true) {\n this._initialEvent.preventDefault();\n event.preventDefault();\n }\n return;\n }\n console.log(\"dnd-poly: moving draggable..\");\n event.preventDefault();\n updateCentroidCoordinatesOfTouchesIn(\"client\", event, this._currentHotspotCoordinates);\n updateCentroidCoordinatesOfTouchesIn(\"page\", event, this._dragImagePageCoordinates);\n if (this._config.dragImageTranslateOverride) {\n try {\n let handledDragImageTranslate_1 = false;\n this._config.dragImageTranslateOverride(\n event,\n {\n x: this._currentHotspotCoordinates.x,\n y: this._currentHotspotCoordinates.y\n },\n this._immediateUserSelection,\n function(offsetX, offsetY) {\n if (!_this._dragImage) {\n return;\n }\n handledDragImageTranslate_1 = true;\n _this._currentHotspotCoordinates.x += offsetX;\n _this._currentHotspotCoordinates.y += offsetY;\n _this._dragImagePageCoordinates.x += offsetX;\n _this._dragImagePageCoordinates.y += offsetY;\n translateElementToPoint(_this._dragImage, _this._dragImagePageCoordinates, _this._dragImageTransforms, _this._dragImageOffset, _this._config.dragImageCenterOnTouch);\n }\n );\n if (handledDragImageTranslate_1) {\n return;\n }\n } catch (e) {\n console.log(\"dnd-poly: error in dragImageTranslateOverride hook: \" + e);\n }\n }\n translateElementToPoint(this._dragImage, this._dragImagePageCoordinates, this._dragImageTransforms, this._dragImageOffset, this._config.dragImageCenterOnTouch);\n };\n DragOperationController.prototype._onTouchEndOrCancel = function(event) {\n if (isTouchIdentifierContainedInTouchEvent(event, this._initialTouch.identifier) === false) {\n return;\n }\n if (this._config.dragImageTranslateOverride) {\n try {\n this._config.dragImageTranslateOverride(undefined, undefined, undefined, function() {});\n } catch (e) {\n console.log(\"dnd-poly: error in dragImageTranslateOverride hook: \" + e);\n }\n }\n if (this._dragOperationState === 0) {\n this._cleanup();\n return;\n }\n event.preventDefault();\n this._dragOperationState = event.type === \"touchcancel\" ? 3 : 2;\n };\n DragOperationController.prototype._dragAndDropProcessModelIteration = function() {\n const _this = this;\n const previousDragOperation = this._currentDragOperation;\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n const dragCancelled = dispatchDragEvent(\"drag\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer);\n if (dragCancelled) {\n console.log(\"dnd-poly: drag event cancelled.\");\n this._currentDragOperation = DROP_EFFECTS[0];\n }\n if (dragCancelled || this._dragOperationState === 2 || this._dragOperationState === 3) {\n const dragFailed = this._dragOperationEnded(this._dragOperationState);\n if (dragFailed) {\n applyDragImageSnapback(this._sourceNode, this._dragImage, this._dragImageTransforms, function() {\n _this._finishDragOperation();\n });\n return;\n }\n this._finishDragOperation();\n return;\n }\n const newUserSelection = this._config.elementFromPoint(this._currentHotspotCoordinates.x, this._currentHotspotCoordinates.y);\n console.log(\"dnd-poly: new immediate user selection is: \" + newUserSelection);\n const previousTargetElement = this._currentDropTarget;\n if (newUserSelection !== this._immediateUserSelection && newUserSelection !== this._currentDropTarget) {\n this._immediateUserSelection = newUserSelection;\n if (this._currentDropTarget !== null) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragexit\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n }\n if (this._immediateUserSelection === null) {\n this._currentDropTarget = this._immediateUserSelection;\n console.log(\"dnd-poly: current drop target changed to null\");\n } else {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore.effectAllowed, this._sourceNode);\n if (dispatchDragEvent(\"dragenter\", this._immediateUserSelection, this._lastTouchEvent, this._dragDataStore, this._dataTransfer)) {\n console.log(\"dnd-poly: dragenter default prevented\");\n this._currentDropTarget = this._immediateUserSelection;\n this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);\n } else {\n if (this._immediateUserSelection !== document.body) {\n this._currentDropTarget = document.body;\n }\n }\n }\n }\n if (previousTargetElement !== this._currentDropTarget && isDOMElement(previousTargetElement)) {\n console.log(\"dnd-poly: current drop target changed.\");\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragleave\", previousTargetElement, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false, this._currentDropTarget);\n }\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = determineDropEffect(this._dragDataStore.effectAllowed, this._sourceNode);\n if (dispatchDragEvent(\"dragover\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) === false) {\n console.log(\"dnd-poly: dragover not prevented on possible drop-target.\");\n this._currentDragOperation = DROP_EFFECTS[0];\n } else {\n console.log(\"dnd-poly: dragover prevented.\");\n this._currentDragOperation = determineDragOperation(this._dataTransfer.effectAllowed, this._dataTransfer.dropEffect);\n }\n }\n console.log(\"dnd-poly: d'n'd iteration ended. current drag operation: \" + this._currentDragOperation);\n if (previousDragOperation !== this._currentDragOperation) {\n this._dragImage.classList.remove(CLASS_PREFIX + previousDragOperation);\n }\n const currentDragOperationClass = CLASS_PREFIX + this._currentDragOperation;\n this._dragImage.classList.add(currentDragOperationClass);\n };\n DragOperationController.prototype._dragOperationEnded = function(state) {\n console.log(\"dnd-poly: drag operation end detected with \" + this._currentDragOperation);\n const dragFailed = this._currentDragOperation === DROP_EFFECTS[0] || this._currentDropTarget === null || state === 3;\n if (dragFailed) {\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = DROP_EFFECTS[0];\n dispatchDragEvent(\"dragleave\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n }\n } else {\n if (isDOMElement(this._currentDropTarget)) {\n this._dragDataStore.mode = 1;\n this._dataTransfer.dropEffect = this._currentDragOperation;\n if (dispatchDragEvent(\"drop\", this._currentDropTarget, this._lastTouchEvent, this._dragDataStore, this._dataTransfer) === true) {\n this._currentDragOperation = this._dataTransfer.dropEffect;\n } else {\n this._currentDragOperation = DROP_EFFECTS[0];\n }\n }\n }\n return dragFailed;\n };\n DragOperationController.prototype._finishDragOperation = function() {\n console.log(\"dnd-poly: dragimage snap back transition ended\");\n this._dragDataStore.mode = 3;\n this._dataTransfer.dropEffect = this._currentDragOperation;\n dispatchDragEvent(\"dragend\", this._sourceNode, this._lastTouchEvent, this._dragDataStore, this._dataTransfer, false);\n this._dragOperationState = 2;\n this._cleanup();\n };\n return DragOperationController;\n})();\n\nconst config = {\n iterationInterval: 150,\n tryFindDraggableTarget: tryFindDraggableTarget,\n dragImageSetup: createDragImage,\n elementFromPoint: function(x, y) {\n return document.elementFromPoint(x, y);\n }\n};\nlet activeDragOperation;\nfunction onTouchstart(e, composePath) {\n console.log(\"dnd-poly: global touchstart\");\n if (activeDragOperation) {\n console.log(\"dnd-poly: drag operation already active\");\n return;\n }\n const dragTarget = config.tryFindDraggableTarget(e, composePath);\n if (!dragTarget) {\n console.log(\"dnd-poly: no draggable at touchstart coordinates\");\n return;\n }\n try {\n activeDragOperation = new DragOperationController(e, config, dragTarget, dragOperationEnded);\n } catch (err) {\n dragOperationEnded(config, e, 3);\n throw err;\n }\n}\nfunction onDelayTouchstart(evt) {\n console.log(\"dnd-poly: setup delayed dragstart..\");\n const el = evt.target;\n const composePath = evt.composedPath();\n const heldItem = function() {\n console.log(\"dnd-poly: starting delayed drag..\");\n end.off();\n cancel.off();\n move.off();\n scroll.off();\n onTouchstart(evt, composePath);\n };\n const onReleasedItem = function(event) {\n console.log(\"dnd-poly: aborting delayed drag because of \" + event.type);\n end.off();\n cancel.off();\n move.off();\n scroll.off();\n if (el) {\n el.dispatchEvent(new CustomEvent(EVENT_DRAG_DRAGSTART_CANCEL, {bubbles: true, cancelable: true}));\n }\n clearTimeout(timer);\n };\n if (el) {\n el.dispatchEvent(new CustomEvent(EVENT_DRAG_DRAGSTART_PENDING, {bubbles: true, cancelable: true}));\n }\n const timer = window.setTimeout(heldItem, config.holdToDrag);\n const end = onEvt(el, \"touchend\", onReleasedItem);\n const cancel = onEvt(el, \"touchcancel\", onReleasedItem);\n const move = onEvt(el, \"touchmove\", onReleasedItem);\n const scroll = onEvt(window, \"scroll\", onReleasedItem, true);\n}\n\nfunction dragOperationEnded(_config, event, state) {\n if (state === 0) {\n console.log(\"dnd-poly: Drag never started. Last event was \" + event.type);\n if (_config.defaultActionOverride) {\n try {\n _config.defaultActionOverride(event);\n if (event.defaultPrevented) {\n console.log(\"dnd-poly: defaultActionOverride has taken care of triggering the default action. preventing default on original event\");\n }\n } catch (e) {\n console.log(\"dnd-poly: error in defaultActionOverride: \" + e);\n }\n }\n }\n activeDragOperation = null;\n}\n\nfunction polyfill(override) {\n if (override) {\n Object.keys(override).forEach(function(key) {\n config[key] = override[key];\n });\n }\n if (!config.forceApply) {\n const detectedFeatures = detectFeatures();\n if (detectedFeatures.userAgentSupportingNativeDnD && detectedFeatures.draggable && detectedFeatures.dragEvents) {\n return false;\n }\n }\n console.log(\"dnd-poly: Applying mobile drag and drop polyfill.\");\n if (config.holdToDrag) {\n console.log(\"dnd-poly: holdToDrag set to \" + config.holdToDrag);\n addDocumentListener(\"touchstart\", onDelayTouchstart, false);\n } else {\n addDocumentListener(\"touchstart\", onTouchstart, false);\n }\n return true;\n}\n\nfunction tryFindDraggableTarget_override(event, composePath) {\n const cp = composePath || event.composedPath();\n for (let o of cp) {\n let el = o;\n do {\n if (el.draggable === false) {\n continue;\n }\n if (el.getAttribute && el.getAttribute(\"draggable\") === \"true\") {\n return el;\n }\n } while ((el = el.parentNode) && el !== document.body);\n }\n}\n\nfunction elementFromPoint(x, y) {\n for (let o of this._path) {\n if (o.elementFromPoint) {\n let el = o.elementFromPoint(x, y);\n if (el) {\n while (el.shadowRoot) {\n el = el.shadowRoot.elementFromPoint(x, y);\n }\n return el;\n }\n }\n }\n}\n\nfunction dragStartConditionOverride(event) {\n this._path = event.composedPath();\n return true;\n}\n\npolyfill({\n tryFindDraggableTarget: tryFindDraggableTarget_override,\n elementFromPoint: elementFromPoint,\n dragStartConditionOverride: dragStartConditionOverride,\n holdToDrag: 500\n});\n","module.exports = __WEBPACK_EXTERNAL_MODULE__29__;","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport debounce from \"lodash/debounce\";\n\nimport Awesomplete from \"awesomplete\";\nimport awesomplete_style from \"!!css-loader!awesomplete/awesomplete.css\";\n\nimport {bindTemplate} from \"./utils.js\";\n\nimport perspective from \"@finos/perspective\";\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\nimport template from \"../html/row.html\";\n\nimport style from \"../less/row.less\";\nimport {html, render, nothing} from \"lit-html\";\n\nconst SPAN = document.createElement(\"span\");\nSPAN.style.visibility = \"hidden\";\nSPAN.style.fontFamily = \"monospace\";\nSPAN.style.fontSize = \"12px\";\nSPAN.style.position = \"absolute\";\n\nfunction get_text_width(text, max = 0) {\n // FIXME get these values form the stylesheet\n SPAN.innerHTML = text;\n document.body.appendChild(SPAN);\n const width = `${Math.max(max, SPAN.offsetWidth) + 20}px`;\n document.body.removeChild(SPAN);\n return width;\n}\n\n// Eslint complains here because we don't do anything, but actually we globally\n// register this class as a CustomElement\n@bindTemplate(template, {toString: () => style + \"\\n\" + awesomplete_style}) // eslint-disable-next-line no-unused-vars\nclass Row extends HTMLElement {\n set name(n) {\n const elem = this.shadowRoot.querySelector(\"#name\");\n elem.innerHTML = this.getAttribute(\"name\");\n }\n\n _option_template(agg, name) {\n return html`\n <option value=\"${agg}\" data-desc=\"${name}\">${name || agg}</option>\n `;\n }\n\n _select_template(category, type) {\n const items = perspective[category][type] || [];\n const weighted_options = html`\n <optgroup label=\"weighted mean\">\n ${this._weights.map(x => this._option_template(JSON.stringify([\"weighted mean\", x]), x))}\n </optgroup>\n `;\n const has_weighted_mean = category === \"TYPE_AGGREGATES\" && (type === \"integer\" || type === \"float\");\n return html`\n ${items.map(x => this._option_template(x))} ${has_weighted_mean ? weighted_options : nothing}\n `;\n }\n\n set_weights(xs) {\n this._weights = xs;\n }\n\n set type(t) {\n const elem = this.shadowRoot.querySelector(\"#name\");\n const type = this.getAttribute(\"type\");\n if (!type) return;\n const type_config = get_type_config(type);\n if (type_config.type) {\n elem.classList.add(type_config.type);\n }\n elem.classList.add(type);\n const agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\n const filter_dropdown = this.shadowRoot.querySelector(\"#filter_operator\");\n\n render(this._select_template(\"TYPE_AGGREGATES\", type_config.type || type), agg_dropdown);\n render(this._select_template(\"TYPE_FILTERS\", type_config.type || type), filter_dropdown);\n\n if (!this.hasAttribute(\"aggregate\")) {\n this.aggregate = type_config.aggregate;\n } else {\n this.aggregate = this.getAttribute(\"aggregate\");\n }\n if (this.hasAttribute(\"filter\")) {\n this.filter = this.getAttribute(\"filter\");\n }\n\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\n this._callback = event => this._update_filter(event);\n filter_operand.addEventListener(\"keyup\", this._callback.bind(this));\n }\n\n choices(choices) {\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\n const filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\n const selector = new Awesomplete(filter_operand, {\n label: this.getAttribute(\"name\"),\n list: choices,\n minChars: 0,\n autoFirst: true,\n filter: function(text, input) {\n return Awesomplete.FILTER_CONTAINS(text, input.match(/[^,]*$/)[0]);\n },\n item: function(text, input) {\n return Awesomplete.ITEM(text, input.match(/[^,]*$/)[0]);\n },\n replace: function(text) {\n const before = this.input.value.match(/^.+,\\s*|/)[0];\n if (filter_operator.value === \"in\" || filter_operator.value === \"not in\") {\n this.input.value = before + text + \", \";\n } else {\n this.input.value = before + text;\n }\n }\n });\n if (filter_operand.value === \"\") {\n selector.evaluate();\n }\n filter_operand.focus();\n this._filter_operand.addEventListener(\"focus\", () => {\n if (filter_operand.value.trim().length === 0) {\n selector.evaluate();\n }\n });\n filter_operand.addEventListener(\"awesomplete-selectcomplete\", this._callback);\n }\n\n set filter(f) {\n const filter_dropdown = this.shadowRoot.querySelector(\"#filter_operator\");\n const filter = JSON.parse(this.getAttribute(\"filter\"));\n if (filter_dropdown.value !== filter.operator) {\n filter_dropdown.value = filter.operator || get_type_config(this.getAttribute(\"type\")).filter_operator;\n }\n filter_dropdown.style.width = get_text_width(filter_dropdown.value);\n const filter_input = this.shadowRoot.querySelector(\"#filter_operand\");\n const operand = filter.operand ? filter.operand.toString() : \"\";\n if (!this._initialized) {\n filter_input.value = operand;\n }\n if (filter_dropdown.value === perspective.FILTER_OPERATORS.isNull || filter_dropdown.value === perspective.FILTER_OPERATORS.isNotNull) {\n filter_input.style.display = \"none\";\n } else {\n filter_input.style.display = \"inline-block\";\n filter_input.style.width = get_text_width(operand, 30);\n }\n }\n\n set aggregate(a) {\n const agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\n const aggregate = this.getAttribute(\"aggregate\");\n if (agg_dropdown.value !== aggregate && this.hasAttribute(\"type\")) {\n const type = this.getAttribute(\"type\");\n agg_dropdown.value = aggregate || get_type_config(type).aggregate;\n }\n this._blur_agg_dropdown();\n }\n\n set computed_column(c) {\n // const data = this._get_computed_data();\n // const computed_input_column =\n // this.shadowRoot.querySelector('#computed_input_column');\n // const computation_name =\n // this.shadowRoot.querySelector('#computation_name');\n // computation_name.textContent = data.computation.name;\n // computed_input_column.textContent = data.input_column;\n }\n\n _get_computed_data() {\n const data = JSON.parse(this.getAttribute(\"computed_column\"));\n return {\n column_name: data.column_name,\n input_columns: data.input_columns,\n input_type: data.input_type,\n computation: data.computation,\n type: data.type\n };\n }\n\n _update_filter(event) {\n const filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\n const filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\n let val = filter_operand.value;\n const type = this.getAttribute(\"type\");\n switch (type) {\n case \"float\":\n val = parseFloat(val);\n break;\n case \"integer\":\n val = parseInt(val);\n break;\n case \"boolean\":\n val = val.toLowerCase().indexOf(\"true\") > -1;\n break;\n case \"string\":\n default:\n }\n if (filter_operator.value === perspective.FILTER_OPERATORS.isIn || filter_operator.value === perspective.FILTER_OPERATORS.isNotIn) {\n val = val.split(\",\").map(x => x.trim());\n }\n this.setAttribute(\"filter\", JSON.stringify({operator: filter_operator.value, operand: val}));\n this.dispatchEvent(new CustomEvent(\"filter-selected\", {detail: event}));\n }\n\n _set_data_transfer(event) {\n if (this.hasAttribute(\"filter\")) {\n const {operator, operand} = JSON.parse(this.getAttribute(\"filter\"));\n event.dataTransfer.setData(\"text\", JSON.stringify([this.getAttribute(\"name\"), operator, operand, this.getAttribute(\"type\"), this.getAttribute(\"aggregate\")]));\n } else {\n event.dataTransfer.setData(\n \"text\",\n JSON.stringify([this.getAttribute(\"name\"), get_type_config(this.getAttribute(\"type\")).filter_operator, undefined, this.getAttribute(\"type\"), this.getAttribute(\"aggregate\")])\n );\n }\n this.dispatchEvent(new CustomEvent(\"row-drag\"));\n }\n\n _register_ids() {\n this._li = this.shadowRoot.querySelector(\".row_draggable\");\n this._visible = this.shadowRoot.querySelector(\".is_visible\");\n this._row_close = this.shadowRoot.querySelector(\"#row_close\");\n this._agg_dropdown = this.shadowRoot.querySelector(\"#column_aggregate\");\n this._sort_order = this.shadowRoot.querySelector(\"#sort_order\");\n this._filter_operand = this.shadowRoot.querySelector(\"#filter_operand\");\n this._filter_operator = this.shadowRoot.querySelector(\"#filter_operator\");\n this._edit_computed_column_button = this.shadowRoot.querySelector(\"#row_edit\");\n this._column_aggregate_category = this.shadowRoot.querySelector(\"#column_aggregate_category\");\n }\n\n _blur_agg_dropdown() {\n this._agg_dropdown.blur();\n if (this._agg_dropdown.value[0] === \"[\") {\n for (const option of this._agg_dropdown.querySelectorAll(\"optgroup option\")) {\n const name = option.getAttribute(\"data-desc\");\n option.innerHTML = `mean by ${name}`;\n }\n }\n }\n\n _focus_agg_dropdown() {\n for (const option of this._agg_dropdown.querySelectorAll(\"optgroup option\")) {\n const name = option.getAttribute(\"data-desc\");\n option.innerHTML = `by ${name}`;\n }\n }\n\n _register_callbacks() {\n this._li.addEventListener(\"dragstart\", this._set_data_transfer.bind(this));\n this._li.addEventListener(\"dragend\", () => {\n this.dispatchEvent(new CustomEvent(\"row-dragend\"));\n });\n this._visible.addEventListener(\"mousedown\", event => this.dispatchEvent(new CustomEvent(\"visibility-clicked\", {detail: event})));\n this._row_close.addEventListener(\"mousedown\", event => this.dispatchEvent(new CustomEvent(\"close-clicked\", {detail: event})));\n this._agg_dropdown.addEventListener(\"focus\", this._focus_agg_dropdown.bind(this));\n\n this._agg_dropdown.addEventListener(\"change\", event => {\n this._blur_agg_dropdown();\n const value = this._agg_dropdown.value;\n this.setAttribute(\"aggregate\", value);\n this.dispatchEvent(new CustomEvent(\"aggregate-selected\", {detail: event}));\n });\n this._sort_order.addEventListener(\"click\", event => {\n this.dispatchEvent(new CustomEvent(\"sort-order\", {detail: event}));\n });\n\n const debounced_filter = debounce(event => this._update_filter(event), 50);\n this._filter_operator.addEventListener(\"change\", () => {\n this._filter_operand.focus();\n this._filter_operator.style.width = get_text_width(this._filter_operator.value);\n const filter_input = this.shadowRoot.querySelector(\"#filter_operand\");\n filter_input.style.width = get_text_width(\"\" + this._filter_operand.value, 30);\n debounced_filter();\n });\n this._edit_computed_column_button.addEventListener(\"click\", () => {\n this.dispatchEvent(\n new CustomEvent(\"perspective-computed-column-edit\", {\n bubbles: true,\n detail: this._get_computed_data()\n })\n );\n });\n }\n\n connectedCallback() {\n this._register_ids();\n this._register_callbacks();\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\nimport {html, nothing, render} from \"lit-html\";\n\nimport {bindTemplate, throttlePromise} from \"./utils.js\";\n\nimport template from \"../html/autocomplete_widget.html\";\n\nimport style from \"../less/autocomplete_widget.less\";\n\n/**\n * A single suggestion object for the autocomplete, containing `label`, which\n * is the text displayed to the user, and `value`, which is the text that goes\n * into the input when a selection is chosen.\n */\nexport class AutocompleteSuggestion {\n /**\n * Construct a new autocomplete suggestion.\n *\n * @param {String} label the text shown to the user\n * @param {String} value the text used to replace inside the input\n */\n constructor(label, value) {\n this.label = label;\n this.value = value;\n }\n}\n\n// Eslint complains here because we don't do anything, but actually we globally\n// register this class as a CustomElement\n@bindTemplate(template, style) // eslint-disable-next-line no-unused-vars\nclass PerspectiveAutocompleteWidget extends HTMLElement {\n constructor() {\n super();\n this.displayed = false;\n this._selection_index = -1;\n }\n\n connectedCallback() {\n this._register_ids();\n this._register_callbacks();\n }\n\n /**\n * Render an array of suggestions inside the autocomplete. Calling this\n * method will overwrite the existing suggestions inside the\n * autocomplete container.\n *\n * @param {Array<Template>} markup An array of `lit-html` template objects\n * that will be rendered. If the length of `markup` is 0, the autocomplete\n * is cleared and hidden.\n * @param {Boolean} is_column_name if true, suggestions will be rendered\n * with additional CSS classes denoting that they are column names.\n *\n * TODO: do we want throttlePromise on all render functions?\n */\n @throttlePromise\n render(markup) {\n this._details.style.display = \"none\";\n this._container.classList.remove(\"show-details\");\n this._list.classList.remove(\"small\");\n\n if (this._selection_index > -1) {\n const children = this._list.children;\n children[this._selection_index].setAttribute(\"aria-selected\", false);\n }\n\n if (markup.length === 0) {\n this.clear();\n return;\n }\n\n this.reposition();\n\n // Reset selection state\n this._selection_index = -1;\n\n // Show autocomplete container\n this.display();\n\n // Reset scroll inside container to be at the top\n this._list.scrollTop = 0;\n\n // Special classes for smaller selections\n if (markup.length < 4) {\n this._list.classList.add(\"small\");\n }\n\n render(markup, this._list);\n }\n\n /**\n * Repositions the widget within the textarea - must be implemented by the\n * user. Defaults to a no-op;\n */\n reposition() {\n console.warning(\"PerspectiveAutocompleteWidget.reposition has not been implemented.\");\n return;\n }\n\n /**\n * If an item is clicked inside the autocomplete, dispatch a\n * `perspective-autocomplete-item-clicked` event, containing the original\n * click event in the new event's `detail` attribute.\n *\n * @param {*} ev\n */\n item_clicked(ev) {\n if (ev.target && (ev.target.matches(\".psp-autocomplete__item\") || ev.target.matches(\".psp-autocomplete-item__label\"))) {\n const event = new CustomEvent(\"perspective-autocomplete-item-clicked\", {\n detail: ev,\n bubbles: true\n });\n this.dispatchEvent(event);\n }\n }\n\n /**\n * When an item is hovered over, render the details panel if necessary.\n *\n * @param {*} ev\n */\n item_mouseover(ev) {\n if (ev.target && ev.target.matches(\".psp-autocomplete__item\")) {\n this._render_details_panel(ev.target);\n }\n }\n\n /**\n * When hover exits, clear the details panel.\n *\n * @param {*} ev\n */\n item_mouseleave(ev) {\n if (ev.target && ev.target.matches(\".psp-autocomplete__item\")) {\n this._render_details_panel(ev.target);\n }\n }\n\n /**\n * Returns the `data-value` attribute of the currently selected item, or\n * `undefined` if there is no selection.\n */\n get_selected_value() {\n if (this._selection_index !== -1) {\n return this._list.children[this._selection_index].getAttribute(\"data-value\");\n }\n }\n\n /**\n * Clears the autocomplete widget and sets the widget's `display`\n * style to `none`.\n */\n clear() {\n this.hide();\n this._selection_index = -1;\n this._container.removeAttribute(\"style\");\n this._container.classList.add(\"undocked\");\n render(nothing, this._list);\n }\n\n /**\n * Displays the autocomplete and sets `this.displayed` to true.\n */\n display() {\n this._container.style.display = \"flex\";\n this.displayed = true;\n }\n\n /**\n * Hides the autocomplete, and sets `this.displayed` to false.\n */\n hide() {\n this._container.style.display = \"none\";\n this.displayed = false;\n }\n\n /**\n * Navigate to the next element inside the container.\n */\n _next() {\n const count = this._list.children.length;\n const idx = this._selection_index < count - 1 ? this._selection_index + 1 : count ? 0 : -1;\n this._go_to(idx);\n }\n\n /**\n * Go back one element inside the container.\n */\n _prev() {\n const count = this._list.children.length;\n const position = this._selection_index - 1;\n const idx = this._selection_index > -1 && position !== -1 ? position : count - 1;\n this._go_to(idx);\n }\n\n /**\n * Navigate to element `idx` inside the container.\n *\n * @param {Number} idx\n */\n _go_to(idx) {\n // liberally borrowed from awesomplete\n const children = this._list.children;\n\n if (this._selection_index > -1) {\n children[this._selection_index].setAttribute(\"aria-selected\", false);\n }\n\n // reset selection\n this._selection_index = idx;\n\n if (idx > -1 && children.length > 0) {\n children[idx].setAttribute(\"aria-selected\", \"true\");\n children[idx].scrollIntoView({\n block: \"nearest\"\n });\n\n this._render_details_panel(children[idx]);\n }\n }\n\n _render_details_panel(item) {\n // Because hover and keyboard events can interact, always clear before\n // re-rendering the details panel.\n this._clear_details_panel();\n\n if (item.hasAttribute(\"data-help\") && item.getAttribute(\"data-help\")) {\n this._container.classList.add(\"show-details\");\n const label = item.getAttribute(\"data-label\");\n const help = item.getAttribute(\"data-help\");\n const signature = item.getAttribute(\"data-signature\");\n\n const template = html`\n <span class=\"psp-autocomplete-item-detail__item--label\">${label}</span>\n <span class=\"psp-autocomplete-item-detail__item--signature\">${signature}</span>\n <span class=\"psp-autocomplete-item-detail__item--help\">${help}</span>\n `;\n\n render(template, this._details);\n\n this._details.scrollTop = 0;\n this._details.style.display = \"block\";\n }\n }\n\n /**\n * Remove and hide the details panel.\n */\n _clear_details_panel() {\n render(nothing, this._details);\n this._details.style.display = \"none\";\n this._container.classList.remove(\"show-details\");\n }\n\n /**\n * Map DOM IDs to class properties.\n */\n _register_ids() {\n this._container = this.shadowRoot.querySelector(\".psp-autocomplete-widget\");\n this._list = this.shadowRoot.querySelector(\".psp-autocomplete-widget__list\");\n this._details = this.shadowRoot.querySelector(\".psp-autocomplete-widget__details\");\n }\n\n /**\n * Map callback functions to class properties.\n */\n _register_callbacks() {\n // Dispatch a custom event on click & disable the `mousedown` handler\n this._list.addEventListener(\"click\", this.item_clicked.bind(this));\n this._list.addEventListener(\"mousedown\", ev => ev.preventDefault());\n this._list.addEventListener(\"mouseover\", this.item_mouseover.bind(this));\n this._list.addEventListener(\"mouseleave\", this.item_mouseleave.bind(this));\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {bindTemplate, throttlePromise} from \"./utils.js\";\n\nimport template from \"../html/expression_editor.html\";\n\nimport style from \"../less/expression_editor.less\";\n\n// Eslint complains here because we don't do anything, but actually we globally\n// register this class as a CustomElement\n@bindTemplate(template, style) // eslint-disable-next-line no-unused-vars\nclass PerspectiveExpressionEditor extends HTMLElement {\n constructor() {\n super();\n this._value = \"\";\n this._ignored_nodes = [\"BR\", \"DIV\"];\n }\n\n connectedCallback() {\n this._register_ids();\n this._register_callbacks();\n\n // `renderer` is a function that takes a string of content and\n // returns a string of valid HTML. The default renderer\n // splits the string by space and returns `span` elements.\n this.renderer = this._render_content;\n }\n\n /**\n * Replace the render function of the editor instance with a custom\n * renderer, which allows for full manipulation of the final rendered\n * output of the editor.\n *\n * @param {Function} render_function a function that takes a string and\n * returns a string of valid HTML.\n */\n set_renderer(render_function) {\n this.renderer = render_function;\n }\n\n /**\n * Analyze the content in the editor and redraw the selection caret every\n * time an `input` event is fired.\n */\n @throttlePromise\n update_content() {\n const selection = this.shadowRoot.getSelection();\n const tokens = this.get_tokens(this._edit_area);\n\n // Dispatch a `perspective-expression-editor-input` event,\n // signifying that the input has reached the editor but has not\n // been rendered into HTML yet\n const input_event = new CustomEvent(\"perspective-expression-editor-input\", {\n detail: {\n nodes: tokens.map(t => t.node),\n text: this._edit_area.textContent\n }\n });\n this.dispatchEvent(input_event);\n\n let anchor_idx = null;\n let focus_idx = null;\n let current_idx = 0;\n\n for (const token of tokens) {\n if (token.node === selection.anchorNode) {\n anchor_idx = current_idx + selection.anchorOffset;\n }\n\n if (token.node === selection.focusNode) {\n focus_idx = current_idx + selection.focusOffset;\n }\n\n current_idx += token.text.length;\n }\n\n this._value = tokens.map(t => t.text).join(\"\");\n\n if (this._value.length === 0) {\n // Clear input from the editor\n this.clear_content();\n } else {\n // Calls the `renderer` to transform a text string to DOM tokens,\n // but only when string.length > 0\n const markup = this.renderer(this._value, tokens);\n this._edit_area.innerHTML = markup;\n }\n\n this.restore_selection(anchor_idx, focus_idx);\n\n // Dispatch `perspective-expression-editor-rendered`, which signifies\n // that the editor UI has updated to its final state.\n const rendered_event = new CustomEvent(\"perspective-expression-editor-rendered\", {\n detail: {\n nodes: tokens.map(t => t.node),\n text: this._value\n }\n });\n\n this.dispatchEvent(rendered_event);\n }\n\n clear_content() {\n this._edit_area.innerHTML = \"\";\n }\n\n _render_content(content) {\n return `<span class=\"psp-expression__fragment\">${content}</span>`;\n }\n\n /**\n * After editor content has been rendered, \"un-reset\" the caret position\n * by returning it to where the user selected.\n *\n * @param {Number} absolute_anchor_idx\n * @param {Number} absolute_focus_idx\n */\n restore_selection(absolute_anchor_idx, absolute_focus_idx) {\n const selection = this.shadowRoot.getSelection();\n const tokens = this.get_tokens(this._edit_area);\n let anchor_node = this._edit_area;\n let anchor_idx = 0;\n let focus_node = this._edit_area;\n let focus_idx = 0;\n let current_idx = 0;\n\n for (const token of tokens) {\n const start_idx = current_idx;\n const end_idx = start_idx + token.text.length;\n\n if (start_idx <= absolute_anchor_idx && absolute_anchor_idx <= end_idx) {\n anchor_node = token.node;\n anchor_idx = absolute_anchor_idx - start_idx;\n }\n\n if (start_idx <= absolute_focus_idx && absolute_focus_idx <= end_idx) {\n focus_node = token.node;\n focus_idx = absolute_focus_idx - start_idx;\n }\n\n current_idx += token.text.length;\n }\n\n selection.setBaseAndExtent(anchor_node, anchor_idx, focus_node, focus_idx);\n }\n\n get_text() {\n return this._edit_area.textContent;\n }\n\n get_tokens(element) {\n const tokens = [];\n for (const node of element.childNodes) {\n if (this._ignored_nodes.includes(node.nodeName)) continue;\n switch (node.nodeType) {\n case Node.TEXT_NODE:\n tokens.push({text: node.nodeValue, node});\n break;\n case Node.ELEMENT_NODE:\n tokens.splice(tokens.length, 0, ...this.get_tokens(node));\n break;\n default:\n continue;\n }\n }\n return tokens;\n }\n\n focus() {\n this._edit_area.focus();\n }\n\n /**\n * Dispatch a `perspective-expression-editor-keyup` event containing\n * the original `keyup` event in `event.details`.\n *\n * @param {*} ev a `keyup` event.\n */\n keyup(ev) {\n const event = new CustomEvent(\"perspective-expression-editor-keyup\", {\n detail: ev\n });\n this.dispatchEvent(event);\n }\n\n /**\n * Dispatch a `perspective-expression-editor-keydown` event containing\n * the original `keyup` event in `event.details`.\n *\n * @param {*} ev a `keydown` event.\n */\n keydown(ev) {\n const event = new CustomEvent(\"perspective-expression-editor-keydown\", {\n detail: ev\n });\n this.dispatchEvent(event);\n }\n\n /**\n * When a column/text is dragged and dropped into the textbox, read it\n * properly and set selection state on the editor.\n *\n * @param {*} event\n */\n _capture_drop_data(event) {\n this._edit_area.focus();\n const data = event.dataTransfer.getData(\"text\");\n if (data !== \"\") {\n try {\n const parsed = JSON.parse(data);\n if (Array.isArray(parsed) && parsed.length > 4) {\n event.preventDefault();\n this._edit_area.textContent += `\"${parsed[0]}\"`;\n }\n } catch (e) {\n // regular text, don't do anything as browser will handle\n // the `drop` event.\n } finally {\n // When text is dropped into the editor, set the caret\n // at the end of the editor's text content as the default\n // selection fires with the caret at the beginning.\n this._reset_selection();\n this.update_content();\n }\n }\n }\n\n _reset_selection() {\n const selection = this.shadowRoot.getSelection();\n selection.setBaseAndExtent(selection.anchorNode, this._edit_area.textContent.length, selection.focusNode, this._edit_area.textContent.length);\n }\n\n /**\n * Map DOM IDs to class properties.\n */\n _register_ids() {\n this._edit_area = this.shadowRoot.querySelector(\".perspective-expression-editor__edit_area\");\n }\n\n /**\n * Map callback functions to class properties.\n */\n _register_callbacks() {\n this._edit_area.addEventListener(\"drop\", this._capture_drop_data.bind(this));\n this._edit_area.addEventListener(\"input\", this.update_content.bind(this));\n this._edit_area.addEventListener(\"keyup\", this.keyup.bind(this));\n this._edit_area.addEventListener(\"keydown\", this.keydown.bind(this));\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\nconst token_name_to_display_name = {\n columnName: \"column name\",\n leftParen: \"(\",\n rightParen: \")\",\n add: \"+\",\n subtract: \"-\",\n multiply: \"*\",\n divide: \"/\",\n percent_of: \"%\"\n};\n\nconst actual_token_to_string = token => {\n let actual;\n if (Array.isArray(token)) {\n actual = token\n .filter(x => x.tokenType.name !== \"EOF\")\n .map(x => {\n if (x.payload) {\n return x.payload;\n } else {\n return x.image;\n }\n });\n } else {\n actual = token.payload ? token.payload : token.image;\n }\n\n if (!actual || actual.length === 0) {\n actual = \"EOF\";\n }\n\n return actual;\n};\n\n/**\n * A custom error message provider for the Lexer.\n */\nexport const PerspectiveLexerErrorMessage = {\n /**\n * Builds an error message to be displayed when the Lexer finds an\n * unexpected character that cannot be matched.\n *\n * @param {*} fullText\n * @param {*} startOffset\n * @param {*} length\n * @param {*} line\n * @param {*} column\n */\n buildUnexpectedCharactersMessage: (fullText, startOffset, length, line, column) => {\n return `Ln ${line}, Col ${column}: Unexpected input \\`${fullText}\\` at character ${startOffset}`;\n }\n};\n\nexport const PerspectiveParserErrorMessage = {\n /**\n * Build an error message for when the parser is missing a mandatory token\n * in a repetition, i.e. `pow2` is a function name, but it requires a `(`\n * or column name to be syntactically correct.\n */\n buildEarlyExitMessage: options => {\n let actual = actual_token_to_string(options.actual);\n\n // A 2-dimensional array of expected paths\n const expected_path_names = options.expectedIterationPaths.map(expected => {\n let path = [];\n expected.map(x => {\n const name = \" - \" + token_name_to_display_name[x.name] ? token_name_to_display_name[x.name] : x.name;\n path.push(name);\n });\n return path.join(\", \");\n });\n return `Unexpected token: \\`${actual}\\`\\n\\nExpected one of the following tokens: \\n ${expected_path_names.join(\"\\n\")}`;\n },\n\n /**\n * Build an error message for when a token is mismatched, i.e. an opening\n * parenthesis without a matching closing parenthesis.\n */\n buildMismatchTokenMessage: options => {\n let actual = actual_token_to_string(options.actual);\n\n let expected = options.expected.name;\n\n if (token_name_to_display_name[expected]) {\n expected = token_name_to_display_name[expected];\n }\n\n let message = `Expecting token \\`${expected}\\`, but found \\`${actual}\\`.`;\n\n if (expected === \")\" || expected === \"rightParen\") {\n message += \"\\n\\nMake sure all left parentheses are matched\\nwith right parentheses.\";\n }\n\n return message;\n },\n\n /**\n * Build an error message for when a token does not fit into the grammar,\n * i.e. if the expression does not begin with a column name, `(`, or\n * any of the functional operators.\n */\n buildNoViableAltMessage: options => {\n let actual = actual_token_to_string(options.actual);\n let message = `Unexpected token: \\`${actual}\\`.`;\n\n if (options.ruleName === \"Expression\") {\n message += `\\n\\nExpected a column name, \\`(\\`,\\nor functional operator such as:\\n- \\`sqrt\\`\\n- \\`uppercase\\`\\n- \\`day_of_week\\``;\n } else if (options.ruleName === \"ColumnName\") {\n message += `\\n\\nExpected a column name or \\`(\\``;\n } else if (options.ruleName === \"TerminalColumnName\") {\n message += `\\n\\nExpected a column name after 'AS'`;\n }\n\n return message;\n }\n};\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\nimport {Lexer, createToken, tokenMatcher} from \"chevrotain\";\nimport {PerspectiveLexerErrorMessage} from \"./error\";\n\nexport const vocabulary = {};\n\n/**\n * Create token types to categorize computations:\n * - OperatorTokenType: operators that require left and right-hand side operands\n * - FunctionTokenType: operators that have 1...n comma separated parameters.\n */\nexport const OperatorTokenType = createToken({\n name: \"OperatorTokenType\",\n pattern: Lexer.NA\n});\n\nexport const FunctionTokenType = createToken({\n name: \"FunctionTokenType\",\n pattern: Lexer.NA\n});\n\nexport const ColumnNameTokenType = createToken({\n name: \"ColumnNameTokenType\",\n pattern: Lexer.NA\n});\n\nexport const UpperLowerCaseTokenType = createToken({\n name: \"UpperLowerTokenType\",\n pattern: /(uppercase|lowercase)/\n});\n\n// Create tokens for column names and computed function names\nexport const COLUMN_NAME_REGEX_PATTERN = /([\"'])(.*?[^\\\\])\\1/y;\n\n/**\n * Given a string from which to extract a column name, extract the column name\n * in-between the quotation marks and set it as the `payload` property. In the\n * CST visitor, use `.payload` to access the true column name value.\n *\n * @param {String} string\n * @param {Number} start_offset\n */\nconst match_column_name = function(string, start_offset) {\n COLUMN_NAME_REGEX_PATTERN.lastIndex = start_offset;\n const result = COLUMN_NAME_REGEX_PATTERN.exec(string);\n\n if (result !== null && result.length === 3) {\n result.payload = result[2]; // 2nd capture group is in-between quotes\n }\n\n return result;\n};\n\n// Column names are always encased inside quotes.\nexport const ColumnName = createToken({\n name: \"columnName\",\n pattern: {exec: match_column_name},\n line_breaks: false,\n categories: [ColumnNameTokenType]\n});\n\n// Allow users to specify custom names using `AS`\nexport const As = createToken({\n name: \"as\",\n label: \"Name new column as\",\n pattern: /(AS|As|as)/,\n longer_alt: UpperLowerCaseTokenType\n});\n\n// Mathematical operators, in the format \"x\" + \"y\"\n\nexport const Add = createToken({\n name: \"add\",\n label: \"+\",\n pattern: /\\+/,\n categories: [OperatorTokenType]\n});\n\nexport const Subtract = createToken({\n name: \"subtract\",\n label: \"-\",\n pattern: /\\-/,\n categories: [OperatorTokenType]\n});\n\nexport const Multiply = createToken({\n name: \"multiply\",\n label: \"*\",\n pattern: /\\*/,\n categories: [OperatorTokenType]\n});\n\nexport const Divide = createToken({\n name: \"divide\",\n label: \"/\",\n pattern: /\\//,\n categories: [OperatorTokenType]\n});\n\nexport const Pow = createToken({\n name: \"pow\",\n label: \"x ^ y\",\n pattern: /\\^/,\n categories: [OperatorTokenType]\n});\n\nexport const PercentOf = createToken({\n name: \"percent_of\",\n label: \"x % y\",\n pattern: /\\%/,\n categories: [OperatorTokenType]\n});\n\nexport const Equals = createToken({\n name: \"equals\",\n label: \"x == y\",\n pattern: /\\==/,\n categories: [OperatorTokenType]\n});\n\nexport const NotEquals = createToken({\n name: \"not_equals\",\n label: \"x != y\",\n pattern: /\\!=/,\n categories: [OperatorTokenType]\n});\n\nexport const GreaterThan = createToken({\n name: \"greater_than\",\n label: \"x > y\",\n pattern: /\\>/,\n categories: [OperatorTokenType]\n});\n\nexport const LessThan = createToken({\n name: \"less_than\",\n label: \"x < y\",\n pattern: /\\</,\n categories: [OperatorTokenType]\n});\n\nexport const Is = createToken({\n name: \"is\",\n label: \"x is y\",\n pattern: /is/,\n categories: [OperatorTokenType]\n});\n\n// Function operators, in the format func(\"x\")\nexport const Sqrt = createToken({\n name: \"sqrt\",\n label: \"sqrt(x)\",\n pattern: /sqrt/,\n categories: [FunctionTokenType]\n});\n\nexport const Pow2 = createToken({\n name: \"pow2\",\n label: \"x ^ 2\",\n pattern: /pow2/,\n categories: [FunctionTokenType]\n});\n\nexport const Abs = createToken({\n name: \"abs\",\n label: \"abs(x)\",\n pattern: /abs/,\n categories: [FunctionTokenType]\n});\n\nexport const Invert = createToken({\n name: \"invert\",\n label: \"1 / x\",\n pattern: /invert/,\n categories: [FunctionTokenType]\n});\n\nexport const Log = createToken({\n name: \"log\",\n label: \"log(x)\",\n pattern: /log/,\n categories: [FunctionTokenType]\n});\n\nexport const Exp = createToken({\n name: \"exp\",\n label: \"exp(x)\",\n pattern: /exp/,\n categories: [FunctionTokenType]\n});\n\n// Bucketing functions\n\nexport const Bin10 = createToken({\n name: \"bin10\",\n label: \"Bucket x by 10\",\n pattern: /bin10/,\n categories: [FunctionTokenType]\n});\n\nexport const Bin100 = createToken({\n name: \"bin100\",\n label: \"Bucket x by 100\",\n pattern: /bin100/,\n categories: [FunctionTokenType]\n});\n\nexport const Bin1000 = createToken({\n name: \"bin1000\",\n label: \"Bucket x by 1000\",\n pattern: /bin1000/,\n categories: [FunctionTokenType]\n});\n\nexport const Bin10th = createToken({\n name: \"bin10th\",\n label: \"Bucket x by 1/10\",\n pattern: /bin10th/,\n categories: [FunctionTokenType]\n});\n\nexport const Bin100th = createToken({\n name: \"bin100th\",\n label: \"Bucket x by 1/100\",\n pattern: /bin100th/,\n categories: [FunctionTokenType]\n});\n\nexport const Bin1000th = createToken({\n name: \"bin1000th\",\n label: \"Bucket x by 1/1000\",\n pattern: /bin1000th/,\n categories: [FunctionTokenType]\n});\n\n// String functions\n\nexport const Length = createToken({\n name: \"length\",\n label: \"length(x)\",\n pattern: /length/,\n categories: [FunctionTokenType]\n});\n\nexport const Lowercase = createToken({\n name: \"lowercase\",\n label: \"lowercase(x)\",\n pattern: /lowercase/,\n categories: [FunctionTokenType]\n});\n\nexport const Uppercase = createToken({\n name: \"uppercase\",\n label: \"uppercase(x)\",\n pattern: /uppercase/,\n categories: [FunctionTokenType]\n});\n\nexport const ConcatComma = createToken({\n name: \"concat_comma\",\n label: \"Concat(x, y) with comma\",\n pattern: /concat_comma/,\n categories: [FunctionTokenType]\n});\n\nexport const ConcatSpace = createToken({\n name: \"concat_space\",\n label: \"Concat(x, y) with space\",\n pattern: /concat_space/,\n categories: [FunctionTokenType]\n});\n\n// Date functions\n\nexport const HourOfDay = createToken({\n name: \"hour_of_day\",\n label: \"Hour of day\",\n pattern: /hour_of_day/,\n categories: [FunctionTokenType]\n});\n\nexport const DayOfWeek = createToken({\n name: \"day_of_week\",\n label: \"Day of week\",\n pattern: /day_of_week/,\n categories: [FunctionTokenType]\n});\n\nexport const MonthOfYear = createToken({\n name: \"month_of_year\",\n label: \"Month of year\",\n pattern: /month_of_year/,\n categories: [FunctionTokenType]\n});\n\nexport const SecondBucket = createToken({\n name: \"second_bucket\",\n label: \"Bucket(x) by seconds\",\n pattern: /second_bucket/,\n categories: [FunctionTokenType]\n});\n\nexport const MinuteBucket = createToken({\n name: \"minute_bucket\",\n label: \"Bucket(x) by minutes\",\n pattern: /minute_bucket/,\n categories: [FunctionTokenType]\n});\n\nexport const HourBucket = createToken({\n name: \"hour_bucket\",\n label: \"Bucket(x) by hours\",\n pattern: /hour_bucket/,\n categories: [FunctionTokenType]\n});\n\nexport const DayBucket = createToken({\n name: \"day_bucket\",\n pattern: /day_bucket/,\n label: \"Bucket(x) by day\",\n categories: [FunctionTokenType]\n});\n\nexport const WeekBucket = createToken({\n name: \"week_bucket\",\n pattern: /week_bucket/,\n label: \"Bucket(x) by week\",\n categories: [FunctionTokenType]\n});\n\nexport const MonthBucket = createToken({\n name: \"month_bucket\",\n pattern: /month_bucket/,\n label: \"Bucket(x) by month\",\n categories: [FunctionTokenType]\n});\n\nexport const YearBucket = createToken({\n name: \"year_bucket\",\n pattern: /year_bucket/,\n label: \"Bucket(x) by year\",\n categories: [FunctionTokenType]\n});\n\n// Parenthesis\nexport const LeftParen = createToken({\n name: \"leftParen\",\n label: \"(\",\n pattern: /\\(/\n});\n\nexport const RightParen = createToken({\n name: \"rightParen\",\n label: \")\",\n pattern: /\\)/\n});\n\n// Comma\nexport const Comma = createToken({\n name: \"comma\",\n label: \",\",\n pattern: /,/\n});\n\n// Whitespace\nexport const Whitespace = createToken({\n name: \"whitespace\",\n pattern: /\\s+/\n});\n\n// Order of tokens is important\nconst tokens = [\n Whitespace,\n Comma,\n As,\n ColumnName,\n LeftParen,\n RightParen,\n Add,\n Subtract,\n Multiply,\n Divide,\n Pow,\n PercentOf,\n Equals,\n NotEquals,\n GreaterThan,\n LessThan,\n Sqrt,\n Pow2,\n Abs,\n Invert,\n Log,\n Exp,\n Bin1000th,\n Bin1000,\n Bin100th,\n Bin100,\n Bin10th,\n Bin10,\n Length,\n Is,\n ConcatComma,\n ConcatSpace,\n Uppercase,\n Lowercase,\n HourOfDay,\n DayOfWeek,\n MonthOfYear,\n SecondBucket,\n MinuteBucket,\n HourBucket,\n DayBucket,\n WeekBucket,\n MonthBucket,\n YearBucket,\n UpperLowerCaseTokenType\n];\n\nexport const function_tokens = [];\nexport const operator_tokens = [];\n\n// Add each token to the vocabulary exported for the Parser\ntokens.forEach(t => {\n vocabulary[t.name] = t;\n let raw = t.PATTERN.source;\n if (raw) {\n if (raw.indexOf(\"\\\\\") == 0) {\n raw = raw.substring(1);\n }\n }\n\n if (tokenMatcher(t, FunctionTokenType)) {\n function_tokens.push(raw);\n } else if (tokenMatcher(t, OperatorTokenType)) {\n operator_tokens.push(raw);\n }\n});\n\nexport const ComputedExpressionColumnLexer = new Lexer(tokens, {\n errorMessageProvider: PerspectiveLexerErrorMessage\n});\n\n/**\n * Return a list of tokens with whitespace tokens removed, as the parser and\n * visitor do not support whitespace tokens (but they are needed for the\n * expression editor to function correctly).\n *\n * @param {Array{IToken}} tokens\n */\nexport const clean_tokens = function(tokens) {\n const cleaned_tokens = [];\n\n for (const token of tokens) {\n if (!tokenMatcher(token, Whitespace)) {\n cleaned_tokens.push(token);\n }\n }\n\n return cleaned_tokens;\n};\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\nimport {CstParser} from \"chevrotain\";\nimport {PerspectiveParserErrorMessage} from \"./error\";\n\n/**\n * A Chevrotain expression parser that produces a concrete syntax tree\n * representing every single parsed token.\n */\nexport class ComputedExpressionColumnParser extends CstParser {\n constructor(vocabulary) {\n super(vocabulary, {\n errorMessageProvider: PerspectiveParserErrorMessage\n });\n\n /**\n * The overarching rule - required so that one single array of\n * parsed computed columns can be maintained across multiple operator,\n * functional, and parenthetical expressions.\n */\n this.RULE(\"SuperExpression\", () => {\n this.SUBRULE(this.Expression);\n });\n\n /**\n * The `base rule` for all expressions, except that the state of the\n * computed column array can be changed between each invocation of\n * this rule.\n */\n this.RULE(\"Expression\", () => {\n this.SUBRULE(this.OperatorComputedColumn);\n });\n\n /**\n * A computed column in `x + y` notation. Because it appears earlier,\n * it has lower precedence compared to the rules that are to follow.\n */\n this.RULE(\"OperatorComputedColumn\", () => {\n this.SUBRULE(this.AdditionOperatorComputedColumn, {LABEL: \"left\"});\n\n // 0...n operators and right-hand expressions are available here.\n // Though a single column name is syntactically valid, it does\n // not actually generate any computed columns. However, this\n // rule must allow for 0...n and not 1...n as it allows for\n // a function-only expression (`sqrt(\"a\")`) without a right\n // hand side of the expression.\n this.MANY(() => {\n this.SUBRULE(this.Operator);\n this.SUBRULE2(this.AdditionOperatorComputedColumn, {LABEL: \"right\"});\n this.OPTION(() => {\n this.SUBRULE(this.As, {LABEL: \"as\"});\n });\n });\n });\n\n /**\n * A computed column in `x + y` or `x - y` notation. To maintain a\n * notion of operator precedence, different rules must be created for\n * add/subtract and multiply/divide operators, even if the actual\n * evaluator logic is the same.\n */\n this.RULE(\"AdditionOperatorComputedColumn\", () => {\n this.SUBRULE(this.MultiplicationOperatorComputedColumn, {LABEL: \"left\"});\n this.MANY(() => {\n this.SUBRULE(this.AdditionOperator);\n this.SUBRULE2(this.MultiplicationOperatorComputedColumn, {LABEL: \"right\"});\n this.OPTION(() => {\n this.SUBRULE(this.As, {LABEL: \"as\"});\n });\n });\n });\n\n /**\n * A computed column in `x * y` or `x / y` notation. Because it is\n * defined after the addition and generic operators, it is evaluated\n * before the addition/generic operators - hence satisfying precedence.\n */\n this.RULE(\"MultiplicationOperatorComputedColumn\", () => {\n this.SUBRULE(this.ExponentOperatorComputedColumn, {LABEL: \"left\"});\n this.MANY(() => {\n this.SUBRULE(this.MultiplicationOperator);\n this.SUBRULE2(this.ExponentOperatorComputedColumn, {LABEL: \"right\"});\n this.OPTION(() => {\n this.SUBRULE(this.As, {LABEL: \"as\"});\n });\n });\n });\n\n /**\n * A computed column in `x ^ y` notation. Exponents are evaluated before\n * multiplication/division and addition/subtraction, so it is defined\n * after those rules to give itself precedence.\n */\n this.RULE(\"ExponentOperatorComputedColumn\", () => {\n this.SUBRULE(this.ColumnName, {LABEL: \"left\"});\n this.MANY(() => {\n this.SUBRULE(this.ExponentOperator);\n this.SUBRULE2(this.ColumnName, {LABEL: \"right\"});\n this.OPTION(() => {\n this.SUBRULE(this.As, {LABEL: \"as\"});\n });\n });\n });\n\n /**\n * A computed column in `f(x)` notation. It is evaluated before all\n * operator computed columns.\n */\n this.RULE(\"FunctionComputedColumn\", () => {\n this.SUBRULE(this.Function);\n this.CONSUME(vocabulary[\"leftParen\"]);\n\n this.AT_LEAST_ONE_SEP({\n SEP: vocabulary[\"comma\"],\n DEF: () => {\n // Allow for arbitary expressions inside functions without\n // use of parentheses.\n this.SUBRULE(this.Expression, {LABEL: \"param\"});\n }\n });\n this.CONSUME(vocabulary[\"rightParen\"]);\n this.OPTION(() => {\n this.SUBRULE(this.As, {LABEL: \"as\"});\n });\n });\n\n this.RULE(\"Function\", () => {\n this.OR([\n {ALT: () => this.CONSUME(vocabulary[\"sqrt\"])},\n {ALT: () => this.CONSUME(vocabulary[\"pow2\"])},\n {ALT: () => this.CONSUME(vocabulary[\"abs\"])},\n {ALT: () => this.CONSUME(vocabulary[\"invert\"])},\n {ALT: () => this.CONSUME(vocabulary[\"log\"])},\n {ALT: () => this.CONSUME(vocabulary[\"exp\"])},\n {ALT: () => this.CONSUME(vocabulary[\"bin1000th\"])},\n {ALT: () => this.CONSUME(vocabulary[\"bin1000\"])},\n {ALT: () => this.CONSUME(vocabulary[\"bin100th\"])},\n {ALT: () => this.CONSUME(vocabulary[\"bin100\"])},\n {ALT: () => this.CONSUME(vocabulary[\"bin10th\"])},\n {ALT: () => this.CONSUME(vocabulary[\"bin10\"])},\n {ALT: () => this.CONSUME(vocabulary[\"length\"])},\n {ALT: () => this.CONSUME(vocabulary[\"uppercase\"])},\n {ALT: () => this.CONSUME(vocabulary[\"lowercase\"])},\n {ALT: () => this.CONSUME(vocabulary[\"concat_comma\"])},\n {ALT: () => this.CONSUME(vocabulary[\"concat_space\"])},\n {ALT: () => this.CONSUME(vocabulary[\"hour_of_day\"])},\n {ALT: () => this.CONSUME(vocabulary[\"day_of_week\"])},\n {ALT: () => this.CONSUME(vocabulary[\"month_of_year\"])},\n {ALT: () => this.CONSUME(vocabulary[\"second_bucket\"])},\n {ALT: () => this.CONSUME(vocabulary[\"minute_bucket\"])},\n {ALT: () => this.CONSUME(vocabulary[\"hour_bucket\"])},\n {ALT: () => this.CONSUME(vocabulary[\"day_bucket\"])},\n {ALT: () => this.CONSUME(vocabulary[\"week_bucket\"])},\n {ALT: () => this.CONSUME(vocabulary[\"month_bucket\"])},\n {ALT: () => this.CONSUME(vocabulary[\"year_bucket\"])}\n ]);\n });\n\n /**\n * Consume an addition or subtraction symbol. Rules for operators with\n * defined precedence rules are separated from the general\n * `Operator` rule.\n */\n this.RULE(\"AdditionOperator\", () => {\n this.OR([{ALT: () => this.CONSUME(vocabulary[\"add\"])}, {ALT: () => this.CONSUME(vocabulary[\"subtract\"])}]);\n });\n\n this.RULE(\"MultiplicationOperator\", () => {\n this.OR([{ALT: () => this.CONSUME(vocabulary[\"multiply\"])}, {ALT: () => this.CONSUME(vocabulary[\"divide\"])}]);\n });\n\n this.RULE(\"ExponentOperator\", () => {\n this.CONSUME(vocabulary[\"pow\"]);\n });\n\n this.RULE(\"Operator\", () => {\n this.OR([\n {ALT: () => this.CONSUME(vocabulary[\"percent_of\"])},\n {ALT: () => this.CONSUME(vocabulary[\"equals\"])},\n {ALT: () => this.CONSUME(vocabulary[\"not_equals\"])},\n {ALT: () => this.CONSUME(vocabulary[\"greater_than\"])},\n {ALT: () => this.CONSUME(vocabulary[\"less_than\"])},\n {ALT: () => this.CONSUME(vocabulary[\"is\"])}\n ]);\n });\n\n /**\n * A special rule for column names used as alias after `as` to prevent\n * further evaluation of possible expressions.\n */\n this.RULE(\"TerminalColumnName\", () => {\n this.CONSUME(vocabulary[\"columnName\"]);\n });\n\n /**\n * A rule for aliasing computed columns - placed at the top so that it\n * is evaluated after everything else.\n *\n * TODO: make AS left evaluative by default: an expression like\n * x + y + z as \"abc\" currently breaks to abc + z, when it should be\n * x + abc.\n */\n this.RULE(\"As\", () => {\n this.CONSUME(vocabulary[\"as\"]);\n this.SUBRULE(this.TerminalColumnName);\n });\n\n /**\n * A column name, which can evaluate to a parenthetical expression,\n * a functional column, or a literal column name - a string\n * wrapped in double or single quotes.\n */\n this.RULE(\"ColumnName\", () => {\n this.OR([{ALT: () => this.SUBRULE(this.ParentheticalExpression)}, {ALT: () => this.SUBRULE(this.FunctionComputedColumn)}, {ALT: () => this.CONSUME(vocabulary[\"columnName\"])}], {\n ERR_MSG: \"Expected a column name (wrapped in double quotes) or a parenthesis-wrapped expression.\"\n });\n });\n\n /**\n * The rule for parenthetical expressions, which consume parentheses\n * and resolve to this.Expression. Because it is lowest in the\n * tree, it is evaluated before everything else.\n */\n this.RULE(\"ParentheticalExpression\", () => {\n this.CONSUME(vocabulary[\"leftParen\"]);\n this.SUBRULE(this.Expression);\n this.CONSUME(vocabulary[\"rightParen\"]);\n });\n\n this.performSelfAnalysis();\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\n// TODO: these have been renamed compared to old computed columns, make sure\n// names are consistent throughout.\nexport const COMPUTED_FUNCTION_FORMATTERS = {\n \"+\": (x, y) => `(${x} + ${y})`,\n \"-\": (x, y) => `(${x} - ${y})`,\n \"*\": (x, y) => `(${x} * ${y})`,\n \"/\": (x, y) => `(${x} / ${y})`,\n \"%\": (x, y) => `(${x} %% ${y})`,\n \"==\": (x, y) => `(${x} == ${y})`,\n \"!=\": (x, y) => `(${x} != ${y})`,\n \">\": (x, y) => `(${x} > ${y})`,\n \"<\": (x, y) => `(${x} < ${y})`,\n \"^\": (x, y) => `(${x} ^ ${y})`,\n invert: x => `(1 / ${x})`,\n log: x => `log(${x})`,\n exp: x => `exp(${x})`,\n pow2: x => `(${x} ^ 2)`,\n sqrt: x => `sqrt(${x})`,\n abs: x => `abs(${x})`,\n bin10: x => `bin10(${x})`,\n bin100: x => `bin100(${x})`,\n bin1000: x => `bin1000(${x})`,\n bin10th: x => `bin10th(${x})`,\n bin100th: x => `bin100th(${x})`,\n bin1000th: x => `bin1000th(${x})`,\n uppercase: x => `uppercase(${x})`,\n lowercase: x => `lowercase(${x})`,\n length: x => `length(${x})`,\n is: (x, y) => `(${x} is ${y})`,\n concat_space: (x, y) => `concat_space(${x}, ${y})`,\n concat_comma: (x, y) => `concat_comma(${x}, ${y})`,\n hour_of_day: x => `hour_of_day(${x})`,\n day_of_week: x => `day_of_week(${x})`,\n month_of_year: x => `month_of_year(${x})`,\n second_bucket: x => `second_bucket(${x})`,\n minute_bucket: x => `minute_bucket(${x})`,\n hour_bucket: x => `hour_bucket(${x})`,\n day_bucket: x => `day_bucket(${x})`,\n week_bucket: x => `week_bucket(${x})`,\n month_bucket: x => `month_bucket(${x})`,\n year_bucket: x => `year_bucket(${x})`\n};\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\nimport {Lexer, createToken, tokenMatcher} from \"chevrotain\";\nimport {PerspectiveLexerErrorMessage} from \"./error\";\nimport {clean_tokens, Comma, ColumnName, As, Whitespace, LeftParen, RightParen, OperatorTokenType, FunctionTokenType, UpperLowerCaseTokenType} from \"./lexer\";\nimport {ComputedExpressionColumnParser} from \"./parser\";\nimport {COMPUTED_FUNCTION_FORMATTERS} from \"./formatter\";\n\nconst token_types = {FunctionTokenType, OperatorTokenType};\n\n/**\n * A more complex suggestion object for computed expressions, which may suggest\n * functions, operators, and column names, each with their own metadata.\n */\nexport class ComputedExpressionAutocompleteSuggestion {\n /**\n * Construct a new autocomplete suggestion.\n *\n * @param {String} label the text shown to the user\n * @param {String} value the text used to replace inside the input\n * @param {String} pattern the actual string that makes up the token\n * @param {String} signature a Typescript-style signature for the function\n * @param {String} help a help string displayed in the UI\n * @param {Array<String>} input_types input data types for the suggestion\n * function or operator.\n * @param {String} return_type the return type of the computed column\n * @param {Number} num_params the number of input columns required by the\n * function or operator.\n * @param {Boolean} is_column_name whether the item is a column name or not,\n * as additional styling will be applied to column names.\n */\n constructor({label, value, pattern, signature, help, input_types, return_type, num_params, is_column_name} = {}) {\n this.label = label;\n this.value = value;\n this.pattern = pattern;\n this.input_types = input_types;\n this.return_type = return_type;\n this.num_params = num_params;\n this.signature = signature;\n this.help = help;\n this.is_column_name = is_column_name || false;\n }\n}\n\nclass PerspectiveComputedExpressionParser {\n constructor() {\n this.is_initialized = false;\n this._vocabulary = {};\n this._tokens = [Whitespace, Comma, As, ColumnName, LeftParen, RightParen];\n this._metadata;\n this._lexer;\n this._parser;\n this._visitor;\n }\n\n init(metadata) {\n if (this.is_initialized) {\n return;\n }\n\n // Add base tokens to the vocabulary\n for (const token of this._tokens) {\n this._vocabulary[token.name] = token;\n }\n\n // Computed function metadata from the Perspective table\n this._metadata = metadata;\n\n // Initialize lexer, parser, and visitor\n this._lexer = this._construct_lexer();\n this._parser = this._construct_parser();\n this._visitor = this._construct_visitor();\n\n this.is_initialized = true;\n }\n\n /**\n * Given an expression, transform it into a list of tokens.\n *\n * @param {String} expression\n */\n lex(expression) {\n this._check_initialized();\n const result = this._lexer.tokenize(expression);\n\n // Remove whitespace tokens\n result.tokens = clean_tokens(result.tokens);\n\n return result;\n }\n\n /**\n * Given a string expression of the form '\"column\" +, -, *, / \"column\",\n * parse it and return a computed column configuration object.\n *\n * @param {String} expression\n */\n parse(expression) {\n this._check_initialized();\n const lex_result = this.lex(expression);\n\n if (lex_result.errors.length > 0) {\n let message = lex_result.errors[0].message;\n throw new Error(message);\n }\n\n // calling `parser.input` resets state.\n this._parser.input = lex_result.tokens;\n\n const cst = this._parser.SuperExpression();\n\n if (this._parser.errors.length > 0) {\n let message = this._parser.errors[0].message;\n throw new Error(message);\n }\n\n return this._visitor.visit(cst);\n }\n\n /**\n * Given a lexer result and the raw expression that was lexed,\n * suggest syntactically possible tokens. If the last non-whitespace/comma\n * token is a column name, only show operators that take the correct type.\n *\n * @param {ILexingResult} lexer_result\n * @param {String} expression\n * @param {Array[String]} input_types an array of data types by which to\n * filter down the suggestions.\n * @param {Boolean} match_types whether suggestions should have matching\n * input and return types.\n * @returns {Array}\n */\n get_autocomplete_suggestions(expression, lexer_result, input_types, match_types) {\n this._check_initialized();\n let initial_suggestions = this._parser.computeContentAssist(\"SuperExpression\", []);\n\n if (!lexer_result) {\n return this._apply_suggestion_metadata(initial_suggestions);\n }\n\n if (lexer_result.errors.length > 0) {\n // Check if the last string fragment is partial AND not a\n // column name (not in quotes). If true, the suggest function\n // names that match.\n const partial_function = this.extract_partial_function(expression);\n\n // If the last fragment is partial, check if the last parsed\n // token is a column name, as we should not be sending suggestions\n // for a partial function that immediately follows a column name,\n // i.e. `\"Sales\" a`.\n const last_token = this.get_last_token(lexer_result);\n const is_column_name = last_token && tokenMatcher(last_token, ColumnName);\n\n if (partial_function && partial_function.search(/[\"']$/) === -1 && !is_column_name) {\n // Remove open parenthesis\n const suggestions = this._apply_suggestion_metadata(initial_suggestions.slice(1), input_types);\n const exact_matches = [];\n const fuzzy_matches = [];\n\n for (const suggestion of suggestions) {\n const lower_value = suggestion.value.toLowerCase().trim();\n const lower_input = partial_function.toLowerCase().trim();\n\n if (lower_value.startsWith(lower_input)) {\n exact_matches.push(suggestion);\n } else if (lower_value.includes(lower_input)) {\n fuzzy_matches.push(suggestion);\n }\n }\n return exact_matches.concat(fuzzy_matches);\n } else {\n // Expression has unrecoverable errors\n return [];\n }\n }\n\n // Remove whitespace tokens\n lexer_result.tokens = clean_tokens(lexer_result.tokens);\n const suggestions = this._parser.computeContentAssist(\"SuperExpression\", lexer_result.tokens);\n return this._apply_suggestion_metadata(suggestions, input_types, match_types);\n }\n\n /**\n * Try to extract a partial function name, i.e. a string not within quotes\n * and not ending with a parenthesis.\n *\n * - \"Sales\" + (s => \"s\"\n * - \"(ab\" => \"ab\"\n *\n * @param {String} expression\n */\n extract_partial_function(expression) {\n this._check_initialized();\n const matches = expression.match(/([^(,\\s]+$)/);\n\n if (matches && matches.length > 0) {\n const partial = matches[0];\n\n // Ignore if match is a partial column name, i.e. has quotes\n if (!/['\"]/.test(partial)) {\n return matches[0];\n }\n }\n }\n\n /**\n * Return the last token from a lexer result, or undefined if there are no\n * tokens at all. Whitespace tokens are NOT removed before search.\n *\n * @param {ILexingResult} lexer_result\n */\n get_last_token(lexer_result) {\n const tokens = lexer_result.tokens;\n const last_idx = tokens.length - 1;\n if (last_idx >= 0) {\n return tokens[last_idx];\n }\n }\n\n /**\n * Look backwards through a list of tokens, checking whether each token is\n * of a type in the `types` array, stopping after `limit` tokens.\n * Whitespace tokens are NOT removed before search.\n *\n * @param {Array{TokenType}} types An array of token types to look through.\n * @param {ILexingResult} lexer_result A result from the lexer, containing\n * valid tokens and errors.\n * @param {Number} limit the number of tokens to search through before\n * exiting or returning a valid result. If limit > tokens.length or is\n * undefined, search all tokens.\n */\n get_last_token_with_types(types, lexer_result, limit) {\n const tokens = lexer_result.tokens;\n if (!limit || limit <= 0 || limit >= tokens.length) {\n limit = tokens.length;\n }\n for (let i = tokens.length - 1; i >= tokens.length - limit; i--) {\n for (const type of types) {\n if (tokenMatcher(tokens[i], type)) {\n return tokens[i];\n }\n }\n }\n }\n\n /**\n * Given a metadata object containing information about computed\n * functions, construct tokens and a vocabulary object for the parser.\n */\n _construct_lexer() {\n const bin_functions = [\"bin1000th\", \"bin1000\", \"bin100th\", \"bin100\", \"bin10th\", \"bin10\"];\n\n for (const key in this._metadata) {\n const meta = this._metadata[key];\n\n if (bin_functions.includes(meta.name)) {\n continue;\n }\n\n const token = this._make_token(meta);\n this._tokens.push(token);\n this._vocabulary[token.name] = token;\n }\n\n // Create and add bin functions in a specific order for the parser\n for (const bin_function of bin_functions) {\n const meta = this._metadata[bin_function];\n const token = this._make_token(meta);\n this._tokens.push(token);\n this._vocabulary[token.name] = token;\n }\n\n // Add uppercase/lowercase token last so it does not conflict\n this._tokens.push(UpperLowerCaseTokenType);\n this._vocabulary[UpperLowerCaseTokenType.name] = UpperLowerCaseTokenType;\n\n return new Lexer(this._tokens, {\n errorMessageProvider: PerspectiveLexerErrorMessage\n });\n }\n\n /**\n * Convenience method to create a Chevrotain token.\n *\n * @param {Object} meta\n */\n _make_token(meta) {\n const regex = new RegExp(meta.pattern);\n\n const token = createToken({\n name: meta.name,\n label: meta.label,\n pattern: regex,\n categories: [token_types[meta.category]]\n });\n\n // float/int and date/datetime are interchangable\n if (meta.input_type === \"float\") {\n token.input_types = [\"float\", \"integer\"];\n } else if (meta.input_type === \"datetime\") {\n token.input_types = [\"datetime\", \"date\"];\n } else {\n token.input_types = [meta.input_type];\n }\n\n token.return_type = meta.return_type;\n token.num_params = meta.num_params;\n token.signature = meta.signature;\n token.help = meta.help;\n\n return token;\n }\n\n /**\n * Construct a singleton parser instance that will be reused.\n */\n _construct_parser() {\n return new ComputedExpressionColumnParser(this._vocabulary);\n }\n\n /**\n * Define and construct a singleton visitor instance.\n */\n _construct_visitor() {\n const base_visitor = this._parser.getBaseCstVisitorConstructor();\n\n // The visitor has to be defined inside this method, as it requires\n // base_visitor from the parser instance\n class ComputedExpressionColumnVisitor extends base_visitor {\n constructor() {\n super();\n this.validateVisitor();\n }\n\n /**\n * Given a parsed expression, visit each node and return an array\n * of computed column specifications representing the recursive\n * tree-walk of all computed columns and their dependencies.\n *\n * @param {*} ctx\n */\n SuperExpression(ctx) {\n let computed_columns = [];\n\n this.visit(ctx.Expression, computed_columns);\n\n // An expression may be syntactically valid but does not\n // generate new computed columns, i.e. the expression '\"Sales\"',\n // which is syntactically valid but does not have enough\n // information to generate a computed column. In the future\n // when each column is editable as an expression by default,\n // this will not be an issue.\n if (computed_columns.length === 0) {\n throw new Error(\"Expression did not generate any computed columns\");\n }\n\n return computed_columns;\n }\n\n Expression(ctx, computed_columns) {\n return this.visit(ctx.OperatorComputedColumn, computed_columns);\n }\n\n /**\n * Common logic for parsing through a computed column in operator\n * syntax, with `get_operator` returning an operator of the\n * correct type, which is important for associativity.\n *\n * @param {*} ctx\n * @param {*} computed_columns\n * @param {*} get_operator\n */\n _VisitOperatorComputedColumn(ctx, computed_columns, get_operator) {\n let left = this.visit(ctx.left, computed_columns);\n\n let final_column_name;\n\n if (ctx.right) {\n let previous;\n\n ctx.right.forEach((rhs, idx) => {\n let operator = get_operator(ctx, idx);\n\n if (!operator) {\n return;\n }\n\n let right = this.visit(rhs, computed_columns);\n\n // If there is a previous value, use it, otherwise use\n // the leftmost value. This enables expressions such as\n // a + b / c * d + e ... ad infinitum\n const left_hand = previous ? previous : left;\n\n // Use custom name if provided through `AS/as/As`\n let as;\n\n if (ctx.as && idx < ctx.as.length) {\n as = this.visit(ctx.as[idx]);\n }\n\n const column_name = as ? as : COMPUTED_FUNCTION_FORMATTERS[operator](left_hand, right);\n\n computed_columns.push({\n column: column_name,\n computed_function_name: operator,\n inputs: [left_hand, right]\n });\n\n previous = column_name;\n });\n\n final_column_name = previous;\n } else {\n // If there are no more right-hand tokens, return the\n // column name so it can be used as the tree traversal\n // goes upwards.\n final_column_name = left;\n }\n\n return final_column_name;\n }\n\n /**\n * Visit a single computed column in operator notation and generate\n * its specification.\n *\n * @param {*} ctx\n */\n OperatorComputedColumn(ctx, computed_columns) {\n const get_operator = (ctx, idx) => this.visit(ctx.Operator[idx]);\n return this._VisitOperatorComputedColumn(ctx, computed_columns, get_operator);\n }\n\n AdditionOperatorComputedColumn(ctx, computed_columns) {\n const get_operator = (ctx, idx) => this.visit(ctx.AdditionOperator[idx]);\n return this._VisitOperatorComputedColumn(ctx, computed_columns, get_operator);\n }\n\n MultiplicationOperatorComputedColumn(ctx, computed_columns) {\n const get_operator = (ctx, idx) => this.visit(ctx.MultiplicationOperator[idx]);\n return this._VisitOperatorComputedColumn(ctx, computed_columns, get_operator);\n }\n\n ExponentOperatorComputedColumn(ctx, computed_columns) {\n const get_operator = (ctx, idx) => this.visit(ctx.ExponentOperator[idx]);\n return this._VisitOperatorComputedColumn(ctx, computed_columns, get_operator);\n }\n\n /**\n * Visit a single computed column in functional notation and\n * generate its specification.\n *\n * @param {*} ctx\n * @param {*} computed_columns\n */\n FunctionComputedColumn(ctx, computed_columns) {\n const fn = this.visit(ctx.Function);\n\n // Functions have 1...n parameters\n let input_columns = [];\n\n for (const param of ctx.param) {\n input_columns.push(this.visit(param, computed_columns));\n }\n\n // Use custom name if provided through `AS/as/As`me =\n const as = this.visit(ctx.as);\n const column_name = as ? as : COMPUTED_FUNCTION_FORMATTERS[fn](...input_columns);\n\n const computed = {\n column: column_name,\n computed_function_name: fn,\n inputs: input_columns\n };\n\n computed_columns.push(computed);\n\n // Return the column name so it can be used up the chain\n return column_name;\n }\n\n /**\n * Parse and return a column name to be included in the computed\n * config.\n * @param {*} ctx\n */\n ColumnName(ctx, computed_columns) {\n // `image` contains the raw string, `payload` contains the\n // string without quotes.\n if (ctx.ParentheticalExpression) {\n return this.visit(ctx.ParentheticalExpression, computed_columns);\n } else if (ctx.FunctionComputedColumn) {\n return this.visit(ctx.FunctionComputedColumn, computed_columns);\n } else {\n return ctx.columnName[0].payload;\n }\n }\n\n /**\n * Parse and return a column name to be included in the computed\n * config, and explicitly not parsed as a parenthetical expression.\n *\n * @param {*} ctx\n */\n TerminalColumnName(ctx) {\n return ctx.columnName[0].payload;\n }\n\n AdditionOperator(ctx) {\n if (ctx.add) {\n return ctx.add[0].image;\n } else if (ctx.subtract) {\n return ctx.subtract[0].image;\n }\n }\n\n MultiplicationOperator(ctx) {\n if (ctx.multiply) {\n return ctx.multiply[0].image;\n } else if (ctx.divide) {\n return ctx.divide[0].image;\n }\n }\n\n ExponentOperator(ctx) {\n if (ctx.pow) {\n return ctx.pow[0].image;\n }\n }\n\n /**\n * Parse a single mathematical operator (+, -, *, /, %).\n * @param {*} ctx\n */\n Operator(ctx) {\n if (ctx.percent_of) {\n return ctx.percent_of[0].image;\n } else if (ctx.equals) {\n return ctx.equals[0].image;\n } else if (ctx.not_equals) {\n return ctx.not_equals[0].image;\n } else if (ctx.greater_than) {\n return ctx.greater_than[0].image;\n } else if (ctx.less_than) {\n return ctx.less_than[0].image;\n } else if (ctx.is) {\n return ctx.is[0].image;\n } else {\n return;\n }\n }\n\n /**\n * Identify and return a function name used for computation.\n *\n * @param {*} ctx\n */\n Function(ctx) {\n if (ctx.sqrt) {\n return ctx.sqrt[0].image;\n } else if (ctx.pow2) {\n return ctx.pow2[0].image;\n } else if (ctx.abs) {\n return ctx.abs[0].image;\n } else if (ctx.invert) {\n return ctx.invert[0].image;\n } else if (ctx.log) {\n return ctx.log[0].image;\n } else if (ctx.exp) {\n return ctx.exp[0].image;\n } else if (ctx.length) {\n return ctx.length[0].image;\n } else if (ctx.uppercase) {\n return ctx.uppercase[0].image;\n } else if (ctx.lowercase) {\n return ctx.lowercase[0].image;\n } else if (ctx.concat_comma) {\n return ctx.concat_comma[0].image;\n } else if (ctx.concat_space) {\n return ctx.concat_space[0].image;\n } else if (ctx.bin10) {\n return ctx.bin10[0].image;\n } else if (ctx.bin100) {\n return ctx.bin100[0].image;\n } else if (ctx.bin1000) {\n return ctx.bin1000[0].image;\n } else if (ctx.bin10th) {\n return ctx.bin10th[0].image;\n } else if (ctx.bin100th) {\n return ctx.bin100th[0].image;\n } else if (ctx.bin1000th) {\n return ctx.bin1000th[0].image;\n } else if (ctx.hour_of_day) {\n return ctx.hour_of_day[0].image;\n } else if (ctx.day_of_week) {\n return ctx.day_of_week[0].image;\n } else if (ctx.month_of_year) {\n return ctx.month_of_year[0].image;\n } else if (ctx.second_bucket) {\n return ctx.second_bucket[0].image;\n } else if (ctx.minute_bucket) {\n return ctx.minute_bucket[0].image;\n } else if (ctx.hour_bucket) {\n return ctx.hour_bucket[0].image;\n } else if (ctx.day_bucket) {\n return ctx.day_bucket[0].image;\n } else if (ctx.week_bucket) {\n return ctx.week_bucket[0].image;\n } else if (ctx.month_bucket) {\n return ctx.month_bucket[0].image;\n } else if (ctx.year_bucket) {\n return ctx.year_bucket[0].image;\n } else {\n return;\n }\n }\n\n /**\n * Give a custom name to the created computed column using \"AS\"\n * or \"as\".\n *\n * @param {*} ctx\n */\n As(ctx) {\n return ctx.TerminalColumnName[0].children.columnName[0].payload;\n }\n\n /**\n * Parse an expression inside parentheses through recursing back\n * up to `Expression`.\n *\n * @param {*} ctx\n * @param {*} computed_columns\n */\n ParentheticalExpression(ctx, computed_columns) {\n return this.visit(ctx.Expression, computed_columns);\n }\n }\n\n return new ComputedExpressionColumnVisitor();\n }\n\n /**\n * Given a list of suggestions, transform each suggestion into an object\n * with `label` and `value`.\n *\n * @param {Array} suggestions\n * @param {Array[String]} input_types an array of input types as strings.\n * @param {Boolean} match_types whether the return type and input types\n * of suggestions should match\n */\n _apply_suggestion_metadata(suggestions, input_types, match_types) {\n this._check_initialized();\n match_types = match_types || false;\n const suggestions_with_metadata = [];\n\n for (const s of suggestions) {\n const token = s.nextTokenType;\n\n if (!token || !token.PATTERN.source) {\n continue;\n }\n\n let label = token.LABEL;\n let pattern = token.PATTERN.source.replace(/\\\\/g, \"\");\n let value = pattern;\n\n if (tokenMatcher(token, FunctionTokenType)) {\n value = `${value}(`;\n } else if (tokenMatcher(token, OperatorTokenType)) {\n value = `${value} `;\n } else if (tokenMatcher(token, As)) {\n value = \"AS \";\n label = \"AS\";\n token.signature = \"x + y AS new column\";\n token.help = \"Creates a custom name for the computed column.\";\n }\n\n const suggestion = new ComputedExpressionAutocompleteSuggestion({\n label,\n value,\n pattern,\n signature: token.signature,\n help: token.help,\n input_types: token.input_types,\n return_type: token.return_type,\n num_params: token.num_params\n });\n\n if (input_types && suggestion.input_types) {\n // Return suggestions that have the same input type AND\n // the return type is in the input types array - this prevents\n // expressions such as `uppercase(length(` from being\n // suggested, as `length` takes a string but returns an int.\n for (const type of input_types) {\n const correct_input_type = suggestion.input_types.includes(type);\n\n if (correct_input_type && (match_types ? suggestion.input_types.includes(suggestion.return_type) : true)) {\n suggestions_with_metadata.push(suggestion);\n break;\n }\n }\n } else {\n suggestions_with_metadata.push(suggestion);\n }\n }\n\n return suggestions_with_metadata;\n }\n\n _check_initialized() {\n if (this.is_initialized === false) {\n throw new Error(\"PerspectiveComputedExpressionParser is not initialized!\");\n }\n }\n}\n\n// Create a module-level singleton parser.\nexport const COMPUTED_EXPRESSION_PARSER = new PerspectiveComputedExpressionParser();\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {html} from \"lit-html\";\n\nimport {bindTemplate, throttlePromise} from \"../utils.js\";\n\nimport template from \"../../html/computed_expression_widget.html\";\n\nimport style from \"../../less/computed_expression_widget.less\";\n\nimport {FunctionTokenType, OperatorTokenType, COLUMN_NAME_REGEX_PATTERN, RightParen, As, ColumnName, Whitespace} from \"./lexer\";\nimport {ComputedExpressionAutocompleteSuggestion} from \"./computed_expression_parser\";\nimport {tokenMatcher} from \"chevrotain\";\n\n// Eslint complains here because we don't do anything, but actually we globally\n// register this class as a CustomElement\n@bindTemplate(template, style) // eslint-disable-next-line no-unused-vars\nclass ComputedExpressionWidget extends HTMLElement {\n constructor() {\n super();\n\n this._parsed_expression = undefined;\n this.expressions = [];\n this._valid = false;\n }\n\n connectedCallback() {\n this._register_ids();\n this._register_callbacks();\n this._expression_editor.set_renderer(this.render_expression.bind(this));\n this._editor_observer = new MutationObserver(this._resize_editor.bind(this));\n\n // Implement the `reposition` method, and bind it to the autocomplete\n // instance instead of the widget instance.\n this._autocomplete.reposition = this._position_autocomplete.bind(this);\n }\n\n /**\n * Observe the editor when the widget is opened.\n */\n _observe_editor() {\n this._editor_observer.observe(this._expression_editor, {\n attributes: true,\n attributeFilter: [\"style\"]\n });\n\n // Focus on the editor immediately\n this._expression_editor.focus();\n }\n\n /**\n * Dispatch an event on editor resize to notify the side panel, and\n * disconnect the observer.\n */\n _resize_editor() {\n const event = new CustomEvent(\"perspective-computed-expression-resize\");\n this.dispatchEvent(event);\n this._editor_observer.disconnect();\n }\n\n /**\n * A stub for the widget to have access to `perspective-viewer`'s _get_type\n * method. Replaced by a reference to the proper method when the widget is\n * opened inside `perspective-viewer`.\n *\n * @param {String} name a column name\n */\n _get_type(name) {\n throw new Error(`Cannot get column type for \"${name}\".`);\n }\n\n /**\n * Returns a list of objects from column names, suitable for rendering\n * in the autocomplete widget.\n */\n _make_column_name_suggestions(names) {\n // label = what is shown in the autocomplete DOM\n // value = what the fragment in the editor will be replaced with\n return names.map(name => {\n return new ComputedExpressionAutocompleteSuggestion({\n label: name,\n value: `\"${name}\"`,\n is_column_name: true\n });\n });\n }\n\n /**\n * Given an expression string, render it into markup. Called only when the\n * expression is not an empty string.\n *\n * @param {String} expression\n */\n render_expression(expression) {\n // Call `tokenize()` and not `lex()`, as `lex` cleans whitespace\n // tokens and we need whitespace tokens to render the expressions.\n const lex_result = this._computed_expression_parser._lexer.tokenize(expression);\n\n // Track a sorted array of integer offsets into the expression, and\n // a map of offsets to tokens. This allows us to render errors (which\n // aren't in the list of parsed tokens) inline with valid tokens.\n let offsets = [];\n let token_map = {};\n\n for (const token of lex_result.tokens) {\n token_map[token.startOffset] = token;\n offsets.push(token.startOffset);\n }\n\n for (const error of lex_result.errors) {\n token_map[error.offset] = error;\n offsets.push(error.offset);\n }\n\n offsets = offsets.sort((a, b) => a - b);\n\n const output = [];\n const names = this._get_view_all_column_names();\n\n // track the last non-whitespace token\n let last_token;\n\n for (const offset of offsets) {\n const token = token_map[offset];\n\n // errors have `message` set, whereas valid tokens do not\n const is_error = token.message;\n\n let content = \"\";\n let class_name = \"fragment\";\n\n if (is_error) {\n // grab the full text of the error\n content = expression.slice(token.offset, token.offset + token.length);\n class_name = \"errored\";\n } else {\n content = token.image;\n\n if (tokenMatcher(token, FunctionTokenType)) {\n class_name = \"function\";\n } else if (tokenMatcher(token, OperatorTokenType)) {\n class_name = \"operator\";\n } else if (tokenMatcher(token, ColumnName)) {\n const column_name = token.payload;\n const exists = names.includes(column_name);\n class_name = `column_name ${exists ? this._get_type(column_name) : \"\"}`;\n\n // only mark as red if the column is not an alias AND does\n // not exist in the dataset.\n if ((!exists && !last_token) || (!exists && last_token && !tokenMatcher(last_token, As))) {\n class_name = \"errored\";\n }\n }\n\n if (!tokenMatcher(token, Whitespace)) {\n last_token = token;\n }\n }\n\n output.push(`<span class=\"psp-expression__${class_name}\">${content}</span>`);\n }\n\n return output.join(\"\");\n }\n\n /**\n * Given an Array of autocomplete suggestions, transform them to an Array\n * of `lit-html` templates so they can be rendered inside the autocomplete.\n *\n * Because the computed expression autocomplete contains large amounts\n * of metadata and additional functionality, we create the templates here\n * and let the autocomplete render the markup without any additional\n * changes.\n *\n * @param {Array<ComputedExpressionAutocompleteSuggestion>} suggestions an\n * Array of suggestion objects.\n */\n make_autocomplete_markup(suggestions) {\n return suggestions.map(suggestion =>\n suggestion.label\n ? html`\n <div\n role=\"listitem\"\n title=${suggestion.help ? suggestion.help : \"\"}\n class=\"psp-autocomplete__item\"\n data-label=${suggestion.label}\n data-value=${suggestion.value}\n data-signature=${suggestion.signature ? suggestion.signature : \"\"}\n data-help=${suggestion.help ? suggestion.help : \"\"}\n aria-selected=\"false\"\n >\n <span\n class=\"psp-autocomplete-item__label ${suggestion.is_column_name ? `psp-autocomplete-item__label--column-name ${this._get_type(suggestion.label)}` : \"\"}\"\n data-value=${suggestion.value}\n >\n ${suggestion.pattern ? suggestion.pattern : suggestion.label}\n </span>\n </div>\n `\n : \"\"\n );\n }\n\n /**\n * Validate the expression after the\n * `perspective-expression-editor-rendered` has been fired. Fires on every\n * event, even when the expression is an empty string.\n * @param {*} ev\n */\n @throttlePromise\n async _validate_expression(ev) {\n this._autocomplete.clear();\n const expression = ev.detail.text;\n\n if (expression.length === 0) {\n this._clear_error();\n return;\n }\n\n try {\n // Use this just for validation. On anything short of a massive\n // expression, this should have no performance impact as we\n // share an instance of the parser throughout the viewer.\n this._parsed_expression = this._computed_expression_parser.parse(expression);\n } catch (e) {\n // Show autocomplete OR error, but not both\n this._clear_error();\n this._disable_save_button();\n\n // Generate a list of tokens from the expression, cleaning out\n // whitespace tokens and without throwing any errors.\n const lex_result = this._computed_expression_parser.lex(expression);\n\n // Check if the expression has a fragment of a column name,\n // i.e. if it's been opened with a quote but not closed\n const name_fragments = expression.match(/([\"'])[\\s\\w()]*?$/);\n const has_name_fragments = name_fragments && name_fragments.length > 0 && !/['\"]\\s/.test(name_fragments[0]);\n\n // Get the last non-whitespace token from the lexer result\n const last_token = this._computed_expression_parser.get_last_token(lex_result);\n let show_column_names = has_name_fragments;\n\n if (last_token) {\n // Check if the last token is a column name - if so, don't show\n // autocomplete as we don't want to show autocomplete after a\n // completed column name.\n const is_column_name = tokenMatcher(last_token, ColumnName);\n\n // Don't show if last token is a parenthesis, as that indicates\n // a closed logical block.\n const is_paren = tokenMatcher(last_token, RightParen);\n\n // And not if the last token is `as/AS`, as that indicates a\n // custom column name supplied by the user.\n const is_alias = tokenMatcher(last_token, As);\n\n // If the last token is an operator, force autocomplete to show.\n const is_operator = tokenMatcher(last_token, OperatorTokenType);\n\n // Show column names if the last token is an operator,\n // OR if the last input is a column name fragment and the\n // last token is not a column name, a paren, or an alias.\n show_column_names = is_operator || (show_column_names && !is_column_name && !is_paren && !is_alias);\n }\n\n // Get autocomplete suggestions from Chevrotain\n let suggestions = [];\n\n // Filter down those suggestions by an input type, if possible\n let input_types, match_types;\n\n // Go to the last function or operator token present in the\n // entire expression, and use it to calculate input types.\n const last_function_or_operator = this._computed_expression_parser.get_last_token_with_types([FunctionTokenType, OperatorTokenType], lex_result);\n\n if (last_function_or_operator) {\n input_types = last_function_or_operator.tokenType.input_types;\n match_types = true;\n } else if (last_token && tokenMatcher(last_token, ColumnName)) {\n // get functions and operators that take the column type\n // as input, but don't check whether return types match\n input_types = [this._get_type(last_token.payload)];\n match_types = false;\n }\n\n suggestions = this._computed_expression_parser.get_autocomplete_suggestions(expression, lex_result, input_types, match_types);\n\n if (show_column_names) {\n let column_names;\n\n if (last_function_or_operator) {\n // create a list of function/operator suggestions followed\n // by column names of the correct input type.\n column_names = this._get_view_column_names_by_types(input_types);\n } else {\n // Show all column names\n column_names = this._get_view_all_column_names();\n }\n\n // Convert list of names into objects with `label` and `value`\n let column_name_suggestions = this._make_column_name_suggestions(column_names);\n\n // Filter down by `startsWith` and `contains`, putting the\n // more exact matches first.\n if (has_name_fragments) {\n const fragment = name_fragments[0].substring(1);\n const exact_matches = [];\n const fuzzy_matches = [];\n\n for (const suggestion of column_name_suggestions) {\n const column_name = suggestion.label.toLowerCase();\n const partial = fragment.toLowerCase();\n\n if (column_name.startsWith(partial)) {\n exact_matches.push(suggestion);\n } else if (column_name.includes(partial)) {\n fuzzy_matches.push(suggestion);\n }\n }\n\n column_name_suggestions = exact_matches.concat(fuzzy_matches);\n }\n\n if (last_function_or_operator) {\n suggestions = suggestions.concat(column_name_suggestions);\n } else {\n suggestions = column_name_suggestions;\n }\n\n // Render column names inside autocomplete\n const markup = this.make_autocomplete_markup(suggestions);\n this._autocomplete.render(markup);\n return;\n } else {\n if (suggestions.length > 0) {\n // Show autocomplete and not error box\n const markup = this.make_autocomplete_markup(suggestions);\n this._autocomplete.render(markup);\n return;\n } else if (last_token && tokenMatcher(last_token, As)) {\n // don't show error if last token is alias\n return;\n } else {\n // Expression is syntactically valid but unparsable\n const message = e.message ? e.message : JSON.stringify(e);\n this._set_error(message, this._error);\n return;\n }\n }\n }\n\n // Take the parsed expression and type check it on the viewer,\n // which will call `_type_check_expression()` with a computed_schema.\n const event = new CustomEvent(\"perspective-computed-expression-type-check\", {\n detail: {\n parsed_expression: this._parsed_expression\n }\n });\n\n this.dispatchEvent(event);\n\n return;\n }\n\n @throttlePromise\n async _type_check_expression(computed_schema, expected_types) {\n const parsed = this._parsed_expression || [];\n const invalid = [];\n\n for (const column of parsed) {\n if (!computed_schema[column.column]) {\n invalid.push(column.column);\n }\n }\n\n if (invalid.length > 0) {\n let message = \"TypeError:\\n\";\n for (const col of invalid) {\n message += `- \\`${col}\\` expected input column types ${expected_types[col].join(\"/\")}\\n`;\n }\n this._set_error(message, this._error);\n } else {\n this._clear_error();\n this._enable_save_button();\n }\n }\n\n _save_expression() {\n if (!this._valid || this._save_button.getAttribute(\"disabled\")) {\n return;\n }\n const expression = this._expression_editor.get_text();\n const parsed_expression = this._parsed_expression || [];\n\n const event = new CustomEvent(\"perspective-computed-expression-save\", {\n detail: {\n expression: expression,\n parsed_expression: parsed_expression\n }\n });\n\n this.dispatchEvent(event);\n\n this.expressions.push(expression);\n }\n\n /**\n * Whenever the autocomplete re-renders, position it either at the end\n * of the cursor or dock it to the bottom of the computed expression widget.\n *\n * Do not call this method directly - it is set to override the `reposition`\n * method of `this._autocomplete` in `connectedCallback`.\n */\n _position_autocomplete() {\n const editor = this._expression_editor;\n const last_span = this._expression_editor._edit_area.lastChild;\n\n if (editor.offsetWidth === 250) {\n this._autocomplete._container.removeAttribute(\"style\");\n this._autocomplete._container.classList.remove(\"undocked\");\n this._autocomplete._container.classList.add(\"docked\");\n return;\n } else {\n this._autocomplete._container.classList.remove(\"docked\");\n this._autocomplete._container.classList.add(\"undocked\");\n }\n\n const offset_left = last_span.offsetLeft;\n const offset_width = last_span.offsetWidth;\n const offset_top = last_span.offsetTop;\n\n const left = offset_left + offset_width > 0 ? offset_left + offset_width : 0;\n const top = offset_top + 20 > 20 ? offset_top + 20 : 20;\n\n this._autocomplete._container.style.left = `${left}px`;\n this._autocomplete._container.style.top = `${top}px`;\n }\n\n /**\n * When an autocomplete item is clicked or selected via keypress,\n * append or replace the text in the editor.\n *\n * @param {String} new_value the value selected from the autocomplete item.\n */\n _autocomplete_replace(new_value) {\n const old_value = this._expression_editor.get_text();\n const last_input = this._computed_expression_parser.extract_partial_function(old_value);\n\n if (new_value === \"(\") {\n // Always append parentheses\n this._expression_editor._edit_area.innerText += new_value;\n } else if (last_input && last_input !== '\"') {\n // replace the fragment with the full function/operator\n const final_value = old_value.substring(0, old_value.length - last_input.length) + new_value;\n this._expression_editor._edit_area.innerText = final_value;\n } else {\n // Check whether we are appending a column name\n // FIXME: clean up this affront against all things good\n const last_word = old_value.substring(old_value.lastIndexOf(\" \")).trim();\n const last_word_is_column_name = /[\"'].*[^'\"]/.test(last_word) || last_word === '\"' || last_word === \"'\";\n const new_is_column_name = COLUMN_NAME_REGEX_PATTERN.test(new_value);\n\n if (last_word_is_column_name && new_is_column_name) {\n let last_word_idx = old_value.lastIndexOf(last_word);\n let final_value = old_value.substring(0, last_word_idx);\n\n // TODO: collapse some of these repeated regex tests\n const partials_inside_func = /\\(['\"]\\w+$/.exec(last_word);\n\n if (partials_inside_func && partials_inside_func[0] && (last_word_idx === 0 || last_word[0] === \"(\")) {\n // replace upto the open quote, but not before it\n final_value += last_word.substring(0, partials_inside_func.index + 1);\n }\n\n final_value += new_value;\n\n this._expression_editor._edit_area.innerText = final_value;\n } else {\n if (!last_word_is_column_name && (last_word[last_word.length - 1] === '\"' || last_word[last_word.length - 1] === \"'\")) {\n // Remove the last quote in strings like `pow2(\"\n const stripped_last = this._expression_editor._edit_area.innerText.substring(0, this._expression_editor._edit_area.innerText.length - 1);\n this._expression_editor._edit_area.innerText = stripped_last;\n }\n // Append the autocomplete value\n this._expression_editor._edit_area.innerText += new_value;\n }\n }\n\n this._expression_editor._reset_selection();\n this._expression_editor.update_content();\n\n this._autocomplete.clear();\n }\n\n /**\n * When the autocomplete instance dispatches the\n * `perspective-autocomplete-item-clicked` event, replace or append the\n * value to the editor.\n *\n * @param {CustomEvent} ev a `perspective-autocomplete-item-clicked` event.\n */\n _autocomplete_item_clicked(ev) {\n this._autocomplete_replace(ev.detail.target.getAttribute(\"data-value\"));\n }\n\n // UI actions\n _clear_expression_editor() {\n this._expression_editor.clear_content();\n }\n\n _close_expression_widget() {\n this.style.display = \"none\";\n this._side_panel_actions.style.display = \"flex\";\n this._clear_error();\n this._disable_save_button();\n this._clear_expression_editor();\n this._autocomplete.clear();\n // Disconnect the observer.\n this._editor_observer.disconnect();\n }\n\n /**\n * Given an error message, display it in the DOM and disable the\n * save button.\n *\n * @param {String} error An error message to be displayed.\n * @param {HTMLElement} target an `HTMLElement` that displays the `error`\n * message.\n */\n _set_error(error, target) {\n if (target) {\n target.innerText = error;\n target.style.display = \"block\";\n this._disable_save_button();\n }\n }\n\n _clear_error() {\n this._error.innerText = \"\";\n this._error.style.display = \"none\";\n }\n\n _disable_save_button() {\n this._save_button.setAttribute(\"disabled\", true);\n this._valid = false;\n }\n\n _enable_save_button() {\n this._save_button.removeAttribute(\"disabled\");\n this._valid = true;\n }\n\n _editor_keydown(ev) {\n // All operations need to be done on `ev.detail`, not `ev`, as the event\n // is passed through from the editor.\n switch (ev.detail.key) {\n case \"Enter\":\n ev.detail.preventDefault();\n ev.detail.stopPropagation();\n {\n // If autocomplete is open, select the current autocomplete\n // value. Otherwise, save the expression.\n if (this._autocomplete.displayed === true) {\n const value = this._autocomplete.get_selected_value();\n if (value) {\n this._autocomplete_replace(value);\n }\n } else {\n this._save_expression();\n }\n }\n break;\n case \"Tab\":\n case \"ArrowDown\":\n {\n ev.detail.preventDefault();\n ev.detail.stopPropagation();\n if (this._autocomplete.displayed === true) {\n this._autocomplete._next();\n }\n }\n break;\n case \"ArrowUp\":\n {\n ev.detail.preventDefault();\n ev.detail.stopPropagation();\n if (this._autocomplete.displayed === true) {\n this._autocomplete._prev();\n }\n }\n break;\n case \"z\": {\n // prevent Ctrl/Command-z for undo, as it has no effect\n // inside the editor but will fire keypress events and mess\n // up the flow.\n if (ev.detail.metaKey === true || ev.detail.ctrlKey === true) {\n ev.detail.preventDefault();\n ev.detail.stopPropagation();\n }\n }\n default:\n break;\n }\n }\n\n /**\n * Map DOM IDs to class properties.\n */\n _register_ids() {\n this._side_panel_actions = this.parentElement.querySelector(\"#side_panel__actions\");\n this._close_button = this.shadowRoot.querySelector(\"#psp-computed-expression-widget-close\");\n this._expression_editor = this.shadowRoot.querySelector(\"perspective-expression-editor\");\n this._error = this.shadowRoot.querySelector(\"#psp-computed-expression-widget-error\");\n this._save_button = this.shadowRoot.querySelector(\"#psp-computed-expression-widget-button-save\");\n this._autocomplete = this.shadowRoot.querySelector(\"#psp-computed-expression-widget-autocomplete\");\n }\n\n /**\n * Map callback functions to class properties.\n */\n _register_callbacks() {\n this._close_button.addEventListener(\"click\", this._close_expression_widget.bind(this));\n this._expression_editor.addEventListener(\"perspective-expression-editor-rendered\", this._validate_expression.bind(this));\n this._expression_editor.addEventListener(\"perspective-expression-editor-keydown\", this._editor_keydown.bind(this));\n this._save_button.addEventListener(\"click\", this._save_expression.bind(this));\n this._autocomplete.addEventListener(\"perspective-autocomplete-item-clicked\", this._autocomplete_item_clicked.bind(this));\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {swap} from \"../utils.js\";\n\nfunction calc_index(event) {\n if (this._active_columns.children.length == 0) {\n return 0;\n } else {\n let is_last_null = false;\n for (let cidx in this._active_columns.children) {\n let child = this._active_columns.children[cidx];\n is_last_null = is_last_null || child?.classList?.contains(\"null-column\");\n if (child.offsetTop + child.offsetHeight > event.offsetY + this._active_columns.scrollTop) {\n return parseInt(cidx);\n }\n }\n let last_index = this._active_columns.children.length;\n if (is_last_null) {\n last_index--;\n }\n return last_index;\n }\n}\n\nexport function dragend(event) {\n let div = event.target.getRootNode().host;\n let parent = div;\n if (parent.tagName === \"PERSPECTIVE-VIEWER\") {\n parent = event.target.parentElement;\n } else {\n parent = div.parentElement;\n }\n let idx = Array.prototype.slice.call(parent.children).indexOf(div.tagName === \"PERSPECTIVE-ROW\" ? div : event.target);\n let attr_name = parent.getAttribute(\"for\");\n if (this.hasAttribute(attr_name)) {\n let attr_value = JSON.parse(this.getAttribute(attr_name));\n attr_value.splice(idx, 1);\n if (attr_value.length === 0) {\n this.removeAttribute(attr_name);\n } else {\n this.setAttribute(attr_name, JSON.stringify(attr_value));\n }\n }\n}\n\nexport function drop(ev) {\n ev.preventDefault();\n ev.currentTarget.classList.remove(\"dropping\");\n if (this._drop_target_hover) {\n this._drop_target_hover.removeAttribute(\"drop-target\");\n }\n let data = ev.dataTransfer.getData(\"text\");\n if (!data) return;\n data = JSON.parse(data);\n\n // Update the columns attribute\n let name = ev.currentTarget.querySelector(\"ul\").getAttribute(\"for\") || ev.currentTarget.getAttribute(\"id\").replace(\"_\", \"-\");\n let columns = JSON.parse(this.getAttribute(name) || \"[]\");\n let data_index = columns.indexOf(data[0]);\n if (data_index !== -1) {\n columns.splice(data_index, 1);\n }\n\n const filtering = name.indexOf(\"filter\") > -1;\n if (filtering) {\n this.setAttribute(name, JSON.stringify(columns.concat([data])));\n } else if (name.indexOf(\"sort\") > -1) {\n this.setAttribute(name, JSON.stringify(columns.concat([[data[0]]])));\n } else {\n this.setAttribute(name, JSON.stringify(columns.concat([data[0]])));\n }\n\n // Deselect the dropped column\n if (this._plugin.deselectMode === \"pivots\" && this._get_visible_column_count() > 1 && name !== \"sort\" && !filtering) {\n for (let x of this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\")) {\n if (x.getAttribute(\"name\") === data[0]) {\n this._active_columns.removeChild(x);\n break;\n }\n }\n this._update_column_view();\n }\n\n this._debounce_update();\n}\n\nexport function column_dragend(event) {\n let data = event.target.parentElement.parentElement;\n if (Array.prototype.slice(this._active_columns.children).indexOf(data) > -1 && this._get_visible_column_count() > 1 && event.dataTransfer.dropEffect !== \"move\") {\n this._active_columns.removeChild(data);\n this._update_column_view();\n }\n this._active_columns.classList.remove(\"dropping\");\n}\n\nexport function column_dragleave(event) {\n let src = event.relatedTarget;\n while (src && src !== this._active_columns) {\n src = src.parentElement;\n }\n if (src === null) {\n this._active_columns.classList.remove(\"dropping\");\n if (this._drop_target_null) {\n this._active_columns.replaceChild(this._drop_target_null, this._drop_target_hover);\n delete this._drop_target_null;\n }\n if (this._drop_target_hover.parentElement === this._active_columns) {\n this._active_columns.removeChild(this._drop_target_hover);\n }\n if (this._original_index !== -1) {\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[this._original_index]);\n }\n this._drop_target_hover.removeAttribute(\"drop-target\");\n }\n}\n\nfunction _unset_drop_target_null() {\n if (this._drop_target_null) {\n if (this._drop_target_null.parentElement === this._active_columns) {\n swap(this._active_columns, this._drop_target_hover, this._drop_target_null);\n } else {\n this._active_columns.replaceChild(this._drop_target_null, this._drop_target_hover);\n }\n delete this._drop_target_null;\n }\n}\n\nfunction column_swap(new_index) {\n _unset_drop_target_null.call(this);\n if (this._active_columns.children[new_index]) {\n if (this._drop_target_hover !== this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n swap(this._active_columns, this._active_columns.children[new_index], this._drop_target_hover);\n }\n }\n}\n\nfunction column_replace(new_index) {\n _unset_drop_target_null.call(this);\n if (this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n}\n\nexport function column_dragover(event) {\n event.preventDefault();\n event.dataTransfer.dropEffect = \"move\";\n if (event.currentTarget.className !== \"dropping\") {\n event.currentTarget.classList.add(\"dropping\");\n }\n if (!this._drop_target_hover.hasAttribute(\"drop-target\")) {\n this._drop_target_hover.toggleAttribute(\"drop-target\", true);\n }\n let new_index = calc_index.call(this, event);\n const current_index = Array.prototype.slice.call(this._active_columns.children).indexOf(this._drop_target_hover);\n const over_elem = this._active_columns.children[new_index];\n const to_replace = new_index < this._plugin.initial?.names?.length - 1;\n const is_diff = this._drop_target_hover !== this._active_columns.children[new_index];\n const from_active = this._original_index !== -1;\n const from_replace = from_active && this._original_index < this._plugin.initial?.names?.length - 1;\n const from_append = from_active && this._original_index >= this._plugin.initial?.names?.length - 1;\n const from_required = from_active && this._original_index < this._plugin.initial?.count;\n const to_required = new_index < this._plugin.initial?.count;\n const to_null = !to_required && over_elem?.classList.contains(\"null-column\");\n if (from_required && to_null) {\n _unset_drop_target_null.call(this);\n } else if (to_replace && from_append && is_diff) {\n _unset_drop_target_null.call(this);\n const from_last =\n this._original_index === this._plugin.initial?.names?.length - 1 &&\n this._drop_target_hover === this._active_columns.children[this._original_index] &&\n this._active_columns.children.length === this._plugin.initial?.names?.length;\n if (from_last) {\n this._drop_target_null = this._active_columns.children[new_index];\n swap(this._active_columns, this._active_columns.children[new_index], this._drop_target_hover);\n } else if (!this._active_columns.children[new_index]?.classList.contains(\"null-column\")) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n this._active_columns.insertBefore(this._drop_target_null, this._active_columns.children[this._original_index]);\n } else {\n if (this._drop_target_hover !== this._active_columns.children[new_index]) {\n this._drop_target_null = this._active_columns.children[new_index];\n this._active_columns.replaceChild(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n }\n } else if (to_replace && from_active && is_diff) {\n column_swap.call(this, new_index);\n } else if (to_replace && !from_active && is_diff) {\n column_replace.call(this, new_index);\n } else if (!to_replace && from_replace && is_diff) {\n column_swap.call(this, new_index);\n } else if (to_null && from_active) {\n column_swap.call(this, new_index);\n } else if (to_null && !from_active) {\n column_replace.call(this, new_index);\n } else if (current_index < new_index) {\n if (new_index + 1 < this._active_columns.children.length) {\n if (!this._active_columns.children[new_index + 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[new_index + 1]);\n }\n } else {\n if (!this._active_columns.children[this._active_columns.children.length - 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.appendChild(this._drop_target_hover);\n }\n }\n } else if (new_index < this._active_columns.children.length) {\n if (!this._active_columns.children[new_index].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.insertBefore(this._drop_target_hover, this._active_columns.children[new_index]);\n }\n } else {\n if (!this._active_columns.children[this._active_columns.children.length - 1].hasAttribute(\"drop-target\")) {\n _unset_drop_target_null.call(this);\n this._active_columns.appendChild(this._drop_target_hover);\n }\n }\n}\n\nexport function column_drop(ev) {\n ev.preventDefault();\n delete this._drop_target_null;\n ev.currentTarget.classList.remove(\"dropping\");\n if (this._drop_target_hover.parentElement === this._active_columns) {\n this._drop_target_hover.removeAttribute(\"drop-target\");\n }\n let data = ev.dataTransfer.getData(\"text\");\n if (!data) return;\n\n this._update_column_view();\n}\n\nexport function dragenter(ev) {\n ev.stopPropagation();\n ev.preventDefault();\n ev.currentTarget.classList.add(\"dropping\");\n}\n\nexport function dragover(ev) {\n ev.stopPropagation();\n ev.preventDefault();\n ev.currentTarget.classList.add(\"dropping\");\n ev.dataTransfer.dropEffect = \"move\";\n}\n\nexport function dragleave(ev) {\n if (ev.currentTarget == ev.target) {\n ev.stopPropagation();\n ev.preventDefault();\n ev.currentTarget.classList.remove(\"dropping\");\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nexport class CancelTask {\n constructor(on_cancel, initial = false) {\n this._on_cancel = on_cancel;\n this._cancelled = false;\n this.initial = initial;\n }\n\n cancel() {\n if (!this._cancelled && this._on_cancel) {\n this._on_cancel();\n this._on_cancel = undefined;\n }\n this._cancelled = true;\n }\n\n get cancelled() {\n return this._cancelled;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {renderers} from \"./renderers.js\";\n\nexport class StateElement extends HTMLElement {\n get _plugin() {\n let current_renderers = renderers.getInstance();\n let view = this.getAttribute(\"plugin\");\n if (!view) {\n view = Object.keys(current_renderers)[0];\n this.setAttribute(\"plugin\", view);\n }\n return current_renderers[view] || current_renderers[Object.keys(current_renderers)[0]];\n }\n\n // deprecate\n _get_view_dom_columns(selector, callback) {\n selector = selector || \"#active_columns perspective-row\";\n let columns = Array.prototype.slice.call(this.shadowRoot.querySelectorAll(selector));\n if (!callback) {\n return columns;\n }\n return columns.map(callback).filter(x => x);\n }\n\n _get_view_all_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#inactive_columns perspective-row\"));\n }\n\n _get_view_active_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\"));\n }\n\n _get_view_active_valid_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#active_columns perspective-row\")).filter(x => !x.classList.contains(\"null-column\"));\n }\n\n _get_view_inactive_columns() {\n return Array.prototype.slice.call(this.shadowRoot.querySelectorAll(\"#inactive_columns perspective-row\"));\n }\n\n _get_view_all_column_names() {\n return this._get_view_all_columns().map(x => x.getAttribute(\"name\"));\n }\n\n _get_view_active_column_names() {\n return this._get_view_active_columns().map(x => x.getAttribute(\"name\"));\n }\n\n _get_view_all_valid_column_names() {\n return this._get_view_all_column_names().filter(x => x);\n }\n\n _get_view_active_valid_column_names() {\n return this._get_view_active_column_names().filter(x => x);\n }\n\n _get_view_active_valid_column_count() {\n return this._get_view_active_valid_column_names().length;\n }\n\n /**\n * Given a data type, return the names of all columns with the specified\n * data type.\n *\n * @param {Array[String]} types an array of valid type names\n */\n _get_view_column_names_by_types(types) {\n const names = [];\n const viewer_columns = this._get_view_all_columns();\n for (const column of viewer_columns) {\n if (types.includes(column.getAttribute(\"type\"))) {\n names.push(column.getAttribute(\"name\"));\n }\n }\n return names;\n }\n\n // deprecate\n _get_view_columns({active = true} = {}) {\n let selector;\n if (active) {\n selector = \"#active_columns perspective-row\";\n } else {\n selector = \"#inactive_columns perspective-row\";\n }\n return this._get_view_dom_columns(selector, col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_aggregates(selector) {\n selector = selector || \"#active_columns perspective-row\";\n return this._get_view_dom_columns(selector, s => {\n let op = s.getAttribute(\"aggregate\");\n if (op[0] === \"[\") {\n try {\n op = JSON.parse(op);\n } catch (e) {\n console.error(e);\n }\n }\n const column = s.getAttribute(\"name\");\n return column && {op, column};\n });\n }\n\n _get_view_row_pivots() {\n return this._get_view_dom_columns(\"#row_pivots perspective-row\", col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_column_pivots() {\n return this._get_view_dom_columns(\"#column_pivots perspective-row\", col => {\n return col.getAttribute(\"name\");\n });\n }\n\n _get_view_filter_nodes() {\n return this._get_view_dom_columns(\"#filters perspective-row\");\n }\n\n _get_view_filters() {\n return this._get_view_dom_columns(\"#filters perspective-row\", col => {\n let {operator, operand} = JSON.parse(col.getAttribute(\"filter\"));\n return [col.getAttribute(\"name\"), operator, operand];\n });\n }\n\n _get_view_sorts() {\n return this._get_view_dom_columns(\"#sort perspective-row\", col => {\n let order = col.getAttribute(\"sort-order\") || \"asc\";\n return [col.getAttribute(\"name\"), order];\n });\n }\n\n _get_view_computed_columns() {\n return JSON.parse(this.getAttribute(\"computed-columns\")) || [];\n }\n\n _get_view_parsed_computed_columns() {\n return JSON.parse(this.getAttribute(\"parsed-computed-columns\")) || [];\n }\n\n _get_visible_column_count() {\n return this._get_view_active_columns().length;\n }\n\n get_aggregate_attribute() {\n const aggs = JSON.parse(this.getAttribute(\"aggregates\")) || {};\n const found = new Set();\n const new_aggs = Object.keys(aggs).map(col => {\n found.add(col);\n return {column: col, op: aggs[col]};\n });\n if (this._aggregate_defaults) {\n for (const column of Object.keys(this._aggregate_defaults)) {\n if (!found.has(column)) {\n new_aggs.push({\n column,\n op: this._aggregate_defaults[column]\n });\n }\n }\n }\n return new_aggs;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport debounce from \"lodash/debounce\";\nimport isEqual from \"lodash/isEqual\";\nimport {html, render} from \"lit-html\";\n\nimport perspective from \"@finos/perspective\";\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\nimport {CancelTask} from \"./cancel_task.js\";\n\nimport {StateElement} from \"./state_element.js\";\n\n/******************************************************************************\n *\n * Helpers\n *\n */\n\nfunction numberWithCommas(x) {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n}\n\nlet TYPE_ORDER = {integer: 2, string: 0, float: 3, boolean: 4, datetime: 1, date: 1};\n\nconst column_sorter = schema => (a, b) => {\n const s1 = TYPE_ORDER[schema[a]];\n const s2 = TYPE_ORDER[schema[b]];\n let r = 0;\n if (s1 == s2) {\n r = a.toLowerCase() < b.toLowerCase() ? -1 : 1;\n } else {\n r = s1 < s2 ? -1 : 1;\n }\n return r;\n};\n\nfunction get_aggregate_defaults(columns, schema, computed_schema) {\n const aggregates = {};\n for (const col of columns) {\n let type = schema[col];\n if (!type) {\n type = computed_schema[col];\n }\n aggregates[col] = get_type_config(type).aggregate;\n }\n return aggregates;\n}\n\nfunction get_aggregates_with_defaults(aggregate_attribute, columns, schema, computed_schema) {\n const found = new Set();\n const aggregates = [];\n for (const col of aggregate_attribute) {\n let type = schema[col.column];\n if (!type) {\n type = computed_schema[col.column];\n }\n const type_config = get_type_config(type);\n found.add(col.column);\n if (type_config.type || type) {\n if (col.op === \"\" || perspective.TYPE_AGGREGATES[type_config.type || type].indexOf(col.op) === -1) {\n col.op = type_config.aggregate;\n }\n aggregates.push(col);\n } else {\n console.warn(`No column \"${col.column}\" found (specified in aggregates attribute).`);\n }\n }\n\n // Add columns detected from dataset.\n for (const col of columns) {\n if (!found.has(col)) {\n let type = schema[col];\n if (!type) {\n type = computed_schema[col.column];\n }\n aggregates.push({\n column: col,\n op: get_type_config(type).aggregate\n });\n }\n }\n\n return aggregates;\n}\n\nconst _total_template = args => {\n if (args) {\n const x = numberWithCommas(args[0]);\n const y = numberWithCommas(args[1]);\n const total = Math.floor((args[0] / args[1]) * 100);\n return html`\n <span title=\"${x} / ${y}\" class=\"plugin_information--overflow-hint\">&nbsp;<span class=\"plugin_information--overflow-hint-percent\">${total}%</span>&nbsp;</span>\n `;\n }\n};\n\nconst _nowrap_template = text => {\n if (text !== \"\") {\n return html`\n <span style=\"white-space:nowrap\">${text}</span>\n `;\n }\n};\n\n/**\n * Render warning template tagged literal.\n * @param {*} strings\n * @param {...[n, m]} args tuples of rationals to be formatted.\n */\nconst _warning = (strings, ...args) => strings.flatMap((str, idx) => [_nowrap_template(str), _total_template(args[idx])]).filter(x => x);\n\n/******************************************************************************\n *\n * PerspectiveElement\n *\n */\n\nexport class PerspectiveElement extends StateElement {\n /**\n * Given an array of computed column definitions, check the table's\n * computed schema and make sure all types and column names are valid.\n * If any column names are invalid, they are removed from the output\n * array of computed column definitions.\n *\n * @param {Array{Object}} computed_columns an Array of computed column\n * definitions\n * @param {Object{String}} computed_schema a computed column schema\n * generated from the table\n *\n * @returns {Array{Object}} a validated Array of computed column definitions\n */\n _validate_parsed_computed_columns(computed_columns, computed_schema) {\n if (!computed_columns || computed_columns.length === 0) return [];\n const validated = [];\n\n for (const computed of computed_columns) {\n if (computed_schema[computed.column]) {\n validated.push(computed);\n }\n }\n\n return validated;\n }\n\n /**\n * Given a {@link module:perspective~table}, load it into the\n * {@link module:perspective_viewer~PerspectiveViewer} and set the viewer's\n * state. If the `computed-columns` attribute is set on the viewer, this\n * method attempts to validate the computed columns with the `Table` and\n * reconcile state.\n *\n * @param {*} table\n * @param {*} computed\n */\n async _load_table(table) {\n this.shadowRoot.querySelector(\"#app\").classList.add(\"hide_message\");\n const resolve = this._set_updating();\n\n this._clear_state();\n this._table = table;\n\n if (!this._computed_expression_parser.is_initialized) {\n // Use metadata from the `Table` to construct the expression parser\n const computed_functions = await table.get_computed_functions();\n this._computed_expression_parser.init(computed_functions);\n }\n\n let [cols, schema] = await Promise.all([table.columns(), table.schema(true)]);\n\n // Initial col order never contains computed columns\n this._initial_col_order = cols.slice();\n\n // Already validated through the attribute API\n let parsed_computed_columns = this._get_view_parsed_computed_columns();\n\n if (parsed_computed_columns.length === 0) {\n // Fallback for race condition on workspace - need to parse\n // computed expressions and then set `parsed-computed-columns`\n // so that future views can get the computed column.\n const computed_expressions = this._get_view_computed_columns();\n\n for (const expression of computed_expressions) {\n if (typeof expression === \"string\") {\n parsed_computed_columns = parsed_computed_columns.concat(this._computed_expression_parser.parse(expression));\n } else {\n parsed_computed_columns.push(expression);\n }\n }\n }\n\n const computed_schema = await table.computed_schema(parsed_computed_columns);\n\n // Validate the computed columns and make sure no invalid columns\n // are present, as invalid columns can cause segfaults later on.\n const validated = await this._validate_parsed_computed_columns(parsed_computed_columns, computed_schema);\n parsed_computed_columns = validated;\n\n // Update the viewer with the parsed computed columns\n this.setAttribute(\"parsed-computed-columns\", JSON.stringify(parsed_computed_columns));\n\n const computed_column_names = parsed_computed_columns.map(x => x.column);\n cols = cols.concat(computed_column_names);\n\n if (!this.hasAttribute(\"columns\")) {\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\n }\n\n cols.sort(column_sorter(schema));\n\n // Update aggregates\n const aggregate_attribute = this.get_aggregate_attribute();\n const aggregates = get_aggregates_with_defaults(aggregate_attribute, cols, schema, computed_schema);\n\n let shown = JSON.parse(this.getAttribute(\"columns\")); //.filter(x => all_cols.indexOf(x) > -1);\n\n // At this point, cols contains both the table columns and the\n // validated computed columns, so this should only filter on columns\n // that don't exist in either.\n const shown_is_invalid = shown.filter(x => cols.indexOf(x) > -1).length === 0;\n\n if (shown_is_invalid) {\n shown = this._initial_col_order;\n }\n\n this._aggregate_defaults = get_aggregate_defaults(cols, schema, computed_schema);\n\n // Clear the columns in the DOM before adding new ones\n this._clear_columns();\n\n for (const name of cols) {\n let aggregate = aggregates.find(a => a.column === name).op;\n const computed = computed_column_names.includes(name) ? name : undefined;\n let type = schema[name];\n if (!type) {\n type = computed_schema[name];\n }\n const row = this._new_row(name, type, aggregate, null, null, computed);\n this._inactive_columns.appendChild(row);\n if (shown.includes(name)) {\n row.classList.add(\"active\");\n }\n }\n\n while (shown.length < this._plugin.initial?.names?.length) {\n shown.push(null);\n }\n\n for (const x of shown) {\n const computed = computed_column_names.includes(x) ? x : undefined;\n let type = schema[name];\n if (!type) {\n type = computed_schema[name];\n }\n const active_row = this._new_row(x, type, undefined, undefined, undefined, computed);\n this._active_columns.appendChild(active_row);\n }\n\n if (cols.length === shown.filter(x => cols.indexOf(x) > -1).length) {\n this._inactive_columns.parentElement.classList.add(\"collapse\");\n } else {\n this._inactive_columns.parentElement.classList.remove(\"collapse\");\n }\n\n this._show_column_container();\n\n if ((await this._table.compute()) === true) {\n this._show_side_panel_actions();\n }\n\n // Filters need type information to populate e.g. the operator dropdown,\n // so reset them.\n if (this.hasAttribute(\"filters\")) {\n this.filters = this.getAttribute(\"filters\");\n }\n\n // Get an edit port from the table, and set it on the viewer so that\n // all grid edits use the specified port.\n this._edit_port = await table.make_port();\n\n // Resolve the edit port lock, which allows for `get_edit_port` to be\n // called in arbitary order without ever returning a null value.\n this._edit_port_lock.resolve(this._edit_port);\n\n try {\n await this._debounce_update({force_update: true});\n } catch (e) {\n console.warn(\"Initial view failed, resetting UI state\");\n await this.reset();\n throw e;\n }\n\n resolve();\n }\n\n async get_maxes() {\n let max_cols, max_rows;\n const [schema, num_columns] = await Promise.all([this._view.schema(), this._view.num_columns()]);\n const schema_columns = Object.keys(schema || {}).length || 1;\n\n if (typeof this._plugin.max_columns !== \"undefined\") {\n const column_group_diff = this._plugin.max_columns % schema_columns;\n const column_limit = this._plugin.max_columns + column_group_diff;\n max_cols = column_limit < num_columns ? column_limit : undefined;\n }\n\n if (typeof this._plugin.max_cells !== \"undefined\") {\n max_rows = Math.ceil(max_cols ? this._plugin.max_cells / max_cols : this._plugin.max_cells / (num_columns || 1));\n }\n\n return {max_cols, max_rows};\n }\n\n async _warn_render_size_exceeded(max_cols, max_rows) {\n if (this._show_warnings && (max_cols || max_rows)) {\n const num_columns = await this._view.num_columns();\n const num_rows = await this._view.num_rows();\n const count = num_columns * num_rows;\n const columns_are_truncated = max_cols && max_cols < num_columns;\n const rows_are_truncated = max_rows && max_rows < num_rows;\n if (columns_are_truncated && rows_are_truncated) {\n this._plugin_information.classList.remove(\"hidden\");\n const warning = _warning`Rendering ${[max_cols, num_columns]} of columns and ${[num_columns * max_rows, count]} of points.`;\n render(warning, this._plugin_information_message);\n return true;\n } else if (columns_are_truncated) {\n this._plugin_information.classList.remove(\"hidden\");\n const warning = _warning`Rendering ${[max_cols, num_columns]} of columns.`;\n render(warning, this._plugin_information_message);\n return true;\n } else if (rows_are_truncated) {\n this._plugin_information.classList.remove(\"hidden\");\n const warning = _warning`Rendering ${[num_columns * max_rows, count]} of points.`;\n render(warning, this._plugin_information_message);\n return true;\n } else {\n this._plugin_information.classList.add(\"hidden\");\n }\n }\n return false;\n }\n\n /**\n * Calculates the optimal timeout in milliseconds for render events,\n * calculated by 5 frame moving average of this component's render\n * framerate, or explicit override attribute `\"throttle\"`.\n *\n * @private\n * @returns\n * @memberof PerspectiveElement\n */\n _calculate_throttle_timeout() {\n let timeout;\n const throttle = this.getAttribute(\"throttle\");\n if (throttle === undefined || throttle === \"null\" || !this.hasAttribute(\"throttle\")) {\n if (!this.__render_times || this.__render_times.length < 5) {\n return 0;\n }\n timeout = this.__render_times.reduce((x, y) => x + y, 0) / this.__render_times.length;\n timeout = Math.min(5000, timeout);\n } else {\n timeout = parseInt(throttle);\n if (isNaN(timeout) || timeout < 0) {\n console.warn(`Bad throttle attribute value \"${throttle}\". Can be (non-negative integer) milliseconds.`);\n this.removeAttribute(\"throttle\");\n return 0;\n }\n }\n return Math.max(0, timeout);\n }\n\n _view_on_update(limit_points) {\n if (!this._debounced) {\n this._debounced = setTimeout(async () => {\n this._debounced = undefined;\n const timer = this._render_time();\n if (this._task && !this._task.initial) {\n this._task.cancel();\n }\n const task = (this._task = new CancelTask());\n const updater = this._plugin.update || this._plugin.create;\n try {\n if (limit_points) {\n const {max_cols, max_rows} = await this.get_maxes();\n if (!task.cancelled) {\n await this._warn_render_size_exceeded(max_cols, max_rows);\n await updater.call(this, this._datavis, this._view, task, max_cols, max_rows);\n }\n } else {\n await updater.call(this, this._datavis, this._view, task);\n }\n timer();\n task.cancel();\n } catch (err) {\n console.error(\"Error rendering plugin.\", err);\n } finally {\n this.dispatchEvent(new Event(\"perspective-view-update\"));\n }\n }, this._calculate_throttle_timeout());\n }\n }\n\n async _validate_filters() {\n const filters = [];\n for (const node of this._get_view_filter_nodes()) {\n const operandNode = node.shadowRoot.getElementById(\"filter_operand\");\n const exclamation = node.shadowRoot.getElementById(\"row_exclamation\");\n const {operator, operand} = JSON.parse(node.getAttribute(\"filter\"));\n const filter = [node.getAttribute(\"name\"), operator, operand];\n if (await this._table.is_valid_filter(filter)) {\n filters.push(filter);\n node.title = \"\";\n operandNode.style.borderColor = \"\";\n exclamation.hidden = true;\n } else {\n node.title = \"Invalid Filter\";\n operandNode.style.borderColor = \"red\";\n exclamation.hidden = false;\n }\n }\n\n return filters;\n }\n\n _is_config_changed(config) {\n const plugin_name = this.getAttribute(\"plugin\");\n if (isEqual(config, this._previous_config) && plugin_name === this._previous_plugin_name) {\n return false;\n } else {\n this._previous_config = config;\n this._previous_plugin_name = plugin_name;\n return true;\n }\n }\n\n async _new_view({force_update = false, ignore_size_check = false, limit_points = true} = {}) {\n if (!this._table) return;\n this._check_responsive_layout();\n const row_pivots = this._get_view_row_pivots();\n const column_pivots = this._get_view_column_pivots();\n const filters = await this._validate_filters();\n const view_aggregates = this._get_view_aggregates();\n if (view_aggregates.length === 0) return;\n const sort = this._get_view_sorts();\n\n let columns = view_aggregates.map(x => x.column);\n let aggregates = {};\n for (const a of view_aggregates) {\n aggregates[a.column] = a.op;\n }\n\n for (const s of sort) {\n const name = s[0];\n if (columns.indexOf(name) === -1 && !(column_pivots.indexOf(s) > -1 || row_pivots.indexOf(s) > -1)) {\n const all = this.get_aggregate_attribute();\n const {column, op} = all.reduce((obj, y) => (y.column === name ? y : obj));\n aggregates[column] = op;\n }\n }\n\n // Computed Columns will have been parsed by this point in the\n // setAttribute callback.\n const computed_columns = this._get_view_parsed_computed_columns();\n\n const config = {\n filter: filters,\n row_pivots: row_pivots,\n column_pivots: column_pivots,\n aggregates: aggregates,\n columns: columns,\n sort: sort,\n computed_columns: computed_columns\n };\n\n if (this._view) {\n this._view.remove_update(this._view_updater);\n this._view.delete();\n this._view = undefined;\n }\n\n try {\n this._view = this._table.view(config);\n this._view_updater = () => this._view_on_update(limit_points);\n this._view.on_update(this._view_updater);\n } catch (e) {\n this._view.delete();\n throw e;\n }\n\n const timer = this._render_time();\n this._render_count = (this._render_count || 0) + 1;\n if (this._task) {\n this._task.cancel();\n }\n\n const task = (this._task = new CancelTask(() => this._render_count--, true));\n\n try {\n const {max_cols, max_rows} = await this.get_maxes();\n if (!ignore_size_check) {\n await this._warn_render_size_exceeded(max_cols, max_rows);\n }\n if (limit_points) {\n await this._plugin.create.call(this, this._datavis, this._view, task, max_cols, max_rows, force_update);\n } else {\n await this._plugin.create.call(this, this._datavis, this._view, task, undefined, undefined, force_update);\n }\n } catch (err) {\n console.warn(err);\n } finally {\n if (!this.__render_times) {\n this.__render_times = [];\n this.dispatchEvent(new Event(\"perspective-view-update\"));\n }\n timer();\n task.cancel();\n if (this._render_count === 0) {\n this.removeAttribute(\"updating\");\n this.dispatchEvent(new Event(\"perspective-update-complete\"));\n }\n }\n }\n\n _check_loaded_table() {\n if (this._table) {\n const table = this._table;\n delete this._table;\n this._load_table(table);\n }\n }\n\n _render_time() {\n const t = performance.now();\n return () => {\n this.__render_times.unshift(performance.now() - t);\n this.__render_times = this.__render_times.slice(0, 5);\n };\n }\n\n _restyle_plugin() {\n if (this._plugin.styleElement) {\n const task = (this._task = new CancelTask());\n this._plugin.styleElement.call(this, this._datavis, this._view, task);\n }\n }\n\n _clear_state(clear_table = true) {\n if (this._task) {\n this._task.cancel();\n }\n const all = [];\n if (this._view) {\n const view = this._view;\n this._view = undefined;\n all.push(view.delete());\n view.remove_update(this._view_updater);\n view.remove_delete();\n }\n if (this._table && clear_table) {\n const table = this._table;\n this._table = undefined;\n if (table._owner_viewer && table._owner_viewer === this) {\n all.push(table.delete());\n }\n }\n return Promise.all(all);\n }\n\n _set_updating() {\n this.toggleAttribute(\"updating\", true);\n let resolve;\n this._updating_promise = new Promise(_resolve => {\n resolve = _resolve;\n });\n return resolve;\n }\n\n _register_debounce_instance() {\n const _update = debounce((resolve, ignore_size_check, force_update, limit_points) => {\n this._new_view({ignore_size_check, force_update, limit_points}).then(resolve);\n }, 0);\n\n this._debounce_update = async ({force_update = false, ignore_size_check = false, limit_points = true} = {}) => {\n if (this._table) {\n let resolve = this._set_updating();\n await new Promise(resolve => _update(resolve, ignore_size_check, force_update, limit_points));\n resolve();\n }\n };\n }\n\n _get_worker() {\n if (this._table) {\n return this._table._worker;\n }\n return perspective.shared_worker();\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {get_type_config} from \"@finos/perspective/dist/esm/config\";\nimport {dragend} from \"./dragdrop.js\";\nimport {renderers} from \"./renderers.js\";\n\nimport {PerspectiveElement} from \"./perspective_element.js\";\nimport {html, render} from \"lit-html\";\n\n/**\n * Render `<option>` blocks\n * @param {*} names name objects\n */\nconst options = vals => {\n const opts = [];\n for (name in vals) {\n opts.push(html`\n <option value=\"${name}\">${vals[name].name || name}</option>\n `);\n }\n return opts;\n};\n\nexport class DomElement extends PerspectiveElement {\n _clear_columns() {\n this._inactive_columns.innerHTML = \"\";\n this._active_columns.innerHTML = \"\";\n }\n\n set_aggregate_attribute(aggs) {\n let is_set = false;\n let aggregates = aggs.reduce((obj, agg) => {\n if (this._aggregate_defaults[agg.column] !== agg.op) {\n obj[agg.column] = agg.op;\n is_set = true;\n }\n return obj;\n }, {});\n if (is_set) {\n this.setAttribute(\"aggregates\", JSON.stringify(aggregates));\n } else {\n this.removeAttribute(\"aggregates\");\n }\n }\n\n _get_type(name) {\n let all = this._get_view_inactive_columns();\n if (all.length > 0) {\n const type = all.find(x => x.getAttribute(\"name\") === name);\n if (type) {\n return type.getAttribute(\"type\");\n } else {\n return \"integer\";\n }\n } else {\n return \"\";\n }\n }\n\n _set_row_type(row) {\n const weights = this._get_view_inactive_columns()\n .filter(x => x.getAttribute(\"type\") === \"integer\" || x.getAttribute(\"type\") === \"float\")\n .map(x => x.getAttribute(\"name\"));\n row.set_weights(weights);\n row.setAttribute(\"type\", this._get_type(row.getAttribute(\"name\")));\n }\n\n // Generates a new row in state + DOM\n _new_row(name, type, aggregate, filter, sort, computed) {\n let row = document.createElement(\"perspective-row\");\n type = type || this._get_type(name);\n\n if (!aggregate) {\n let aggregates = this.get_aggregate_attribute();\n if (aggregates) {\n aggregate = aggregates.find(x => x.column === name);\n if (aggregate) {\n aggregate = aggregate.op;\n } else {\n aggregate = get_type_config(type).aggregate;\n }\n } else {\n aggregate = get_type_config(type).aggregate;\n }\n }\n\n if (filter) {\n row.setAttribute(\"filter\", filter);\n\n if (type === \"string\") {\n // Get all unique values for the column\n const view = this._table.view({row_pivots: [name], columns: []});\n view.to_json().then(json => {\n row.choices(this._autocomplete_choices(json));\n });\n view.delete();\n }\n }\n\n if (sort) {\n row.setAttribute(\"sort-order\", sort);\n } else {\n if (this._get_view_column_pivots().indexOf(name) > -1) {\n row.setAttribute(\"sort-order\", \"col asc\");\n } else {\n row.setAttribute(\"sort-order\", \"asc\");\n }\n }\n\n const weights = this._get_view_inactive_columns()\n .filter(x => x.getAttribute(\"type\") === \"integer\" || x.getAttribute(\"type\") === \"float\")\n .map(x => x.getAttribute(\"name\"));\n row.set_weights(weights);\n\n if (name === null) {\n row.classList.add(\"null-column\");\n } else {\n row.setAttribute(\"type\", type);\n row.setAttribute(\"name\", name);\n }\n\n row.setAttribute(\"aggregate\", Array.isArray(aggregate) ? JSON.stringify(aggregate) : aggregate);\n\n row.addEventListener(\"visibility-clicked\", this._column_visibility_clicked.bind(this));\n row.addEventListener(\"aggregate-selected\", this._column_aggregate_clicked.bind(this));\n row.addEventListener(\"filter-selected\", this._column_filter_clicked.bind(this));\n row.addEventListener(\"close-clicked\", event => dragend.call(this, event.detail));\n row.addEventListener(\"sort-order\", this._sort_order_clicked.bind(this));\n\n row.addEventListener(\"row-drag\", () => {\n this.classList.add(\"dragging\");\n this._active_columns.style.overflow = \"hidden\";\n this._original_index = Array.prototype.slice.call(this._active_columns.children).findIndex(x => x.getAttribute(\"name\") === name);\n if (this._original_index !== -1) {\n this._drop_target_hover = this._active_columns.children[this._original_index];\n setTimeout(() => row.setAttribute(\"drop-target\", true));\n } else {\n this._drop_target_hover = this._new_row(name, type, aggregate);\n }\n });\n row.addEventListener(\"row-dragend\", () => {\n this._active_columns.style.overflow = \"auto\";\n this.classList.remove(\"dragging\");\n });\n\n if (computed) {\n row.setAttribute(\"computed_column\", JSON.stringify(computed));\n row.classList.add(\"computed\");\n }\n\n return row;\n }\n\n /**\n * Using a computed schema generated in the attribute callback, add\n * computed columns to the inactive columns area if they're not specified\n * to be inserted anywhere else in the UI.\n */\n _update_computed_column_view(computed_schema) {\n const computed_columns = this._get_view_parsed_computed_columns();\n const columns = this._get_view_all_column_names();\n const active = this._get_view_active_column_names();\n\n if (Object.keys(computed_schema).length === 0 || computed_columns.length === 0) {\n return;\n }\n\n let added_count = 0;\n\n const attr = JSON.parse(this.getAttribute(\"columns\")) || [];\n let reset_columns_attr = false;\n\n for (const cc of computed_columns) {\n const name = cc.column;\n\n // Check for whether the computed column is in the attribute but\n // NOT in the DOM - occurs when restore is called and a race\n // condition between `computed-columns` and `columns` occurs.\n const should_reset = !columns.includes(name) && attr.includes(name);\n\n if (should_reset) {\n reset_columns_attr = true;\n }\n\n // If the column already exists or is already in the active DOM,\n // don't add it to the inactive DOM\n const should_add = !columns.includes(name) && !active.includes(name);\n\n if (!should_add) {\n continue;\n }\n\n const row = this._new_row(name, computed_schema[name], null, null, null, name);\n this._inactive_columns.insertBefore(row, this._inactive_columns.childNodes[0] || null);\n added_count++;\n }\n\n if (reset_columns_attr) {\n this._update_column_view(attr, true);\n } else {\n // Remove collapse so that new inactive columns show up\n if (added_count > 0 && this._inactive_columns.parentElement.classList.contains(\"collapse\")) {\n this._inactive_columns.parentElement.classList.remove(\"collapse\");\n }\n }\n }\n\n /**\n * Given two sets of computed columns, remove columns that are present in\n * `old_computed_columns` but not `new_computed_columns`, and return a\n * list of computed column definitions to remove.\n *\n * @param {*} old_computed_columns\n * @param {*} new_computed_columns\n */\n _diff_computed_column_view(old_computed_columns, new_computed_columns) {\n const to_remove = [];\n const new_names = new_computed_columns.map(x => x.column);\n for (const column of old_computed_columns) {\n if (!new_names.includes(column.column)) {\n to_remove.push(column);\n }\n }\n return to_remove;\n }\n\n /**\n * When the `computed-columns` attribute is set to [], null, or undefined,\n * clear all previously created columns from the UI.\n */\n _reset_computed_column_view(computed_columns) {\n if (!computed_columns || computed_columns.length === 0) {\n return;\n }\n\n const computed_names = computed_columns.map(x => x.column);\n\n // Remove computed columns from all\n const filtered_active = this._get_view_active_column_names().filter(x => !computed_names.includes(x));\n\n const aggregates = this._get_view_aggregates().filter(x => !computed_names.includes(x.column));\n const rp = this._get_view_row_pivots().filter(x => !computed_names.includes(x));\n const cp = this._get_view_column_pivots().filter(x => !computed_names.includes(x));\n const sort = this._get_view_sorts().filter(x => !computed_names.includes(x[0]));\n const filters = this._get_view_filters().filter(x => !computed_names.includes(x[0]));\n\n // Aggregates as an array is from the attribute API\n this.set_aggregate_attribute(aggregates);\n\n this.setAttribute(\"columns\", JSON.stringify(filtered_active));\n this.setAttribute(\"row-pivots\", JSON.stringify(rp));\n this.setAttribute(\"column-pivots\", JSON.stringify(cp));\n this.setAttribute(\"sort\", JSON.stringify(sort));\n this.setAttribute(\"filters\", JSON.stringify(filters));\n\n // Remove inactive computed columns\n const inactive_computed = this._get_view_all_columns().filter(x => x.classList.contains(\"computed\"));\n\n for (const col of inactive_computed) {\n this._inactive_columns.removeChild(col);\n }\n\n // Re-check on whether to collapse inactive columns\n const pop_cols = this._get_view_active_columns().filter(x => typeof x !== \"undefined\" && x !== null);\n const lis = this._get_view_inactive_columns();\n\n if (pop_cols.length === lis.length) {\n this._inactive_columns.parentElement.classList.add(\"collapse\");\n } else {\n this._inactive_columns.parentElement.classList.remove(\"collapse\");\n }\n }\n\n _update_column_view(columns, reset = false) {\n if (!columns) {\n columns = this._get_view_active_column_names();\n }\n\n if (this._plugin.initial && this._plugin.initial.names) {\n while (columns.length < this._plugin.initial.names.length) {\n columns.push(null);\n }\n }\n\n // If columns were not passed in, this is needed to keep the attribute\n // API in sync with DOM state.\n this.setAttribute(\"columns\", JSON.stringify(columns));\n\n const pop_cols = columns.filter(x => typeof x !== \"undefined\" && x !== null);\n const lis = this._get_view_inactive_columns();\n if (pop_cols.length === lis.length) {\n this._inactive_columns.parentElement.classList.add(\"collapse\");\n } else {\n this._inactive_columns.parentElement.classList.remove(\"collapse\");\n }\n lis.forEach(x => {\n const index = pop_cols.indexOf(x.getAttribute(\"name\"));\n if (index === -1) {\n x.classList.remove(\"active\");\n } else {\n x.classList.add(\"active\");\n }\n });\n if (reset) {\n this._update_column_list(columns, this._active_columns, (name, computed_names) => {\n if (name === null) {\n return this._new_row(null);\n } else {\n const ref = lis.find(x => x.getAttribute(\"name\") === name);\n if (ref) {\n const name = ref.getAttribute(\"name\");\n let computed;\n if (computed_names.includes(name)) {\n computed = name;\n }\n return this._new_row(name, ref.getAttribute(\"type\"), undefined, undefined, undefined, computed);\n }\n }\n });\n }\n }\n\n _update_column_list(columns, container, callback, accessor) {\n accessor = accessor || ((x, y) => y.getAttribute(\"name\") === x);\n const active_columns = Array.prototype.slice.call(container.children);\n\n // Make sure that the `computed` attribute is set on computed columns\n const computed_columns = this._get_view_parsed_computed_columns();\n const computed_names = computed_columns.map(x => x.column);\n\n for (let i = 0, j = 0; i < active_columns.length || j < columns.length; i++, j++) {\n const name = columns[j];\n const col = active_columns[i];\n const next_col = active_columns[i + 1];\n if (!col) {\n const node = callback(name, computed_names);\n if (node) {\n container.appendChild(node);\n }\n } else if (typeof name === \"undefined\") {\n container.removeChild(col);\n } else if (accessor(name, col)) {\n this._set_row_type(col);\n } else {\n if (col.classList.contains(\"null-column\")) {\n const node = callback(name, computed_names);\n if (node) {\n container.replaceChild(node, col);\n }\n } else if (next_col && accessor(name, next_col)) {\n container.removeChild(col);\n i++;\n // j--;\n } else {\n const node = callback(name, computed_names);\n if (node) {\n container.insertBefore(node, col);\n i--;\n }\n }\n }\n }\n }\n\n _set_row_styles() {\n let style = \"\";\n if (this._plugin.initial && this._plugin.initial.names) {\n for (const nidx in this._plugin.initial.names) {\n const name = this._plugin.initial.names[nidx];\n style += `#active_columns perspective-row:nth-child(${parseInt(nidx) + 1}){margin-top:23px;}`;\n style += `#active_columns perspective-row:nth-child(${parseInt(nidx) + 1}):before{content:\"${name}\";}`;\n }\n }\n this.shadowRoot.querySelector(\"#psp_styles\").innerHTML = style;\n }\n\n _show_column_container() {\n this.shadowRoot.querySelector(\"#columns_container\").style.visibility = \"visible\";\n }\n\n _show_side_panel_actions() {\n this.shadowRoot.querySelector(\"#side_panel__actions\").style.visibility = \"visible\";\n }\n\n _remove_null_columns(since_index = 0) {\n const elems = this._get_view_active_columns();\n while (++since_index < elems.length) {\n const elem = elems[since_index];\n if (elem.classList.contains(\"null-column\")) {\n this.shadowRoot.querySelector(\"#active_columns\").removeChild(elem);\n }\n }\n }\n\n _set_column_defaults() {\n const cols = this._get_view_all_columns();\n const active_cols = this._get_view_active_valid_columns();\n const valid_active_cols = this._get_view_active_valid_column_names();\n if (cols.length > 0) {\n if (this._plugin.initial) {\n let pref = [];\n let count = this._plugin.initial.count || 2;\n this._fill_numeric(active_cols, pref);\n this._fill_numeric(cols, pref);\n this._fill_numeric(cols, pref, true);\n pref = pref.slice(0, count);\n const labels = this._plugin.initial.names;\n while (labels && pref.length < labels.length) {\n pref.push(null);\n }\n this.setAttribute(\"columns\", JSON.stringify(pref));\n } else if (this._plugin.selectMode === \"select\") {\n this.setAttribute(\"columns\", JSON.stringify([cols[0].getAttribute(\"name\")]));\n } else {\n this.setAttribute(\"columns\", JSON.stringify(valid_active_cols));\n this._remove_null_columns();\n }\n }\n }\n\n _fill_numeric(cols, pref, bypass = false) {\n for (let col of cols) {\n let type = col.getAttribute(\"type\");\n let name = col.getAttribute(\"name\");\n if (bypass || ([\"float\", \"integer\"].indexOf(type) > -1 && pref.indexOf(name) === -1)) {\n pref.push(name);\n }\n }\n }\n\n async _check_responsive_layout() {\n if (this.shadowRoot) {\n const app = this.shadowRoot.querySelector(\"#app\");\n if (this.clientHeight < 500 && this.clientWidth > 600 && this._get_view_columns({active: false}).length > this._get_view_columns().length) {\n if (!app.classList.contains(\"columns_horizontal\")) {\n const old = this._persisted_side_panel_width;\n this._persisted_side_panel_width = this._side_panel.style.width;\n this._side_panel.style.width = old || \"\";\n app.classList.add(\"columns_horizontal\");\n }\n } else if (app.classList.contains(\"columns_horizontal\")) {\n const panel = this.shadowRoot.querySelector(\"#pivot_chart_container\");\n panel.clientWidth + this._side_panel.clientWidth;\n const width = this._persisted_side_panel_width || panel.clientWidth + this._side_panel.clientWidth / 2;\n const height = panel.clientHeight + 50;\n await this._pre_resize(width, height, () => {\n const old = this._persisted_side_panel_width;\n this._persisted_side_panel_width = this._side_panel.style.width;\n this._side_panel.style.width = old || \"\";\n app.classList.remove(\"columns_horizontal\");\n });\n return true;\n } else if (this.clientWidth < 600) {\n if (!app.classList.contains(\"narrow\")) {\n app.classList.add(\"narrow\");\n }\n } else if (app.classList.contains(\"narrow\")) {\n app.classList.remove(\"narrow\");\n }\n return false;\n }\n return false;\n }\n\n // setup functions\n _register_ids() {\n this._aggregate_selector = this.shadowRoot.querySelector(\"#aggregate_selector\");\n this._vis_selector = this.shadowRoot.querySelector(\"#vis_selector\");\n this._filters = this.shadowRoot.querySelector(\"#filters\");\n this._row_pivots = this.shadowRoot.querySelector(\"#row_pivots\");\n this._column_pivots = this.shadowRoot.querySelector(\"#column_pivots\");\n this._datavis = this.shadowRoot.querySelector(\"#pivot_chart\");\n this._active_columns = this.shadowRoot.querySelector(\"#active_columns\");\n this._inactive_columns = this.shadowRoot.querySelector(\"#inactive_columns\");\n this._side_panel_actions = this.shadowRoot.querySelector(\"#side_panel__actions\");\n this._add_computed_expression_button = this.shadowRoot.querySelector(\"#add-computed-expression\");\n this._computed_expression_widget = this.shadowRoot.querySelector(\"perspective-computed-expression-widget\");\n this._inner_drop_target = this.shadowRoot.querySelector(\"#drop_target_inner\");\n this._drop_target = this.shadowRoot.querySelector(\"#drop_target\");\n this._config_button = this.shadowRoot.querySelector(\"#config_button\");\n this._reset_button = this.shadowRoot.querySelector(\"#reset_button\");\n this._download_button = this.shadowRoot.querySelector(\"#download_button\");\n this._copy_button = this.shadowRoot.querySelector(\"#copy_button\");\n this._side_panel = this.shadowRoot.querySelector(\"#side_panel\");\n this._top_panel = this.shadowRoot.querySelector(\"#top_panel\");\n this._sort = this.shadowRoot.querySelector(\"#sort\");\n this._transpose_button = this.shadowRoot.querySelector(\"#transpose_button\");\n this._plugin_information = this.shadowRoot.querySelector(\".plugin_information\");\n this._plugin_information_action = this.shadowRoot.querySelector(\".plugin_information__action\");\n this._plugin_information_action_close = this.shadowRoot.querySelector(\".plugin_information__action--close\");\n this._plugin_information_message = this.shadowRoot.querySelector(\"#plugin_information_count\");\n this._resize_bar = this.shadowRoot.querySelector(\"#resize_bar\");\n }\n\n // sets state, manipulates DOM\n _register_view_options() {\n let current_renderers = renderers.getInstance();\n render(options(current_renderers), this._vis_selector);\n }\n\n // sets state\n _register_data_attribute() {\n // TODO this feature needs to become a real attribute.\n if (this.getAttribute(\"data\")) {\n let data = this.getAttribute(\"data\");\n try {\n data = JSON.parse(data);\n } catch (e) {}\n this.load(data);\n }\n }\n\n _autocomplete_choices(json) {\n const choices = [];\n for (let i = 1; i < json.length; i++) {\n const row_path = json[i].__ROW_PATH__;\n if (Array.isArray(row_path) && row_path.length > 0 && row_path[0]) {\n choices.push(row_path[0]);\n }\n }\n return choices;\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2018, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport {dragend, column_dragend, column_dragleave, column_dragover, column_drop, drop, dragenter, dragover, dragleave} from \"./dragdrop.js\";\n\nimport {DomElement} from \"./dom_element.js\";\n\nexport class ActionElement extends DomElement {\n _show_context_menu(event) {\n this.shadowRoot.querySelector(\"#app\").classList.toggle(\"show_menu\");\n event.stopPropagation();\n event.preventDefault();\n return false;\n }\n\n _hide_context_menu() {\n this.shadowRoot.querySelector(\"#app\").classList.remove(\"show_menu\");\n }\n\n async _toggle_config(event) {\n if (!event || event.button !== 2) {\n this._show_config = !this._show_config;\n this._hide_context_menu();\n const panel = this.shadowRoot.querySelector(\"#pivot_chart_container\");\n if (!this._show_config) {\n await this._pre_resize(\n panel.clientWidth + this._side_panel.clientWidth,\n panel.clientHeight + this._top_panel.clientHeight,\n () => {\n this._side_panel.style.display = \"none\";\n this._top_panel.style.display = \"none\";\n this.removeAttribute(\"settings\");\n },\n () => this.dispatchEvent(new CustomEvent(\"perspective-toggle-settings\", {detail: this._show_config}))\n );\n } else {\n await this._post_resize(\n () => {\n this.toggleAttribute(\"settings\", true);\n },\n () => {\n this._side_panel.style.display = \"flex\";\n this._top_panel.style.display = \"flex\";\n this.dispatchEvent(new CustomEvent(\"perspective-toggle-settings\", {detail: this._show_config}));\n }\n );\n }\n }\n }\n\n /**\n * Given a targe `width` and `height`, pre-size the plugin before modifying\n * the HTML to reduce visual tearing.\n *\n * @private\n * @param {*} width\n * @param {*} height\n * @param {*} post Function to run once action is complete\n * @param {*} [pre=undefined] Function to run once visual effects have been\n * applied. This may be before `post`, as pre-sizing will be delayed when\n * the target size is a sub-window of the current view.\n * @memberof ActionElement\n */\n async _pre_resize(width, height, post, pre = undefined) {\n this._datavis.style.width = `${width}px`;\n this._datavis.style.height = `${height}px`;\n try {\n if (!document.hidden && this.offsetParent) {\n await this._plugin.resize.call(this);\n }\n } finally {\n pre?.();\n this._datavis.style.width = \"100%\";\n this._datavis.style.height = \"100%\";\n post();\n }\n }\n\n async _post_resize(post, pre) {\n pre?.();\n try {\n if (!document.hidden && this.offsetParent) {\n await this._plugin.resize.call(this);\n }\n } finally {\n post();\n }\n }\n\n /**\n * Display the computed expressions panel.\n *\n * @param {*} event\n */\n _open_computed_expression_widget(event) {\n event.stopImmediatePropagation();\n // FIXME: we need a better way to pass down types, metadata, etc.\n // from the parent viewer to child web components.\n this._computed_expression_widget._computed_expression_parser = this._computed_expression_parser;\n\n // Bind `get_type` so the expression editor can render the correct\n // types for each column.\n this._computed_expression_widget._get_type = this._get_type.bind(this);\n\n // Pass down a way to get the column names from the viewer.\n this._computed_expression_widget._get_view_all_column_names = this._get_view_all_column_names.bind(this);\n this._computed_expression_widget._get_view_column_names_by_types = this._get_view_column_names_by_types.bind(this);\n\n this._computed_expression_widget.style.display = \"flex\";\n this._side_panel_actions.style.display = \"none\";\n this._computed_expression_widget._observe_editor();\n }\n\n /**\n * Given an expression (in the `detail` property of the\n * `perspective-computed-expression-save` event), retrieve the viewer's\n * `computed-columns` array and append the new expression to be parsed.\n *\n * @param {*} event\n */\n _save_computed_expression(event) {\n const expression = event.detail.expression;\n\n // `computed-columns` stores the raw expression typed by the user.\n let computed_columns = this._get_view_computed_columns();\n\n if (computed_columns.includes(expression)) {\n console.warn(`\"${expression}\" was not applied because it already exists.`);\n return;\n }\n\n computed_columns.push(expression);\n\n this.setAttribute(\"computed-columns\", JSON.stringify(computed_columns));\n }\n\n async _type_check_computed_expression(event) {\n const parsed = event.detail.parsed_expression || [];\n if (parsed.length === 0) {\n this._computed_expression_widget._type_check_expression({});\n return;\n }\n const functions = {};\n for (const col of parsed) {\n functions[col.column] = col.computed_function_name;\n }\n const schema = await this._table.computed_schema(parsed);\n // Look at the failing values, and get their expected types\n const expected_types = {};\n for (const key in functions) {\n if (!schema[key]) {\n expected_types[key] = await this._table.get_computation_input_types(functions[key]);\n }\n }\n\n this._computed_expression_widget._type_check_expression(schema, expected_types);\n }\n\n /**\n * Remove all computed expressions from the DOM.\n */\n _clear_all_computed_expressions() {\n this.setAttribute(\"computed-columns\", JSON.stringify([]));\n }\n\n _set_computed_expression(event) {\n return event;\n }\n\n _column_visibility_clicked(ev) {\n const parent = ev.currentTarget;\n const is_active = parent.parentElement.getAttribute(\"id\") === \"active_columns\";\n if (is_active) {\n const min_columns = this._plugin.initial?.count || 1;\n if (this._get_view_active_valid_column_count() === min_columns) {\n return;\n }\n if (ev.detail.shiftKey) {\n for (let child of Array.prototype.slice.call(this._active_columns.children)) {\n if (child !== parent) {\n this._active_columns.removeChild(child);\n }\n }\n } else {\n const index = Array.prototype.slice.call(this._active_columns.children).indexOf(parent);\n if (index < this._plugin.initial?.count) {\n return;\n } else if (index < this._plugin.initial?.names?.length - 1) {\n this._active_columns.insertBefore(this._new_row(null), parent);\n }\n this._active_columns.removeChild(parent);\n }\n } else {\n if ((ev.detail.shiftKey && this._plugin.selectMode === \"toggle\") || (!ev.detail.shiftKey && this._plugin.selectMode === \"select\")) {\n for (let child of Array.prototype.slice.call(this._active_columns.children)) {\n this._active_columns.removeChild(child);\n }\n }\n let row = this._new_row(parent.getAttribute(\"name\"), parent.getAttribute(\"type\"));\n const cols = this._get_view_active_columns();\n let i = cols.length - 1;\n if (!cols[i] || !cols[i]?.classList.contains(\"null-column\")) {\n this._active_columns.appendChild(row);\n } else\n while (i-- > 0) {\n if (!cols[i].classList.contains(\"null-column\")) {\n this._active_columns.replaceChild(row, cols[i + 1]);\n break;\n }\n }\n }\n this._check_responsive_layout();\n this._update_column_view();\n }\n\n _column_aggregate_clicked() {\n let aggregates = this.get_aggregate_attribute();\n let new_aggregates = this._get_view_aggregates();\n for (let aggregate of aggregates) {\n let updated_agg = new_aggregates.find(x => x.column === aggregate.column);\n if (updated_agg) {\n aggregate.op = updated_agg.op;\n }\n }\n this.set_aggregate_attribute(aggregates);\n this._update_column_view();\n this._debounce_update();\n }\n\n _column_filter_clicked() {\n let new_filters = this._get_view_filters();\n this._updating_filter = true;\n this.setAttribute(\"filters\", JSON.stringify(new_filters));\n this._updating_filter = false;\n this._debounce_update();\n }\n\n _increment_sort(sort, column_sorting, abs_sorting) {\n let sort_orders = [\"asc\", \"desc\"];\n if (column_sorting) {\n sort_orders.push(\"col asc\", \"col desc\");\n }\n if (abs_sorting) {\n sort_orders = sort_orders.map(x => `${x} abs`);\n }\n sort_orders.push(\"none\");\n return sort_orders[(sort_orders.indexOf(sort) + 1) % sort_orders.length];\n }\n\n _sort_order_clicked(event) {\n const row = event.target;\n const abs_sorting = event.detail.shiftKey && row.getAttribute(\"type\") !== \"string\";\n const new_sort_order = this._increment_sort(row.getAttribute(\"sort-order\"), this._get_view_column_pivots().length > 0, abs_sorting);\n row.setAttribute(\"sort-order\", new_sort_order);\n\n const sort = this._get_view_sorts();\n this.setAttribute(\"sort\", JSON.stringify(sort));\n }\n\n // edits state\n _transpose() {\n const has_row = this.hasAttribute(\"row-pivots\");\n const has_col = this.hasAttribute(\"column-pivots\");\n if (has_row && has_col) {\n let row_pivots = this.getAttribute(\"row-pivots\");\n this.setAttribute(\"row-pivots\", this.getAttribute(\"column-pivots\"));\n this.setAttribute(\"column-pivots\", row_pivots);\n } else if (has_row) {\n let row_pivots = this.getAttribute(\"row-pivots\");\n this.removeAttribute(\"row-pivots\");\n this.setAttribute(\"column-pivots\", row_pivots);\n } else if (has_col) {\n let column_pivots = this.getAttribute(\"column-pivots\");\n this.removeAttribute(\"column-pivots\");\n this.setAttribute(\"row-pivots\", column_pivots);\n } else {\n this.removeAttribute(\"column-pivots\");\n this.removeAttribute(\"row-pivots\");\n }\n }\n\n _reset_sidepanel() {\n this._side_panel.style.width = \"\";\n }\n\n _resize_sidepanel(event) {\n const initial = document.body.style.cursor;\n document.body.style.cursor = \"col-resize\";\n const start = event.clientX;\n const width = this._side_panel.offsetWidth;\n const resize = event => {\n const new_width = Math.max(0, Math.min(width + (event.clientX - start), this.offsetWidth - 10));\n this._side_panel.style.width = `${new_width}px`;\n if (this._plugin) {\n this.notifyResize();\n }\n };\n const stop = () => {\n document.body.style.cursor = initial;\n document.removeEventListener(\"mousemove\", resize);\n document.removeEventListener(\"mouseup\", stop);\n };\n document.addEventListener(\"mousemove\", resize);\n document.addEventListener(\"mouseup\", stop);\n }\n\n _vis_selector_changed() {\n this._plugin_information.classList.add(\"hidden\");\n this.setAttribute(\"plugin\", this._vis_selector.value);\n this._active_columns.classList.remove(\"one_lock\", \"two_lock\");\n const classname = [\"one_lock\", \"two_lock\"][this._plugin.initial?.count - 1];\n if (classname) {\n this._active_columns.classList.add(classname);\n }\n this._debounce_update();\n }\n\n // most of these are drag and drop handlers - how to clean up?\n _register_callbacks() {\n this._sort.addEventListener(\"drop\", drop.bind(this));\n this._sort.addEventListener(\"dragend\", dragend.bind(this));\n this._sort.addEventListener(\"dragenter\", dragenter.bind(this));\n this._sort.addEventListener(\"dragover\", dragover.bind(this));\n this._sort.addEventListener(\"dragleave\", dragleave.bind(this));\n this._row_pivots.addEventListener(\"drop\", drop.bind(this));\n this._row_pivots.addEventListener(\"dragend\", dragend.bind(this));\n this._row_pivots.addEventListener(\"dragenter\", dragenter.bind(this));\n this._row_pivots.addEventListener(\"dragover\", dragover.bind(this));\n this._row_pivots.addEventListener(\"dragleave\", dragleave.bind(this));\n this._column_pivots.addEventListener(\"drop\", drop.bind(this));\n this._column_pivots.addEventListener(\"dragend\", dragend.bind(this));\n this._column_pivots.addEventListener(\"dragenter\", dragenter.bind(this));\n this._column_pivots.addEventListener(\"dragover\", dragover.bind(this));\n this._column_pivots.addEventListener(\"dragleave\", dragleave.bind(this));\n this._filters.addEventListener(\"drop\", drop.bind(this));\n this._filters.addEventListener(\"dragend\", dragend.bind(this));\n this._filters.addEventListener(\"dragenter\", dragenter.bind(this));\n this._filters.addEventListener(\"dragover\", dragover.bind(this));\n this._filters.addEventListener(\"dragleave\", dragleave.bind(this));\n this._active_columns.addEventListener(\"drop\", column_drop.bind(this));\n this._active_columns.addEventListener(\"dragenter\", dragenter.bind(this));\n this._active_columns.addEventListener(\"dragend\", column_dragend.bind(this));\n this._active_columns.addEventListener(\"dragover\", column_dragover.bind(this));\n this._active_columns.addEventListener(\"dragleave\", column_dragleave.bind(this));\n this._add_computed_expression_button.addEventListener(\"click\", this._open_computed_expression_widget.bind(this));\n this._computed_expression_widget.addEventListener(\"perspective-computed-expression-save\", this._save_computed_expression.bind(this));\n this._computed_expression_widget.addEventListener(\"perspective-computed-expression-resize\", this._reset_sidepanel.bind(this));\n this._computed_expression_widget.addEventListener(\"perspective-computed-expression-type-check\", this._type_check_computed_expression.bind(this));\n this._computed_expression_widget.addEventListener(\"perspective-computed-expression-remove\", this._clear_all_computed_expressions.bind(this));\n this._computed_expression_widget.addEventListener(\"perspective-computed-expression-update\", this._set_computed_expression.bind(this));\n this._config_button.addEventListener(\"mousedown\", this._toggle_config.bind(this));\n this._config_button.addEventListener(\"contextmenu\", this._show_context_menu.bind(this));\n this._reset_button.addEventListener(\"click\", this.reset.bind(this));\n this._copy_button.addEventListener(\"click\", event => this.copy(event.shiftKey));\n this._download_button.addEventListener(\"click\", event => this.download(event.shiftKey));\n this._transpose_button.addEventListener(\"click\", this._transpose.bind(this));\n this._drop_target.addEventListener(\"dragover\", dragover.bind(this));\n this._resize_bar.addEventListener(\"mousedown\", this._resize_sidepanel.bind(this));\n this._resize_bar.addEventListener(\"dblclick\", this._reset_sidepanel.bind(this));\n\n this._vis_selector.addEventListener(\"change\", this._vis_selector_changed.bind(this));\n\n this._plugin_information_action.addEventListener(\"click\", () => {\n this._debounce_update({ignore_size_check: true, limit_points: false});\n this._plugin_information.classList.add(\"hidden\");\n });\n\n this._plugin_information_action_close.addEventListener(\"click\", () => {\n this._plugin_information.classList.add(\"hidden\");\n });\n }\n}\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport \"@webcomponents/webcomponentsjs\";\nimport \"./polyfill.js\";\n\nimport {bindTemplate, json_attribute, array_attribute, copy_to_clipboard, invertPromise, throttlePromise} from \"./utils.js\";\nimport {renderers, register_debug_plugin} from \"./viewer/renderers.js\";\nimport \"./row.js\";\nimport \"./autocomplete_widget.js\";\nimport \"./expression_editor.js\";\nimport \"./computed_expressions/widget.js\";\n\nimport template from \"../html/viewer.html\";\n\nimport view_style from \"../less/viewer.less\";\nimport default_style from \"../less/default.less\";\n\nimport {ActionElement} from \"./viewer/action_element.js\";\nimport {COMPUTED_EXPRESSION_PARSER} from \"./computed_expressions/computed_expression_parser.js\";\n\n/**\n * Module for the `<perspective-viewer>` custom element.\n *\n * This module has no exports, but importing it has a side\n * effect: the {@link module:perspective_viewer~PerspectiveViewer} class is\n * registered as a custom element, after which it can be used as a standard DOM\n * element.\n *\n * The documentation in this module defines the instance structure of a\n * `<perspective-viewer>` DOM object instantiated typically, through HTML or any\n * relevent DOM method e.g. `document.createElement(\"perspective-viewer\")` or\n * `document.getElementsByTagName(\"perspective-viewer\")`.\n *\n * @module perspective-viewer\n */\n\nconst PERSISTENT_ATTRIBUTES = [\"selectable\", \"editable\", \"plugin\", \"computed-columns\", \"row-pivots\", \"column-pivots\", \"aggregates\", \"filters\", \"sort\", \"columns\"];\n\n/**\n * The HTMLElement class for `<perspective-viewer>` custom element.\n *\n * This class is not exported, so this constructor cannot be invoked in the\n * typical manner; instead, instances of the class are created through the\n * Custom Elements DOM API.\n *\n * Properties of an instance of this class, such as\n * {@link module:perspective_viewer~PerspectiveViewer#columns}, are reflected on\n * the DOM element as Attributes, and should be accessed as such - e.g.\n * `instance.setAttribute(\"columns\", JSON.stringify([\"a\", \"b\"]))`.\n *\n * @class PerspectiveViewer\n * @extends {HTMLElement}\n * @example\n * // Create a new `<perspective-viewer>`\n * const elem = document.createElement(\"perspective-viewer\");\n * elem.setAttribute(\"columns\", JSON.stringify([\"a\", \"b\"]));\n * document.body.appendChild(elem);\n *\n */\n@bindTemplate(template, view_style, default_style) // eslint-disable-next-line no-unused-vars\nclass PerspectiveViewer extends ActionElement {\n constructor() {\n super();\n this._register_debounce_instance();\n this._show_config = true;\n this._show_warnings = true;\n this.__render_times = [];\n this._resize_handler = this.notifyResize.bind(this);\n this._computed_expression_parser = COMPUTED_EXPRESSION_PARSER;\n this._edit_port = null;\n this._edit_port_lock = invertPromise();\n window.addEventListener(\"resize\", this._resize_handler);\n }\n\n connectedCallback() {\n if (Object.keys(renderers.getInstance()).length === 0) {\n register_debug_plugin();\n }\n\n this.toggleAttribute(\"settings\", true);\n\n this._register_ids();\n this._register_callbacks();\n this._register_view_options();\n this._register_data_attribute();\n this.toggleConfig();\n this._check_loaded_table();\n }\n\n /**\n * Sets this `perspective.table.view`'s `sort` property, an Array of column\n * names.\n *\n * @kind member\n * @type {Array<String>} Array of arrays tuples of column name and\n * direction, where the possible values are \"asc\", \"desc\", \"asc abs\", \"desc\n * abs\" and \"none\".\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('sort', JSON.stringify([[\"x\",\"desc\"]));\n * @example <caption>via HTML</caption>\n * <perspective-viewer sort='[[\"x\",\"desc\"]]'></perspective-viewer>\n */\n @array_attribute\n sort(sort) {\n if (sort === null || sort === undefined || sort.length === 0) {\n if (this.hasAttribute(\"sort\")) {\n this.removeAttribute(\"sort\");\n }\n sort = [];\n }\n var inner = this._sort.querySelector(\"ul\");\n this._update_column_list(\n sort,\n inner,\n (s, computed_names) => {\n let dir = \"asc\";\n if (Array.isArray(s)) {\n dir = s[1];\n s = s[0];\n }\n let computed = undefined;\n if (computed_names.includes(s)) {\n computed = s;\n }\n return this._new_row(s, false, false, false, dir, computed);\n },\n (sort, node) => {\n if (Array.isArray(sort)) {\n return node.getAttribute(\"name\") === sort[0] && node.getAttribute(\"sort-order\") === sort[1];\n }\n return node.getAttribute(\"name\") === sort;\n }\n );\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * The set of visible columns.\n *\n * @kind member\n * @type {Array<String>}\n * @param {Array} columns An Array of strings, the names of visible columns.\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('columns', JSON.stringify([\"x\", \"y'\"]));\n * @example <caption>via HTML</caption>\n * <perspective-viewer columns='[\"x\", \"y\"]'></perspective-viewer>\n */\n @array_attribute\n columns(show) {\n if (show === null || show === undefined || show.length === 0) {\n if (this.hasAttribute(\"columns\")) {\n if (this._initial_col_order) {\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\n } else {\n this.removeAttribute(\"columns\");\n }\n }\n show = (this._initial_col_order || []).slice();\n }\n this._update_column_view(show, true);\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /* eslint-disable max-len */\n\n /**\n * Sets new computed columns for the viewer.\n *\n * @kind member\n * @type {Array<Object>}\n * @param {Array<Object>} computed-columns An Array of computed column objects,\n * which have three properties: `column`, a column name for the new column,\n * `computed_function_name`, a String representing the computed function to\n * apply, and `inputs`, an Array of String column names to be used as\n * inputs to the computation.\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('computed-columns', JSON.stringify([{column: \"x+y\", computed_function_name: \"+\", inputs: [\"x\", \"y\"]}]));\n * @example <caption>via HTML</caption>\n * <perspective-viewer computed-columns=\"[{column:'x+y',computed_function_name:'+',inputs:['x','y']}]\"\"></perspective-viewer>\n */\n @array_attribute\n \"computed-columns\"(computed_columns) {\n const resolve = this._set_updating();\n\n (async () => {\n if (this._computed_expression_widget.style.display !== \"none\") {\n this._computed_expression_widget._close_expression_widget();\n }\n if (computed_columns === null || computed_columns === undefined || computed_columns.length === 0) {\n // Remove computed columns from the DOM, and reset the config\n // to exclude all computed columns.\n if (this.hasAttribute(\"computed-columns\")) {\n this.removeAttribute(\"computed-columns\");\n const parsed = this._get_view_parsed_computed_columns();\n this._reset_computed_column_view(parsed);\n this.removeAttribute(\"parsed-computed-columns\");\n resolve();\n return;\n }\n computed_columns = [];\n }\n\n let parsed_computed_columns = [];\n\n for (const column of computed_columns) {\n if (typeof column === \"string\") {\n // Either validated through the UI or here. If a `table`\n // has not been loaded when the parsing happens,\n // the column will be skipped.\n if (this._computed_expression_parser.is_initialized) {\n parsed_computed_columns = parsed_computed_columns.concat(this._computed_expression_parser.parse(column));\n }\n } else {\n parsed_computed_columns.push(column);\n }\n }\n\n // Attempt to validate the parsed computed columns against the Table\n let computed_schema = {};\n\n if (this._table) {\n computed_schema = await this._table.computed_schema(parsed_computed_columns);\n const validated = await this._validate_parsed_computed_columns(parsed_computed_columns, computed_schema);\n if (validated.length !== parsed_computed_columns.length) {\n // Generate a diff error message with the invalid columns\n const diff = [];\n for (let i = 0; i < parsed_computed_columns.length; i++) {\n if (i > validated.length - 1) {\n diff.push(parsed_computed_columns[i]);\n } else {\n if (parsed_computed_columns[i].column !== validated[i].column) {\n diff.push(parsed_computed_columns[i]);\n }\n }\n }\n console.warn(\"Could not apply these computed columns:\", JSON.stringify(diff));\n }\n parsed_computed_columns = validated;\n }\n\n // Need to refresh the UI so that previous computed columns used in\n // pivots, columns, etc. get cleared\n const old_columns = this._get_view_parsed_computed_columns();\n const to_remove = this._diff_computed_column_view(old_columns, parsed_computed_columns);\n this._reset_computed_column_view(to_remove);\n\n // Always store a copy of the parsed computed columns for\n // validation of column names, etc.\n this.setAttribute(\"parsed-computed-columns\", JSON.stringify(parsed_computed_columns));\n\n this._update_computed_column_view(computed_schema);\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n await this._debounce_update();\n resolve();\n })();\n }\n\n /* eslint-enable max-len */\n\n /**\n * The set of column aggregate configurations.\n *\n * @kind member\n * @type {Object}\n * @param {Object} aggregates A dictionary whose keys are column names, and\n * values are valid aggregations. The `aggregates` attribute works as an\n * override; in lieu of a key for a column supplied by the developers, a\n * default will be selected and reflected to the attribute based on the\n * column's type. See {@link perspective/src/js/defaults.js}\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('aggregates', JSON.stringify({x: \"distinct count\"}));\n * @example <caption>via HTML</caption>\n * <perspective-viewer aggregates='{\"x\": \"distinct count\"}'>\n * </perspective-viewer>\n */\n @json_attribute\n aggregates(show) {\n if (show === null || show === undefined || Object.keys(show).length === 0) {\n if (this.hasAttribute(\"aggregates\")) {\n this.removeAttribute(\"aggregates\");\n }\n show = {};\n }\n\n let lis = this._get_view_dom_columns();\n lis.map(x => {\n let agg = show[x.getAttribute(\"name\")];\n if (agg) {\n x.setAttribute(\"aggregate\", Array.isArray(agg) ? JSON.stringify(agg) : agg);\n }\n });\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * The set of column filter configurations.\n *\n * @kind member\n * @type {Array<Array>} filters An Array of filter configs. A filter\n * config is an Array of three elements: * The column name. * The filter\n * operation as a String. See\n * {@link perspective/src/js/config/constants.js} * The filter argument, as\n * a String, float or Array<String> as the filter operation demands.\n * @fires PerspectiveViewer#perspective-config-update\n * @example <caption>via Javascript DOM</caption>\n * let filters = [\n * [\"x\", \"<\", 3],\n * [\"y\", \"contains\", \"abc\"]\n * ];\n * let elem = document.getElementById('my_viewer');\n * elem.setAttribute('filters', JSON.stringify(filters));\n * @example <caption>via HTML</caption>\n * <perspective-viewer filters='[[\"x\", \"<\", 3], [\"y\", \"contains\", \"abc\"]]'>\n * </perspective-viewer>\n */\n @array_attribute\n filters(filters) {\n if (filters === null || filters === undefined || filters.length === 0) {\n if (this.hasAttribute(\"filters\")) {\n this.removeAttribute(\"filters\");\n }\n filters = [];\n }\n if (!this._updating_filter) {\n var inner = this._filters.querySelector(\"ul\");\n this._update_column_list(\n filters,\n inner,\n (filter, computed_names) => {\n const fterms = JSON.stringify({\n operator: filter[1],\n operand: filter[2]\n });\n const name = filter[0];\n let computed = undefined;\n if (computed_names.includes(name)) {\n computed = name;\n }\n return this._new_row(name, undefined, undefined, fterms, undefined, computed);\n },\n (filter, node) =>\n node.getAttribute(\"name\") === filter[0] &&\n node.getAttribute(\"filter\") ===\n JSON.stringify({\n operator: filter[1],\n operand: filter[2]\n })\n );\n }\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * Sets the currently selected plugin, via its `name` field, and removes\n * any children the previous plugin may have left behind in the light DOM.\n *\n * @type {String}\n * @fires PerspectiveViewer#perspective-config-update\n */\n set plugin(v) {\n if (v === \"null\" || v === null || v === undefined) {\n this.setAttribute(\"plugin\", this._vis_selector.options[0].value);\n return;\n }\n this.innerHTML = \"\";\n const plugin_names = Object.keys(renderers.getInstance());\n if (this.hasAttribute(\"plugin\")) {\n let plugin = this.getAttribute(\"plugin\");\n if (plugin_names.indexOf(plugin) === -1) {\n const guess_plugin = plugin_names.find(x => x.indexOf(plugin) > -1);\n if (guess_plugin) {\n console.warn(`Unknown plugin \"${plugin}\", using \"${guess_plugin}\"`);\n this.setAttribute(\"plugin\", guess_plugin);\n } else {\n console.error(`Unknown plugin \"${plugin}\"`);\n this.setAttribute(\"plugin\", this._vis_selector.options[0].value);\n }\n } else {\n if (this._vis_selector.value !== plugin) {\n this._vis_selector.value = plugin;\n this._vis_selector_changed();\n }\n this._set_row_styles();\n this._set_column_defaults();\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n }\n } else {\n this.setAttribute(\"plugin\", this._vis_selector.options[0].value);\n }\n }\n\n /**\n * Sets this `perspective.table.view`'s `column_pivots` property.\n *\n * @kind member\n * @type {Array<String>} Array of column names\n * @fires PerspectiveViewer#perspective-config-update\n */\n @array_attribute\n \"column-pivots\"(pivots) {\n if (pivots === null || pivots === undefined || pivots.length === 0) {\n if (this.hasAttribute(\"column-pivots\")) {\n this.removeAttribute(\"column-pivots\");\n }\n pivots = [];\n }\n\n const inner = this._column_pivots.querySelector(\"ul\");\n this._update_column_list(pivots, inner, (pivot, computed_names) => {\n let computed = undefined;\n if (computed_names.includes(pivot)) {\n computed = pivot;\n }\n return this._new_row(pivot, undefined, undefined, undefined, undefined, computed);\n });\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * Sets this `perspective.table.view`'s `row_pivots` property.\n *\n * @kind member\n * @type {Array<String>} Array of column names\n * @fires PerspectiveViewer#perspective-config-update\n */\n @array_attribute\n \"row-pivots\"(pivots) {\n if (pivots === null || pivots === undefined || pivots.length === 0) {\n if (this.hasAttribute(\"row-pivots\")) {\n this.removeAttribute(\"row-pivots\");\n }\n pivots = [];\n }\n\n const inner = this._row_pivots.querySelector(\"ul\");\n this._update_column_list(pivots, inner, (pivot, computed_names) => {\n let computed = undefined;\n if (computed_names.includes(pivot)) {\n computed = pivot;\n }\n return this._new_row(pivot, undefined, undefined, undefined, undefined, computed);\n });\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._debounce_update();\n }\n\n /**\n * Determines whether this viewer is editable or not (though it is\n * ultimately up to the plugin as to whether editing is implemented).\n *\n * @kind member\n * @type {Boolean} Is this viewer editable?\n * @fires PerspectiveViewer#perspective-config-update\n */\n set editable(x) {\n if (x === \"null\") {\n if (this.hasAttribute(\"editable\")) {\n this.removeAttribute(\"editable\");\n }\n } else {\n this.toggleAttribute(\"editable\", true);\n }\n this._debounce_update({force_update: true});\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n }\n\n /**\n * Determines the render throttling behavior. Can be an integer, for\n * millisecond window to throttle render event; or, if `undefined`,\n * will try to determine the optimal throttle time from this component's\n * render framerate.\n *\n * @kind member\n * @type {Number|String} The throttle rate - milliseconds (integer), or the\n * enum \"adaptive\" for a dynamic throttle based on render time.\n * @example\n * <!-- Only draws at most 1 frame/sec. -->\n * <perspective-viewer throttle=\"1000\"></perspective-viewer>\n */\n set throttle(x) {\n if (x === \"null\") {\n if (this.hasAttribute(\"throttle\")) {\n this.removeAttribute(\"throttle\");\n }\n }\n // Returns the throttle time, but also perform validaiton - we only want\n // the latter here.\n this._calculate_throttle_timeout();\n }\n\n /*\n * Determines whether row selections is enabled on this viewer (though it is\n * ultimately up to the plugin as to whether selectable is implemented).\n *\n * @kind member\n * @type {Boolean} Is this viewer editable?\n * @fires PerspectiveViewer#perspective-config-update\n */\n set selectable(x) {\n if (x === \"null\") {\n if (this.hasAttribute(\"selectable\")) {\n this.removeAttribute(\"selectable\");\n }\n } else {\n this.toggleAttribute(\"selectable\", true);\n }\n this._debounce_update({force_update: true});\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n }\n\n /**\n * This element's `perspective` worker instance. This property is not\n * reflected as an HTML attribute, and is readonly; it can be effectively\n * set however by calling the `load() method with a `perspective.table`\n * instance from the preferred worker.\n *\n * @readonly\n * @example\n * let elem = document.getElementById('my_viewer');\n * let table = elem.worker.table([{x:1, y:2}]);\n * elem.load(table);\n */\n get worker() {\n return this._get_worker();\n }\n\n /**\n * This element's `perspective.table` instance.\n *\n * @readonly\n */\n get table() {\n return this._table;\n }\n\n /**\n * This element's `perspective.table.view` instance. The instance itself\n * will change after every `PerspectiveViewer#perspective-config-update`\n * event.\n *\n * @readonly\n */\n get view() {\n return this._view;\n }\n\n /**\n * Load data. If `load` or `update` have already been called on this\n * element, its internal `perspective.table` will also be deleted.\n *\n * @async\n * @param {any} data The data to load. Works with the same input types\n * supported by `perspective.table`.\n * @returns {Promise<void>} A promise which resolves once the data is loaded\n * and a `perspective.view` has been created.\n * @fires module:perspective_viewer~PerspectiveViewer#perspective-click\n * PerspectiveViewer#perspective-view-update\n * ]);\n * @example <caption>Load CSV</caption>\n * const my_viewer = document.getElementById('#my_viewer');\n * my_viewer.load(\"x,y\\n1,a\\n2,b\");\n * @example <caption>Load perspective.table</caption>\n * const my_viewer = document.getElementById('#my_viewer');\n * const tbl = perspective.table(\"x,y\\n1,a\\n2,b\");\n * my_viewer.load(tbl);\n * @example <caption>Load Promise<perspective.table></caption>\n * const my_viewer = document.getElementById('#my_viewer');\n * const tbl = async () => perspective.table(\"x,y\\n1,a\\n2,b\");\n * my_viewer.load(tbl);\n */\n async load(data, options) {\n let table;\n if (data instanceof Promise) {\n table = await data;\n } else {\n try {\n data = data.trim();\n } catch (e) {}\n if (data.type === \"table\") {\n table = data;\n } else {\n table = this.worker.table(data, options);\n table._owner_viewer = this;\n }\n }\n if (this.isConnected) {\n await this._load_table(table);\n } else {\n this._table = table;\n }\n }\n\n /**\n * Updates this element's `perspective.table` with new data.\n *\n * @param {any} data The data to load. Works with the same input types\n * supported by `perspective.table.update`.\n * @fires PerspectiveViewer#perspective-view-update\n * @example\n * const my_viewer = document.getElementById('#my_viewer');\n * my_viewer.update([\n * {x: 1, y: 'a'},\n * {x: 2, y: 'b'}\n * ]);\n */\n update(data) {\n if (this._table === undefined) {\n this.load(data);\n } else {\n this._table.update(data);\n }\n }\n\n /**\n * Determine whether to reflow the viewer and redraw.\n *\n */\n @throttlePromise\n async notifyResize(immediate) {\n const resized = await this._check_responsive_layout();\n if (!resized && !document.hidden && this.offsetParent) {\n await this._plugin.resize.call(this, immediate);\n }\n }\n\n /**\n * Duplicate an existing `<perspective-element>`, including data and view\n * settings. The underlying `perspective.table` will be shared between both\n * elements\n *\n * @param {any} widget A `<perspective-viewer>` instance to clone.\n */\n clone(widget) {\n if (this._inner_drop_target) {\n this._inner_drop_target.innerHTML = widget._inner_drop_target.innerHTML;\n }\n\n this._load_table(widget.table);\n this.restore(widget.save());\n }\n\n /**\n * Deletes this element's data and clears it's internal state (but not its\n * user state). This (or the underlying `perspective.table`'s equivalent\n * method) must be called in order for its memory to be reclaimed.\n *\n * @param {Boolean} delete_table Should a delete call also be made to the\n * underlying `table()`.\n * @returns {Promise<Boolean>} Whether or not this call resulted in the\n * underlying `perspective.table` actually being deleted.\n */\n delete(delete_table = true) {\n let x = this._clear_state(delete_table);\n if (this._plugin.delete) {\n this._plugin.delete.call(this);\n }\n window.removeEventListener(\"load\", this._resize_handler);\n window.removeEventListener(\"resize\", this._resize_handler);\n return x;\n }\n\n /**\n * Restyles the elements and to pick up any style changes\n */\n restyleElement() {\n this._restyle_plugin();\n }\n\n /**\n * Serialize this element's attribute/interaction state.\n *\n * @returns {object} a serialized element.\n */\n save() {\n let obj = {};\n const cols = new Set(PERSISTENT_ATTRIBUTES);\n for (let key = 0; key < this.attributes.length; key++) {\n let attr = this.attributes[key];\n if (cols.has(attr.name)) {\n if (attr.value === \"\") {\n obj[attr.name] = true;\n } else if (attr.name !== \"plugin\" && attr.value !== undefined && attr.value !== null) {\n obj[attr.name] = JSON.parse(attr.value);\n } else {\n obj[attr.name] = attr.value;\n }\n cols.delete(attr.name);\n }\n }\n for (const col of cols) {\n obj[col] = null;\n }\n if (this._plugin.save) {\n obj.plugin_config = this._plugin.save.call(this);\n }\n return obj;\n }\n\n /**\n * Restore this element to a state as generated by a reciprocal call to\n * `save` or `serialize`.\n *\n * @param {Object|String} config returned by `save` or `serialize`.\n * @returns {Promise<void>} A promise which resolves when the changes have\n * been applied.\n */\n async restore(config) {\n if (typeof config === \"string\") {\n config = JSON.parse(config);\n }\n for (const key of PERSISTENT_ATTRIBUTES) {\n if (config.hasOwnProperty(key)) {\n let val = config[key];\n if (val === true) {\n this.toggleAttribute(key, true);\n } else if (val !== undefined && val !== null && val !== false) {\n if (typeof val !== \"string\") {\n val = JSON.stringify(val);\n }\n this.setAttribute(key, val);\n } else {\n this.removeAttribute(key);\n }\n }\n }\n\n if (this._plugin.restore && config.plugin_config) {\n this._plugin.restore.call(this, config.plugin_config);\n }\n await this._debounce_update();\n }\n\n /**\n * Flush any pending attribute modifications to this element.\n *\n * @returns {Promise<void>} A promise which resolves when the current\n * attribute state has been applied.\n */\n async flush() {\n await new Promise(setTimeout);\n while (this.hasAttribute(\"updating\")) {\n await this._updating_promise;\n }\n }\n\n /**\n * Clears the rows in the current {@link table}.\n */\n clear() {\n this._table?.clear();\n }\n\n /**\n * Replaces all rows in the current {@link table}.\n */\n replace(data) {\n this._table ? this._table.replace(data) : this._load(data);\n }\n\n /**\n * Reset's this element's view state and attributes to default. Does not\n * delete this element's `perspective.table` or otherwise modify the data\n * state.\n */\n reset() {\n this.removeAttribute(\"row-pivots\");\n this.removeAttribute(\"column-pivots\");\n this.removeAttribute(\"filters\");\n this.removeAttribute(\"sort\");\n if (this._initial_col_order) {\n this.setAttribute(\"columns\", JSON.stringify(this._initial_col_order));\n } else {\n this.removeAttribute(\"columns\");\n }\n this.setAttribute(\"plugin\", Object.keys(renderers.getInstance())[0]);\n this.dispatchEvent(new Event(\"perspective-config-update\"));\n this._hide_context_menu();\n }\n\n /**\n * Download this element's data as a CSV file.\n *\n * @param {Boolean} [flat=false] Whether to use the element's current view\n * config, or to use a default \"flat\" view.\n * @memberof PerspectiveViewer\n */\n async download(flat = false) {\n const view = flat ? this._table.view() : this._view;\n const csv = await view.to_csv();\n const element = document.createElement(\"a\");\n const binStr = csv;\n const len = binStr.length;\n const arr = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n arr[i] = binStr.charCodeAt(i);\n }\n const blob = new Blob([arr]);\n element.setAttribute(\"href\", URL.createObjectURL(blob));\n element.setAttribute(\"download\", \"perspective.csv\");\n element.style.display = \"none\";\n document.body.appendChild(element);\n element.click();\n document.body.removeChild(element);\n this._hide_context_menu();\n }\n\n /**\n * Copies this element's view data (as a CSV) to the clipboard. This method\n * must be called from an event handler, subject to the browser's\n * restrictions on clipboard access. See\n * {@link https://www.w3.org/TR/clipboard-apis/#allow-read-clipboard}.\n */\n copy(flat = false) {\n let data;\n const view = flat ? this._table.view() : this._view;\n view.to_csv()\n .then(csv => {\n data = csv;\n })\n .catch(err => {\n console.error(err);\n data = \"\";\n });\n let count = 0;\n let f = () => {\n if (typeof data !== \"undefined\") {\n copy_to_clipboard(data);\n } else if (count < 200) {\n count++;\n setTimeout(f, 50);\n } else {\n console.warn(\"Timeout expired - copy to clipboard cancelled.\");\n }\n };\n f();\n this._hide_context_menu();\n }\n\n /**\n * Opens/closes the element's config menu.\n *\n * @async\n */\n async toggleConfig() {\n await this._toggle_config();\n }\n\n /**\n * Returns a promise that resolves to the element's edit port ID, used\n * internally when edits are made using Hypergrid or DataGrid.\n *\n * @async\n */\n async getEditPort() {\n return this._edit_port_lock;\n }\n}\n\n/**\n * `perspective-click` is fired whenever underlying `view`'s grid or chart are\n * clicked providing a detail that includes a `config`, `column_names` and\n * `row`.\n *\n * @event module:perspective_viewer~PerspectiveViewer#perspective-click\n * @type {object}\n * @property {Array} column_names - Includes a list of column names.\n * @property {object} config - Contains a property `filters` that can be applied\n * to a `<perspective-viewer>` through the use of `restore()` updating it to\n * show the filtered subset of data..\n * @property {Array} row - Includes the data row.\n */\n\n/**\n * `perspective-config-update` is fired whenever an configuration attribute has\n * been modified, by the user or otherwise.\n *\n * @event module:perspective_viewer~PerspectiveViewer#perspective-config-update\n * @type {String}\n */\n\n/**\n * `perspective-view-update` is fired whenever underlying `view`'s data has\n * updated, including every invocation of `load` and `update`.\n *\n * @event module:perspective_viewer~PerspectiveViewer#perspective-view-update\n * @type {String}\n */\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","var NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n // eslint-disable-next-line no-undef\n && !Symbol.sham\n // eslint-disable-next-line no-undef\n && typeof Symbol.iterator == 'symbol';\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","var global = require('../internals/global');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap));\n","var has = require('../internals/has');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n","var fails = require('../internals/fails');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var isObject = require('../internals/is-object');\n\nmodule.exports = function (it) {\n if (!isObject(it) && it !== null) {\n throw TypeError(\"Can't set \" + String(it) + ' as a prototype');\n } return it;\n};\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\n/**\n * The default settings which populate `perspective.config.js`.\n */\nmodule.exports.default = {\n /**\n * `types` are the type-specific configuration options. Each key is the\n * name of a perspective type; their values are configuration objects for\n * that type.\n */\n types: {\n float: {\n /**\n * Which filter operator should be the default when a column of this\n * type is pivotted.\n */\n filter_operator: \"==\",\n\n /**\n * Which aggregate should be the default when a column of this type\n * is pivotted.\n */\n aggregate: \"sum\",\n\n /**\n * The format object for this type. Can be either an\n * `toLocaleString()` `options` object for this type (or supertype),\n * or a function which returns the formatted string for this type.\n */\n format: {\n style: \"decimal\",\n minimumFractionDigits: 2,\n maximumFractionDigits: 2\n }\n },\n string: {\n filter_operator: \"==\",\n aggregate: \"count\"\n },\n integer: {\n filter_operator: \"==\",\n aggregate: \"sum\",\n format: {}\n },\n boolean: {\n filter_operator: \"==\",\n aggregate: \"count\"\n },\n datetime: {\n filter_operator: \"==\",\n aggregate: \"count\",\n format: {\n week: \"numeric\",\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n second: \"numeric\"\n },\n null_value: -1\n },\n date: {\n filter_operator: \"==\",\n aggregate: \"count\",\n format: {\n week: \"numeric\",\n year: \"numeric\",\n month: \"numeric\",\n day: \"numeric\"\n },\n null_value: -1\n }\n }\n};\n","module.exports.default = function() {}","module.exports = require(\"/Users/v625154/work/perspective/node_modules/source-map-loader/index.js!/Users/v625154/work/perspective/packages/perspective/dist/esm/perspective.parallel.js\");","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar regexpExec = require('../internals/regexp-exec');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\nvar REPLACE = wellKnownSymbol('replace');\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\nmodule.exports = function (KEY, length, exec, sham) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !(\n REPLACE_SUPPORTS_NAMED_GROUPS &&\n REPLACE_KEEPS_$0 &&\n !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n )) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }, {\n REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,\n REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE\n });\n var stringMethod = methods[0];\n var regexMethod = methods[1];\n\n redefine(String.prototype, KEY, stringMethod);\n redefine(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return regexMethod.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return regexMethod.call(string, this); }\n );\n }\n\n if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar fails = require('./fails');\n\n// babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,\n// so we use an intermediate function.\nfunction RE(s, f) {\n return RegExp(s, f);\n}\n\nexports.UNSUPPORTED_Y = fails(function () {\n // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\n var re = RE('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = RE('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var classof = require('./classof-raw');\nvar regexpExec = require('./regexp-exec');\n\n// `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n\n if (classof(R) !== 'RegExp') {\n throw TypeError('RegExp#exec called on incompatible receiver');\n }\n\n return regexpExec.call(R, S);\n};\n\n","/**\n * detect IE\n * returns version of IE or false, if browser is not Internet Explorer\n */\nvar detectie = function() {\n var ua = window.navigator.userAgent;\n\n var msie = ua.indexOf('MSIE ');\n if (msie > 0) {\n // IE 10 or older => return version number\n return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10);\n }\n\n var trident = ua.indexOf('Trident/');\n if (trident > 0) {\n // IE 11 => return version number\n var rv = ua.indexOf('rv:');\n return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);\n }\n\n var edge = ua.indexOf('Edge/');\n if (edge > 0) {\n // IE 12 => return version number\n return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10);\n }\n // other browser\n return false;\n}\n\nmodule.exports = detectie;","import {Client} from \"./api/client.js\";\nimport {Server} from \"./api/server.js\";\n\nconst HEARTBEAT_TIMEOUT = 15000;\nlet CLIENT_ID_GEN = 0;\n\nexport class WebSocketClient extends Client {\n constructor(ws) {\n super();\n this._ws = ws;\n this._ws.binaryType = \"arraybuffer\";\n this._ws.onopen = () => {\n this.send({id: -1, cmd: \"init\"});\n };\n const heartbeat = () => {\n this._ws.send(\"heartbeat\");\n setTimeout(heartbeat, HEARTBEAT_TIMEOUT);\n };\n setTimeout(heartbeat, 15000);\n this._ws.onmessage = msg => {\n if (msg.data === \"heartbeat\") {\n return;\n }\n if (this._pending_arrow) {\n let result = {\n data: {\n id: this._pending_arrow,\n data: msg.data\n }\n };\n\n // make sure on_update callbacks are called with a `port_id`\n // AND the transferred arrow.\n if (this._pending_port_id !== undefined) {\n const new_data_with_port_id = {\n port_id: this._pending_port_id,\n delta: msg.data\n };\n result.data.data = new_data_with_port_id;\n }\n this._handle(result);\n delete this._pending_port_id;\n delete this._pending_arrow;\n } else {\n msg = JSON.parse(msg.data);\n\n // If the `is_transferable` flag is set, the worker expects the\n // next message to be a transferable object. This sets the\n // `_pending_arrow` flag, which triggers a special handler for\n // the ArrayBuffer containing arrow data.\n if (msg.is_transferable) {\n this._pending_arrow = msg.id;\n\n // Check whether the message also contains a `port_id`,\n // indicating that we are in an `on_update` callback and\n // the pending arrow needs to be joined with the port_id\n // for on_update handlers to work properly.\n if (msg.data && msg.data.port_id !== undefined) {\n this._pending_port_id = msg.data.port_id;\n }\n } else {\n this._handle({data: msg});\n }\n }\n };\n }\n\n /**\n * Send a message to the remote, checking whether the arguments contain an\n * ArrayBuffer.\n *\n * @param {Object} msg a message to send to the remote. If the `args`\n * param contains an ArrayBuffer, two messages will be sent - a pre-message\n * with the `is_transferable` flag set to true, and a second message\n * containing the ArrayBuffer. This allows for transport of metadata\n * alongside an ArrayBuffer, and the pattern should be implemented by the\n * receiver.\n */\n send(msg) {\n if (msg.args && msg.args.length > 0 && msg.args[0] instanceof ArrayBuffer && msg.args[0].byteLength !== undefined) {\n const pre_msg = msg;\n msg.is_transferable = true;\n this._ws.send(JSON.stringify(pre_msg));\n this._ws.send(msg.args[0]);\n return;\n }\n this._ws.send(JSON.stringify(msg));\n }\n\n terminate() {\n return new Promise(resolve => {\n this._ws.onclose = resolve;\n this._ws.close();\n });\n }\n}\n\n/**\n * A WebSocket Manager instance for a remote perspective\n */\nexport class WebSocketManager extends Server {\n constructor(...args) {\n super(...args);\n this.requests_id_map = new Map();\n this.requests = {};\n this.websockets = {};\n\n // clear invalid connections\n setInterval(() => {\n Object.entries(this.websockets).forEach(([id, ws]) => {\n if (ws.isAlive === false) {\n delete this.websockets[id];\n return ws.terminate();\n }\n ws.isAlive = false;\n });\n }, 30000);\n }\n\n /**\n * Add a new websocket connection to the manager, and define a handler\n * for all incoming messages. If the incoming message has `is_transferable`\n * set, handle incoming `ArrayBuffers` correctly.\n *\n * The WebsocketManager manages the websocket connection and processes every\n * message received from each connections. When a websocket connection is\n * `closed`, the websocket manager will clear all subscriptions associated\n * with the connection.\n *\n * @param {WebSocket} ws a websocket connection\n */\n add_connection(ws) {\n ws.isAlive = true;\n ws.binaryType = \"arraybuffer\";\n ws.id = CLIENT_ID_GEN++;\n\n // Parse incoming messages\n ws.on(\"message\", msg => {\n ws.isAlive = true;\n\n if (msg === \"heartbeat\") {\n ws.send(\"heartbeat\");\n return;\n }\n\n if (this._is_transferable) {\n // Combine ArrayBuffer and previous message so that metadata can\n // be reconstituted.\n const buffer = msg;\n let new_args = [buffer];\n msg = this._is_transferable_pre_message;\n\n if (msg.args && msg.args.length > 1) {\n new_args = new_args.concat(msg.args.slice(1));\n }\n\n msg.args = new_args;\n delete msg.is_transferable;\n\n this._is_transferable = false;\n this._is_transferable_pre_message = undefined;\n } else {\n msg = JSON.parse(msg);\n\n if (msg.is_transferable) {\n this._is_transferable = true;\n this._is_transferable_pre_message = msg;\n return;\n }\n }\n\n try {\n // Send all messages to the handler defined in\n // Perspective.Server\n const compoundId = `${msg.id}/${ws.id}`;\n this.requests_id_map.set(compoundId, msg.id);\n msg.id = compoundId;\n this.requests[msg.id] = {ws, msg};\n this.process(msg, ws.id);\n } catch (e) {\n console.error(e);\n }\n });\n ws.on(\"close\", () => {\n this.clear_views(ws.id);\n });\n ws.on(\"error\", console.error);\n }\n\n /**\n * Send an asynchronous message to the Perspective web worker.\n *\n * If the `transferable` param is set, pass two messages: the string\n * representation of the message and then the ArrayBuffer data that needs to\n * be transferred. The `is_transferable` flag tells the client to expect the\n * next message to be a transferable object.\n *\n * @param {Object} msg a valid JSON-serializable message to pass to the\n * client\n * @param {*} transferable a transferable object to be sent to the client\n */\n post(msg, transferable) {\n const req = this.requests[msg.id];\n const id = msg.id;\n if (req.ws.readyState > 1) {\n delete this.requests[id];\n throw new Error(\"Connection closed\");\n }\n msg.id = this.requests_id_map.get(id);\n if (transferable) {\n msg.is_transferable = true;\n req.ws.send(JSON.stringify(msg));\n req.ws.send(transferable[0]);\n } else {\n req.ws.send(JSON.stringify(msg));\n }\n if (!req.msg.subscribe) {\n this.requests_id_map.delete(id);\n delete this.requests[id];\n }\n }\n\n _host(cache, name, input) {\n if (cache[name] !== undefined) {\n throw new Error(`\"${name}\" already exists`);\n }\n input.on_delete(() => {\n delete cache[name];\n });\n cache[name] = input;\n }\n\n /**\n * Expose a Perspective `table` through the WebSocket, allowing\n * it to be accessed by a unique name from a client. Hosted objects\n * are automatically `eject`ed when their `delete()` method is called.\n *\n * @param {String} name\n * @param {perspective.table} table `table` to host.\n */\n host_table(name, table) {\n this._host(this._tables, name, table);\n }\n\n /**\n * Expose a Perspective `view` through the WebSocket, allowing\n * it to be accessed by a unique name from a client. Hosted objects\n * are automatically `eject`ed when their `delete()` method is called.\n *\n * @param {String} name\n * @param {perspective.view} view `view` to host.\n */\n host_view(name, view) {\n this._host(this._views, name, view);\n }\n\n /**\n * Cease hosting a `table` on this server. Hosted objects\n * are automatically `eject`ed when their `delete()` method is called.\n *\n * @param {String} name\n */\n eject_table(name) {\n delete this._tables[name];\n }\n\n /**\n * Cease hosting a `view` on this server. Hosted objects\n * are automatically `eject`ed when their `delete()` method is called.\n *\n * @param {String} name\n */\n eject_view(name) {\n delete this._views[name];\n }\n}\n","var isObject = require('./isObject'),\n now = require('./now'),\n toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n nativeMin = Math.min;\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\nfunction debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n}\n\nmodule.exports = debounce;\n","var root = require('./_root');\n\n/**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\nvar now = function() {\n return root.Date.now();\n};\n\nmodule.exports = now;\n","var isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to match leading and trailing whitespace. */\nvar reTrim = /^\\s+|\\s+$/g;\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 = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","/**\n * Simple, lightweight, usable local autocomplete library for modern browsers\n * Because there weren’t enough autocomplete scripts in the world? Because I’m completely insane and have NIH syndrome? Probably both. :P\n * @author Lea Verou http://leaverou.github.io/awesomplete\n * MIT license\n */\n\n(function () {\n\nvar _ = function (input, o) {\n\tvar me = this;\n\n // Keep track of number of instances for unique IDs\n _.count = (_.count || 0) + 1;\n this.count = _.count;\n\n\t// Setup\n\n\tthis.isOpened = false;\n\n\tthis.input = $(input);\n\tthis.input.setAttribute(\"autocomplete\", \"off\");\n\tthis.input.setAttribute(\"aria-expanded\", \"false\");\n\tthis.input.setAttribute(\"aria-owns\", \"awesomplete_list_\" + this.count);\n\tthis.input.setAttribute(\"role\", \"combobox\");\n\n\t// store constructor options in case we need to distinguish\n\t// between default and customized behavior later on\n\tthis.options = o = o || {};\n\n\tconfigure(this, {\n\t\tminChars: 2,\n\t\tmaxItems: 10,\n\t\tautoFirst: false,\n\t\tdata: _.DATA,\n\t\tfilter: _.FILTER_CONTAINS,\n\t\tsort: o.sort === false ? false : _.SORT_BYLENGTH,\n\t\tcontainer: _.CONTAINER,\n\t\titem: _.ITEM,\n\t\treplace: _.REPLACE,\n\t\ttabSelect: false\n\t}, o);\n\n\tthis.index = -1;\n\n\t// Create necessary elements\n\n\tthis.container = this.container(input);\n\n\tthis.ul = $.create(\"ul\", {\n\t\thidden: \"hidden\",\n role: \"listbox\",\n id: \"awesomplete_list_\" + this.count,\n\t\tinside: this.container\n\t});\n\n\tthis.status = $.create(\"span\", {\n\t\tclassName: \"visually-hidden\",\n\t\trole: \"status\",\n\t\t\"aria-live\": \"assertive\",\n \"aria-atomic\": true,\n inside: this.container,\n textContent: this.minChars != 0 ? (\"Type \" + this.minChars + \" or more characters for results.\") : \"Begin typing for results.\"\n\t});\n\n\t// Bind events\n\n\tthis._events = {\n\t\tinput: {\n\t\t\t\"input\": this.evaluate.bind(this),\n\t\t\t\"blur\": this.close.bind(this, { reason: \"blur\" }),\n\t\t\t\"keydown\": function(evt) {\n\t\t\t\tvar c = evt.keyCode;\n\n\t\t\t\t// If the dropdown `ul` is in view, then act on keydown for the following keys:\n\t\t\t\t// Enter / Esc / Up / Down\n\t\t\t\tif(me.opened) {\n\t\t\t\t\tif (c === 13 && me.selected) { // Enter\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme.select(undefined, undefined, evt);\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 9 && me.selected && me.tabSelect) {\n\t\t\t\t\t\tme.select(undefined, undefined, evt);\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 27) { // Esc\n\t\t\t\t\t\tme.close({ reason: \"esc\" });\n\t\t\t\t\t}\n\t\t\t\t\telse if (c === 38 || c === 40) { // Down/Up arrow\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme[c === 38? \"previous\" : \"next\"]();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tform: {\n\t\t\t\"submit\": this.close.bind(this, { reason: \"submit\" })\n\t\t},\n\t\tul: {\n\t\t\t// Prevent the default mousedowm, which ensures the input is not blurred.\n\t\t\t// The actual selection will happen on click. This also ensures dragging the\n\t\t\t// cursor away from the list item will cancel the selection\n\t\t\t\"mousedown\": function(evt) {\n\t\t\t\tevt.preventDefault();\n\t\t\t},\n\t\t\t// The click event is fired even if the corresponding mousedown event has called preventDefault\n\t\t\t\"click\": function(evt) {\n\t\t\t\tvar li = evt.target;\n\n\t\t\t\tif (li !== this) {\n\n\t\t\t\t\twhile (li && !/li/i.test(li.nodeName)) {\n\t\t\t\t\t\tli = li.parentNode;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (li && evt.button === 0) { // Only select on left click\n\t\t\t\t\t\tevt.preventDefault();\n\t\t\t\t\t\tme.select(li, evt.target, evt);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.bind(this.input, this._events.input);\n\t$.bind(this.input.form, this._events.form);\n\t$.bind(this.ul, this._events.ul);\n\n\tif (this.input.hasAttribute(\"list\")) {\n\t\tthis.list = \"#\" + this.input.getAttribute(\"list\");\n\t\tthis.input.removeAttribute(\"list\");\n\t}\n\telse {\n\t\tthis.list = this.input.getAttribute(\"data-list\") || o.list || [];\n\t}\n\n\t_.all.push(this);\n};\n\n_.prototype = {\n\tset list(list) {\n\t\tif (Array.isArray(list)) {\n\t\t\tthis._list = list;\n\t\t}\n\t\telse if (typeof list === \"string\" && list.indexOf(\",\") > -1) {\n\t\t\t\tthis._list = list.split(/\\s*,\\s*/);\n\t\t}\n\t\telse { // Element or CSS selector\n\t\t\tlist = $(list);\n\n\t\t\tif (list && list.children) {\n\t\t\t\tvar items = [];\n\t\t\t\tslice.apply(list.children).forEach(function (el) {\n\t\t\t\t\tif (!el.disabled) {\n\t\t\t\t\t\tvar text = el.textContent.trim();\n\t\t\t\t\t\tvar value = el.value || text;\n\t\t\t\t\t\tvar label = el.label || text;\n\t\t\t\t\t\tif (value !== \"\") {\n\t\t\t\t\t\t\titems.push({ label: label, value: value });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tthis._list = items;\n\t\t\t}\n\t\t}\n\n\t\tif (document.activeElement === this.input) {\n\t\t\tthis.evaluate();\n\t\t}\n\t},\n\n\tget selected() {\n\t\treturn this.index > -1;\n\t},\n\n\tget opened() {\n\t\treturn this.isOpened;\n\t},\n\n\tclose: function (o) {\n\t\tif (!this.opened) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.input.setAttribute(\"aria-expanded\", \"false\");\n\t\tthis.ul.setAttribute(\"hidden\", \"\");\n\t\tthis.isOpened = false;\n\t\tthis.index = -1;\n\n\t\tthis.status.setAttribute(\"hidden\", \"\");\n\n\t\t$.fire(this.input, \"awesomplete-close\", o || {});\n\t},\n\n\topen: function () {\n\t\tthis.input.setAttribute(\"aria-expanded\", \"true\");\n\t\tthis.ul.removeAttribute(\"hidden\");\n\t\tthis.isOpened = true;\n\n\t\tthis.status.removeAttribute(\"hidden\");\n\n\t\tif (this.autoFirst && this.index === -1) {\n\t\t\tthis.goto(0);\n\t\t}\n\n\t\t$.fire(this.input, \"awesomplete-open\");\n\t},\n\n\tdestroy: function() {\n\t\t//remove events from the input and its form\n\t\t$.unbind(this.input, this._events.input);\n\t\t$.unbind(this.input.form, this._events.form);\n\n\t\t// cleanup container if it was created by Awesomplete but leave it alone otherwise\n\t\tif (!this.options.container) {\n\t\t\t//move the input out of the awesomplete container and remove the container and its children\n\t\t\tvar parentNode = this.container.parentNode;\n\n\t\t\tparentNode.insertBefore(this.input, this.container);\n\t\t\tparentNode.removeChild(this.container);\n\t\t}\n\n\t\t//remove autocomplete and aria-autocomplete attributes\n\t\tthis.input.removeAttribute(\"autocomplete\");\n\t\tthis.input.removeAttribute(\"aria-autocomplete\");\n\n\t\t//remove this awesomeplete instance from the global array of instances\n\t\tvar indexOfAwesomplete = _.all.indexOf(this);\n\n\t\tif (indexOfAwesomplete !== -1) {\n\t\t\t_.all.splice(indexOfAwesomplete, 1);\n\t\t}\n\t},\n\n\tnext: function () {\n\t\tvar count = this.ul.children.length;\n\t\tthis.goto(this.index < count - 1 ? this.index + 1 : (count ? 0 : -1) );\n\t},\n\n\tprevious: function () {\n\t\tvar count = this.ul.children.length;\n\t\tvar pos = this.index - 1;\n\n\t\tthis.goto(this.selected && pos !== -1 ? pos : count - 1);\n\t},\n\n\t// Should not be used, highlights specific item without any checks!\n\tgoto: function (i) {\n\t\tvar lis = this.ul.children;\n\n\t\tif (this.selected) {\n\t\t\tlis[this.index].setAttribute(\"aria-selected\", \"false\");\n\t\t}\n\n\t\tthis.index = i;\n\n\t\tif (i > -1 && lis.length > 0) {\n\t\t\tlis[i].setAttribute(\"aria-selected\", \"true\");\n\n\t\t\tthis.status.textContent = lis[i].textContent + \", list item \" + (i + 1) + \" of \" + lis.length;\n\n this.input.setAttribute(\"aria-activedescendant\", this.ul.id + \"_item_\" + this.index);\n\n\t\t\t// scroll to highlighted element in case parent's height is fixed\n\t\t\tthis.ul.scrollTop = lis[i].offsetTop - this.ul.clientHeight + lis[i].clientHeight;\n\n\t\t\t$.fire(this.input, \"awesomplete-highlight\", {\n\t\t\t\ttext: this.suggestions[this.index]\n\t\t\t});\n\t\t}\n\t},\n\n\tselect: function (selected, origin, originalEvent) {\n\t\tif (selected) {\n\t\t\tthis.index = $.siblingIndex(selected);\n\t\t} else {\n\t\t\tselected = this.ul.children[this.index];\n\t\t}\n\n\t\tif (selected) {\n\t\t\tvar suggestion = this.suggestions[this.index];\n\n\t\t\tvar allowed = $.fire(this.input, \"awesomplete-select\", {\n\t\t\t\ttext: suggestion,\n\t\t\t\torigin: origin || selected,\n\t\t\t\toriginalEvent: originalEvent\n\t\t\t});\n\n\t\t\tif (allowed) {\n\t\t\t\tthis.replace(suggestion);\n\t\t\t\tthis.close({ reason: \"select\" });\n\t\t\t\t$.fire(this.input, \"awesomplete-selectcomplete\", {\n\t\t\t\t\ttext: suggestion,\n\t\t\t\t\toriginalEvent: originalEvent\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t},\n\n\tevaluate: function() {\n\t\tvar me = this;\n\t\tvar value = this.input.value;\n\n\t\tif (value.length >= this.minChars && this._list && this._list.length > 0) {\n\t\t\tthis.index = -1;\n\t\t\t// Populate list with options that match\n\t\t\tthis.ul.innerHTML = \"\";\n\n\t\t\tthis.suggestions = this._list\n\t\t\t\t.map(function(item) {\n\t\t\t\t\treturn new Suggestion(me.data(item, value));\n\t\t\t\t})\n\t\t\t\t.filter(function(item) {\n\t\t\t\t\treturn me.filter(item, value);\n\t\t\t\t});\n\n\t\t\tif (this.sort !== false) {\n\t\t\t\tthis.suggestions = this.suggestions.sort(this.sort);\n\t\t\t}\n\n\t\t\tthis.suggestions = this.suggestions.slice(0, this.maxItems);\n\n\t\t\tthis.suggestions.forEach(function(text, index) {\n\t\t\t\t\tme.ul.appendChild(me.item(text, value, index));\n\t\t\t\t});\n\n\t\t\tif (this.ul.children.length === 0) {\n\n this.status.textContent = \"No results found\";\n\n\t\t\t\tthis.close({ reason: \"nomatches\" });\n\n\t\t\t} else {\n\t\t\t\tthis.open();\n\n this.status.textContent = this.ul.children.length + \" results found\";\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.close({ reason: \"nomatches\" });\n\n this.status.textContent = \"No results found\";\n\t\t}\n\t}\n};\n\n// Static methods/properties\n\n_.all = [];\n\n_.FILTER_CONTAINS = function (text, input) {\n\treturn RegExp($.regExpEscape(input.trim()), \"i\").test(text);\n};\n\n_.FILTER_STARTSWITH = function (text, input) {\n\treturn RegExp(\"^\" + $.regExpEscape(input.trim()), \"i\").test(text);\n};\n\n_.SORT_BYLENGTH = function (a, b) {\n\tif (a.length !== b.length) {\n\t\treturn a.length - b.length;\n\t}\n\n\treturn a < b? -1 : 1;\n};\n\n_.CONTAINER = function (input) {\n\treturn $.create(\"div\", {\n\t\tclassName: \"awesomplete\",\n\t\taround: input\n\t});\n}\n\n_.ITEM = function (text, input, item_id) {\n\tvar html = input.trim() === \"\" ? text : text.replace(RegExp($.regExpEscape(input.trim()), \"gi\"), \"<mark>$&</mark>\");\n\treturn $.create(\"li\", {\n\t\tinnerHTML: html,\n\t\t\"role\": \"option\",\n\t\t\"aria-selected\": \"false\",\n\t\t\"id\": \"awesomplete_list_\" + this.count + \"_item_\" + item_id\n\t});\n};\n\n_.REPLACE = function (text) {\n\tthis.input.value = text.value;\n};\n\n_.DATA = function (item/*, input*/) { return item; };\n\n// Private functions\n\nfunction Suggestion(data) {\n\tvar o = Array.isArray(data)\n\t ? { label: data[0], value: data[1] }\n\t : typeof data === \"object\" && \"label\" in data && \"value\" in data ? data : { label: data, value: data };\n\n\tthis.label = o.label || o.value;\n\tthis.value = o.value;\n}\nObject.defineProperty(Suggestion.prototype = Object.create(String.prototype), \"length\", {\n\tget: function() { return this.label.length; }\n});\nSuggestion.prototype.toString = Suggestion.prototype.valueOf = function () {\n\treturn \"\" + this.label;\n};\n\nfunction configure(instance, properties, o) {\n\tfor (var i in properties) {\n\t\tvar initial = properties[i],\n\t\t attrValue = instance.input.getAttribute(\"data-\" + i.toLowerCase());\n\n\t\tif (typeof initial === \"number\") {\n\t\t\tinstance[i] = parseInt(attrValue);\n\t\t}\n\t\telse if (initial === false) { // Boolean options must be false by default anyway\n\t\t\tinstance[i] = attrValue !== null;\n\t\t}\n\t\telse if (initial instanceof Function) {\n\t\t\tinstance[i] = null;\n\t\t}\n\t\telse {\n\t\t\tinstance[i] = attrValue;\n\t\t}\n\n\t\tif (!instance[i] && instance[i] !== 0) {\n\t\t\tinstance[i] = (i in o)? o[i] : initial;\n\t\t}\n\t}\n}\n\n// Helpers\n\nvar slice = Array.prototype.slice;\n\nfunction $(expr, con) {\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\n}\n\nfunction $$(expr, con) {\n\treturn slice.call((con || document).querySelectorAll(expr));\n}\n\n$.create = function(tag, o) {\n\tvar element = document.createElement(tag);\n\n\tfor (var i in o) {\n\t\tvar val = o[i];\n\n\t\tif (i === \"inside\") {\n\t\t\t$(val).appendChild(element);\n\t\t}\n\t\telse if (i === \"around\") {\n\t\t\tvar ref = $(val);\n\t\t\tref.parentNode.insertBefore(element, ref);\n\t\t\telement.appendChild(ref);\n\n\t\t\tif (ref.getAttribute(\"autofocus\") != null) {\n\t\t\t\tref.focus();\n\t\t\t}\n\t\t}\n\t\telse if (i in element) {\n\t\t\telement[i] = val;\n\t\t}\n\t\telse {\n\t\t\telement.setAttribute(i, val);\n\t\t}\n\t}\n\n\treturn element;\n};\n\n$.bind = function(element, o) {\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\n\t\t\t\telement.addEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n};\n\n$.unbind = function(element, o) {\n\tif (element) {\n\t\tfor (var event in o) {\n\t\t\tvar callback = o[event];\n\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\n\t\t\t\telement.removeEventListener(event, callback);\n\t\t\t});\n\t\t}\n\t}\n};\n\n$.fire = function(target, type, properties) {\n\tvar evt = document.createEvent(\"HTMLEvents\");\n\n\tevt.initEvent(type, true, true );\n\n\tfor (var j in properties) {\n\t\tevt[j] = properties[j];\n\t}\n\n\treturn target.dispatchEvent(evt);\n};\n\n$.regExpEscape = function (s) {\n\treturn s.replace(/[-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\n};\n\n$.siblingIndex = function (el) {\n\t/* eslint-disable no-cond-assign */\n\tfor (var i = 0; el = el.previousElementSibling; i++);\n\treturn i;\n};\n\n// Initialization\n\nfunction init() {\n\t$$(\"input.awesomplete\").forEach(function (input) {\n\t\tnew _(input);\n\t});\n}\n\n// Make sure to export Awesomplete on self when in a browser\nif (typeof self !== \"undefined\") {\n\tself.Awesomplete = _;\n}\n\n// Are we in a browser? Check for Document constructor\nif (typeof Document !== \"undefined\") {\n\t// DOM already loaded?\n\tif (document.readyState !== \"loading\") {\n\t\tinit();\n\t}\n\telse {\n\t\t// Wait for it\n\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t}\n}\n\n_.$ = $;\n_.$$ = $$;\n\n// Expose Awesomplete as a CJS module\nif (typeof module === \"object\" && module.exports) {\n\tmodule.exports = _;\n}\n\nreturn _;\n\n}());\n","var baseIsEqual = require('./_baseIsEqual');\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.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 * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\nmodule.exports = isEqual;\n","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n","var Stack = require('./_Stack'),\n equalArrays = require('./_equalArrays'),\n equalByTag = require('./_equalByTag'),\n equalObjects = require('./_equalObjects'),\n getTag = require('./_getTag'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isTypedArray = require('./isTypedArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\nmodule.exports = baseIsEqualDeep;\n","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nmodule.exports = listCacheClear;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nmodule.exports = listCacheDelete;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nmodule.exports = listCacheGet;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nmodule.exports = listCacheHas;\n","var assocIndexOf = require('./_assocIndexOf');\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nmodule.exports = listCacheSet;\n","var ListCache = require('./_ListCache');\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nmodule.exports = stackClear;\n","/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nmodule.exports = stackDelete;\n","/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nmodule.exports = stackGet;\n","/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nmodule.exports = stackHas;\n","var ListCache = require('./_ListCache'),\n Map = require('./_Map'),\n MapCache = require('./_MapCache');\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\nmodule.exports = stackSet;\n","var isFunction = require('./isFunction'),\n isMasked = require('./_isMasked'),\n isObject = require('./isObject'),\n toSource = require('./_toSource');\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nmodule.exports = baseIsNative;\n","var coreJsData = require('./_coreJsData');\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nmodule.exports = isMasked;\n","var root = require('./_root');\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nmodule.exports = coreJsData;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nmodule.exports = getValue;\n","var Hash = require('./_Hash'),\n ListCache = require('./_ListCache'),\n Map = require('./_Map');\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nmodule.exports = mapCacheClear;\n","var hashClear = require('./_hashClear'),\n hashDelete = require('./_hashDelete'),\n hashGet = require('./_hashGet'),\n hashHas = require('./_hashHas'),\n hashSet = require('./_hashSet');\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nmodule.exports = Hash;\n","var nativeCreate = require('./_nativeCreate');\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nmodule.exports = hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = hashDelete;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nmodule.exports = hashGet;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nmodule.exports = hashHas;\n","var nativeCreate = require('./_nativeCreate');\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nmodule.exports = hashSet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nmodule.exports = mapCacheDelete;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nmodule.exports = isKeyable;\n","var getMapData = require('./_getMapData');\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nmodule.exports = mapCacheGet;\n","var getMapData = require('./_getMapData');\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nmodule.exports = mapCacheHas;\n","var getMapData = require('./_getMapData');\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nmodule.exports = mapCacheSet;\n","var MapCache = require('./_MapCache'),\n setCacheAdd = require('./_setCacheAdd'),\n setCacheHas = require('./_setCacheHas');\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nmodule.exports = SetCache;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nmodule.exports = setCacheAdd;\n","/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nmodule.exports = setCacheHas;\n","/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\nmodule.exports = arraySome;\n","/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nmodule.exports = cacheHas;\n","var Symbol = require('./_Symbol'),\n Uint8Array = require('./_Uint8Array'),\n eq = require('./eq'),\n equalArrays = require('./_equalArrays'),\n mapToArray = require('./_mapToArray'),\n setToArray = require('./_setToArray');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\nmodule.exports = equalByTag;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nmodule.exports = Uint8Array;\n","/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\nmodule.exports = mapToArray;\n","/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\nmodule.exports = setToArray;\n","var getAllKeys = require('./_getAllKeys');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalObjects;\n","var baseGetAllKeys = require('./_baseGetAllKeys'),\n getSymbols = require('./_getSymbols'),\n keys = require('./keys');\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nmodule.exports = getAllKeys;\n","var arrayPush = require('./_arrayPush'),\n isArray = require('./isArray');\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nmodule.exports = baseGetAllKeys;\n","/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\nmodule.exports = arrayPush;\n","var arrayFilter = require('./_arrayFilter'),\n stubArray = require('./stubArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\nmodule.exports = getSymbols;\n","/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\nmodule.exports = arrayFilter;\n","/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\nmodule.exports = stubArray;\n","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n","var baseTimes = require('./_baseTimes'),\n isArguments = require('./isArguments'),\n isArray = require('./isArray'),\n isBuffer = require('./isBuffer'),\n isIndex = require('./_isIndex'),\n isTypedArray = require('./isTypedArray');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = arrayLikeKeys;\n","/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\nmodule.exports = baseTimes;\n","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nmodule.exports = baseIsArguments;\n","/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = stubFalse;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n","var baseGetTag = require('./_baseGetTag'),\n isLength = require('./isLength'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\nmodule.exports = baseIsTypedArray;\n","/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\nmodule.exports = baseUnary;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\nmodule.exports = nodeUtil;\n","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n","var overArg = require('./_overArg');\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeKeys = overArg(Object.keys, Object);\n\nmodule.exports = nativeKeys;\n","/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\nmodule.exports = overArg;\n","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView');\n\nmodule.exports = DataView;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Promise = getNative(root, 'Promise');\n\nmodule.exports = Promise;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Set = getNative(root, 'Set');\n\nmodule.exports = Set;\n","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar WeakMap = getNative(root, 'WeakMap');\n\nmodule.exports = WeakMap;\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.github.io/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toPrimitive = require('../internals/to-primitive');\nvar has = require('../internals/has');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = new (aTypedArrayConstructor(C))(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n nativeDefineProperty(it, key, { get: function () {\n return getInternalState(this)[key];\n } });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n return isTypedArrayIndex(target, key = toPrimitive(key, true))\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n if (isTypedArrayIndex(target, key = toPrimitive(key, true))\n && isObject(descriptor)\n && has(descriptor, 'value')\n && !has(descriptor, 'get')\n && !has(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!has(descriptor, 'writable') || descriptor.writable)\n && (!has(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return typedArrayFrom.call(TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return typedArrayFrom.call(TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({\n global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n","/* eslint-disable no-new */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","'use strict';\nvar global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefineAll = require('../internals/redefine-all');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toInteger = require('../internals/to-integer');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar arrayFill = require('../internals/array-fill');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar $DataView = global[DATA_VIEW];\nvar $DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar RangeError = global.RangeError;\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = bytes.slice(start, start + count);\n return isLittleEndian ? pack : pack.reverse();\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = conversion(+value);\n for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n setInternalState(this, {\n bytes: arrayFill.call(new Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) this.byteLength = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = getInternalState(buffer).byteLength;\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength');\n addGetter($DataView, 'buffer');\n addGetter($DataView, 'byteLength');\n addGetter($DataView, 'byteOffset');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n }\n });\n} else {\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new NativeArrayBuffer(); // eslint-disable-line no-new\n new NativeArrayBuffer(1.5); // eslint-disable-line no-new\n new NativeArrayBuffer(NaN); // eslint-disable-line no-new\n return NativeArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new NativeArrayBuffer(toIndex(length));\n };\n var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE] = NativeArrayBuffer[PROTOTYPE];\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf($DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf($DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var nativeSetInt8 = $DataViewPrototype.setInt8;\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll($DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n nativeSetInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n","// IEEE754 conversions based on https://github.com/feross/ieee754\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = 1 / 0;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = new Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n if (number * (c = pow(2, -exponent)) < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toLength = require('../internals/to-length');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.github.io/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","var toPositiveInteger = require('../internals/to-positive-integer');\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n","var toInteger = require('../internals/to-integer');\n\nmodule.exports = function (it) {\n var result = toInteger(it);\n if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","var toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar bind = require('../internals/function-bind-context');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, step, iterator, next;\n if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n O = [];\n while (!(step = next.call(iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2], 2);\n }\n length = toLength(O.length);\n result = new (aTypedArrayConstructor(this))(length);\n for (i = 0; length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n};\n","module.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n","var bind = require('../internals/function-bind-context');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar toLength = require('../internals/to-length');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = [].push;\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push.call(target, value); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6)\n};\n","var isObject = require('../internals/is-object');\nvar isArray = require('../internals/is-array');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.github.io/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return new (C === undefined ? Array : C)(length === 0 ? 0 : length);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.github.io/ecma262/#sec-isarray\nmodule.exports = Array.isArray || function isArray(arg) {\n return classof(arg) == 'Array';\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n typeof (NewTarget = dummy.constructor) == 'function' &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.string.iterator');\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar global = require('../internals/global');\nvar defineProperties = require('../internals/object-define-properties');\nvar redefine = require('../internals/redefine');\nvar anInstance = require('../internals/an-instance');\nvar has = require('../internals/has');\nvar assign = require('../internals/object-assign');\nvar arrayFrom = require('../internals/array-from');\nvar codeAt = require('../internals/string-multibyte').codeAt;\nvar toASCII = require('../internals/string-punycode-to-ascii');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar URLSearchParamsModule = require('../modules/web.url-search-params');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar NativeURL = global.URL;\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\nvar setInternalState = InternalStateModule.set;\nvar getInternalURLState = InternalStateModule.getterFor('URL');\nvar floor = Math.floor;\nvar pow = Math.pow;\n\nvar INVALID_AUTHORITY = 'Invalid authority';\nvar INVALID_SCHEME = 'Invalid scheme';\nvar INVALID_HOST = 'Invalid host';\nvar INVALID_PORT = 'Invalid port';\n\nvar ALPHA = /[A-Za-z]/;\nvar ALPHANUMERIC = /[\\d+\\-.A-Za-z]/;\nvar DIGIT = /\\d/;\nvar HEX_START = /^(0x|0X)/;\nvar OCT = /^[0-7]+$/;\nvar DEC = /^\\d+$/;\nvar HEX = /^[\\dA-Fa-f]+$/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT = /[\\u0000\\u0009\\u000A\\u000D #%/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\u0000\\u0009\\u000A\\u000D #/:?@[\\\\]]/;\n// eslint-disable-next-line no-control-regex\nvar LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\\u0000-\\u001F ]+|[\\u0000-\\u001F ]+$/g;\n// eslint-disable-next-line no-control-regex\nvar TAB_AND_NEW_LINE = /[\\u0009\\u000A\\u000D]/g;\nvar EOF;\n\nvar parseHost = function (url, input) {\n var result, codePoints, index;\n if (input.charAt(0) == '[') {\n if (input.charAt(input.length - 1) != ']') return INVALID_HOST;\n result = parseIPv6(input.slice(1, -1));\n if (!result) return INVALID_HOST;\n url.host = result;\n // opaque host\n } else if (!isSpecial(url)) {\n if (FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT.test(input)) return INVALID_HOST;\n result = '';\n codePoints = arrayFrom(input);\n for (index = 0; index < codePoints.length; index++) {\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\n }\n url.host = result;\n } else {\n input = toASCII(input);\n if (FORBIDDEN_HOST_CODE_POINT.test(input)) return INVALID_HOST;\n result = parseIPv4(input);\n if (result === null) return INVALID_HOST;\n url.host = result;\n }\n};\n\nvar parseIPv4 = function (input) {\n var parts = input.split('.');\n var partsLength, numbers, index, part, radix, number, ipv4;\n if (parts.length && parts[parts.length - 1] == '') {\n parts.pop();\n }\n partsLength = parts.length;\n if (partsLength > 4) return input;\n numbers = [];\n for (index = 0; index < partsLength; index++) {\n part = parts[index];\n if (part == '') return input;\n radix = 10;\n if (part.length > 1 && part.charAt(0) == '0') {\n radix = HEX_START.test(part) ? 16 : 8;\n part = part.slice(radix == 8 ? 1 : 2);\n }\n if (part === '') {\n number = 0;\n } else {\n if (!(radix == 10 ? DEC : radix == 8 ? OCT : HEX).test(part)) return input;\n number = parseInt(part, radix);\n }\n numbers.push(number);\n }\n for (index = 0; index < partsLength; index++) {\n number = numbers[index];\n if (index == partsLength - 1) {\n if (number >= pow(256, 5 - partsLength)) return null;\n } else if (number > 255) return null;\n }\n ipv4 = numbers.pop();\n for (index = 0; index < numbers.length; index++) {\n ipv4 += numbers[index] * pow(256, 3 - index);\n }\n return ipv4;\n};\n\n// eslint-disable-next-line max-statements\nvar parseIPv6 = function (input) {\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\n var pieceIndex = 0;\n var compress = null;\n var pointer = 0;\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\n\n var char = function () {\n return input.charAt(pointer);\n };\n\n if (char() == ':') {\n if (input.charAt(1) != ':') return;\n pointer += 2;\n pieceIndex++;\n compress = pieceIndex;\n }\n while (char()) {\n if (pieceIndex == 8) return;\n if (char() == ':') {\n if (compress !== null) return;\n pointer++;\n pieceIndex++;\n compress = pieceIndex;\n continue;\n }\n value = length = 0;\n while (length < 4 && HEX.test(char())) {\n value = value * 16 + parseInt(char(), 16);\n pointer++;\n length++;\n }\n if (char() == '.') {\n if (length == 0) return;\n pointer -= length;\n if (pieceIndex > 6) return;\n numbersSeen = 0;\n while (char()) {\n ipv4Piece = null;\n if (numbersSeen > 0) {\n if (char() == '.' && numbersSeen < 4) pointer++;\n else return;\n }\n if (!DIGIT.test(char())) return;\n while (DIGIT.test(char())) {\n number = parseInt(char(), 10);\n if (ipv4Piece === null) ipv4Piece = number;\n else if (ipv4Piece == 0) return;\n else ipv4Piece = ipv4Piece * 10 + number;\n if (ipv4Piece > 255) return;\n pointer++;\n }\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\n numbersSeen++;\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\n }\n if (numbersSeen != 4) return;\n break;\n } else if (char() == ':') {\n pointer++;\n if (!char()) return;\n } else if (char()) return;\n address[pieceIndex++] = value;\n }\n if (compress !== null) {\n swaps = pieceIndex - compress;\n pieceIndex = 7;\n while (pieceIndex != 0 && swaps > 0) {\n swap = address[pieceIndex];\n address[pieceIndex--] = address[compress + swaps - 1];\n address[compress + --swaps] = swap;\n }\n } else if (pieceIndex != 8) return;\n return address;\n};\n\nvar findLongestZeroSequence = function (ipv6) {\n var maxIndex = null;\n var maxLength = 1;\n var currStart = null;\n var currLength = 0;\n var index = 0;\n for (; index < 8; index++) {\n if (ipv6[index] !== 0) {\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n currStart = null;\n currLength = 0;\n } else {\n if (currStart === null) currStart = index;\n ++currLength;\n }\n }\n if (currLength > maxLength) {\n maxIndex = currStart;\n maxLength = currLength;\n }\n return maxIndex;\n};\n\nvar serializeHost = function (host) {\n var result, index, compress, ignore0;\n // ipv4\n if (typeof host == 'number') {\n result = [];\n for (index = 0; index < 4; index++) {\n result.unshift(host % 256);\n host = floor(host / 256);\n } return result.join('.');\n // ipv6\n } else if (typeof host == 'object') {\n result = '';\n compress = findLongestZeroSequence(host);\n for (index = 0; index < 8; index++) {\n if (ignore0 && host[index] === 0) continue;\n if (ignore0) ignore0 = false;\n if (compress === index) {\n result += index ? ':' : '::';\n ignore0 = true;\n } else {\n result += host[index].toString(16);\n if (index < 7) result += ':';\n }\n }\n return '[' + result + ']';\n } return host;\n};\n\nvar C0ControlPercentEncodeSet = {};\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\n ' ': 1, '\"': 1, '<': 1, '>': 1, '`': 1\n});\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\n '#': 1, '?': 1, '{': 1, '}': 1\n});\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\': 1, ']': 1, '^': 1, '|': 1\n});\n\nvar percentEncode = function (char, set) {\n var code = codeAt(char, 0);\n return code > 0x20 && code < 0x7F && !has(set, char) ? char : encodeURIComponent(char);\n};\n\nvar specialSchemes = {\n ftp: 21,\n file: null,\n http: 80,\n https: 443,\n ws: 80,\n wss: 443\n};\n\nvar isSpecial = function (url) {\n return has(specialSchemes, url.scheme);\n};\n\nvar includesCredentials = function (url) {\n return url.username != '' || url.password != '';\n};\n\nvar cannotHaveUsernamePasswordPort = function (url) {\n return !url.host || url.cannotBeABaseURL || url.scheme == 'file';\n};\n\nvar isWindowsDriveLetter = function (string, normalized) {\n var second;\n return string.length == 2 && ALPHA.test(string.charAt(0))\n && ((second = string.charAt(1)) == ':' || (!normalized && second == '|'));\n};\n\nvar startsWithWindowsDriveLetter = function (string) {\n var third;\n return string.length > 1 && isWindowsDriveLetter(string.slice(0, 2)) && (\n string.length == 2 ||\n ((third = string.charAt(2)) === '/' || third === '\\\\' || third === '?' || third === '#')\n );\n};\n\nvar shortenURLsPath = function (url) {\n var path = url.path;\n var pathSize = path.length;\n if (pathSize && (url.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\n path.pop();\n }\n};\n\nvar isSingleDot = function (segment) {\n return segment === '.' || segment.toLowerCase() === '%2e';\n};\n\nvar isDoubleDot = function (segment) {\n segment = segment.toLowerCase();\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\n};\n\n// States:\nvar SCHEME_START = {};\nvar SCHEME = {};\nvar NO_SCHEME = {};\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\nvar PATH_OR_AUTHORITY = {};\nvar RELATIVE = {};\nvar RELATIVE_SLASH = {};\nvar SPECIAL_AUTHORITY_SLASHES = {};\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\nvar AUTHORITY = {};\nvar HOST = {};\nvar HOSTNAME = {};\nvar PORT = {};\nvar FILE = {};\nvar FILE_SLASH = {};\nvar FILE_HOST = {};\nvar PATH_START = {};\nvar PATH = {};\nvar CANNOT_BE_A_BASE_URL_PATH = {};\nvar QUERY = {};\nvar FRAGMENT = {};\n\n// eslint-disable-next-line max-statements\nvar parseURL = function (url, input, stateOverride, base) {\n var state = stateOverride || SCHEME_START;\n var pointer = 0;\n var buffer = '';\n var seenAt = false;\n var seenBracket = false;\n var seenPasswordToken = false;\n var codePoints, char, bufferCodePoints, failure;\n\n if (!stateOverride) {\n url.scheme = '';\n url.username = '';\n url.password = '';\n url.host = null;\n url.port = null;\n url.path = [];\n url.query = null;\n url.fragment = null;\n url.cannotBeABaseURL = false;\n input = input.replace(LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE, '');\n }\n\n input = input.replace(TAB_AND_NEW_LINE, '');\n\n codePoints = arrayFrom(input);\n\n while (pointer <= codePoints.length) {\n char = codePoints[pointer];\n switch (state) {\n case SCHEME_START:\n if (char && ALPHA.test(char)) {\n buffer += char.toLowerCase();\n state = SCHEME;\n } else if (!stateOverride) {\n state = NO_SCHEME;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case SCHEME:\n if (char && (ALPHANUMERIC.test(char) || char == '+' || char == '-' || char == '.')) {\n buffer += char.toLowerCase();\n } else if (char == ':') {\n if (stateOverride && (\n (isSpecial(url) != has(specialSchemes, buffer)) ||\n (buffer == 'file' && (includesCredentials(url) || url.port !== null)) ||\n (url.scheme == 'file' && !url.host)\n )) return;\n url.scheme = buffer;\n if (stateOverride) {\n if (isSpecial(url) && specialSchemes[url.scheme] == url.port) url.port = null;\n return;\n }\n buffer = '';\n if (url.scheme == 'file') {\n state = FILE;\n } else if (isSpecial(url) && base && base.scheme == url.scheme) {\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\n } else if (isSpecial(url)) {\n state = SPECIAL_AUTHORITY_SLASHES;\n } else if (codePoints[pointer + 1] == '/') {\n state = PATH_OR_AUTHORITY;\n pointer++;\n } else {\n url.cannotBeABaseURL = true;\n url.path.push('');\n state = CANNOT_BE_A_BASE_URL_PATH;\n }\n } else if (!stateOverride) {\n buffer = '';\n state = NO_SCHEME;\n pointer = 0;\n continue;\n } else return INVALID_SCHEME;\n break;\n\n case NO_SCHEME:\n if (!base || (base.cannotBeABaseURL && char != '#')) return INVALID_SCHEME;\n if (base.cannotBeABaseURL && char == '#') {\n url.scheme = base.scheme;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n url.cannotBeABaseURL = true;\n state = FRAGMENT;\n break;\n }\n state = base.scheme == 'file' ? FILE : RELATIVE;\n continue;\n\n case SPECIAL_RELATIVE_OR_AUTHORITY:\n if (char == '/' && codePoints[pointer + 1] == '/') {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n pointer++;\n } else {\n state = RELATIVE;\n continue;\n } break;\n\n case PATH_OR_AUTHORITY:\n if (char == '/') {\n state = AUTHORITY;\n break;\n } else {\n state = PATH;\n continue;\n }\n\n case RELATIVE:\n url.scheme = base.scheme;\n if (char == EOF) {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '/' || (char == '\\\\' && isSpecial(url))) {\n state = RELATIVE_SLASH;\n } else if (char == '?') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n url.path = base.path.slice();\n url.path.pop();\n state = PATH;\n continue;\n } break;\n\n case RELATIVE_SLASH:\n if (isSpecial(url) && (char == '/' || char == '\\\\')) {\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n } else if (char == '/') {\n state = AUTHORITY;\n } else {\n url.username = base.username;\n url.password = base.password;\n url.host = base.host;\n url.port = base.port;\n state = PATH;\n continue;\n } break;\n\n case SPECIAL_AUTHORITY_SLASHES:\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\n if (char != '/' || buffer.charAt(pointer + 1) != '/') continue;\n pointer++;\n break;\n\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\n if (char != '/' && char != '\\\\') {\n state = AUTHORITY;\n continue;\n } break;\n\n case AUTHORITY:\n if (char == '@') {\n if (seenAt) buffer = '%40' + buffer;\n seenAt = true;\n bufferCodePoints = arrayFrom(buffer);\n for (var i = 0; i < bufferCodePoints.length; i++) {\n var codePoint = bufferCodePoints[i];\n if (codePoint == ':' && !seenPasswordToken) {\n seenPasswordToken = true;\n continue;\n }\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\n if (seenPasswordToken) url.password += encodedCodePoints;\n else url.username += encodedCodePoints;\n }\n buffer = '';\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\n pointer -= arrayFrom(buffer).length + 1;\n buffer = '';\n state = HOST;\n } else buffer += char;\n break;\n\n case HOST:\n case HOSTNAME:\n if (stateOverride && url.scheme == 'file') {\n state = FILE_HOST;\n continue;\n } else if (char == ':' && !seenBracket) {\n if (buffer == '') return INVALID_HOST;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PORT;\n if (stateOverride == HOSTNAME) return;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url))\n ) {\n if (isSpecial(url) && buffer == '') return INVALID_HOST;\n if (stateOverride && buffer == '' && (includesCredentials(url) || url.port !== null)) return;\n failure = parseHost(url, buffer);\n if (failure) return failure;\n buffer = '';\n state = PATH_START;\n if (stateOverride) return;\n continue;\n } else {\n if (char == '[') seenBracket = true;\n else if (char == ']') seenBracket = false;\n buffer += char;\n } break;\n\n case PORT:\n if (DIGIT.test(char)) {\n buffer += char;\n } else if (\n char == EOF || char == '/' || char == '?' || char == '#' ||\n (char == '\\\\' && isSpecial(url)) ||\n stateOverride\n ) {\n if (buffer != '') {\n var port = parseInt(buffer, 10);\n if (port > 0xFFFF) return INVALID_PORT;\n url.port = (isSpecial(url) && port === specialSchemes[url.scheme]) ? null : port;\n buffer = '';\n }\n if (stateOverride) return;\n state = PATH_START;\n continue;\n } else return INVALID_PORT;\n break;\n\n case FILE:\n url.scheme = 'file';\n if (char == '/' || char == '\\\\') state = FILE_SLASH;\n else if (base && base.scheme == 'file') {\n if (char == EOF) {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n } else if (char == '?') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.host = base.host;\n url.path = base.path.slice();\n url.query = base.query;\n url.fragment = '';\n state = FRAGMENT;\n } else {\n if (!startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n url.host = base.host;\n url.path = base.path.slice();\n shortenURLsPath(url);\n }\n state = PATH;\n continue;\n }\n } else {\n state = PATH;\n continue;\n } break;\n\n case FILE_SLASH:\n if (char == '/' || char == '\\\\') {\n state = FILE_HOST;\n break;\n }\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(codePoints.slice(pointer).join(''))) {\n if (isWindowsDriveLetter(base.path[0], true)) url.path.push(base.path[0]);\n else url.host = base.host;\n }\n state = PATH;\n continue;\n\n case FILE_HOST:\n if (char == EOF || char == '/' || char == '\\\\' || char == '?' || char == '#') {\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\n state = PATH;\n } else if (buffer == '') {\n url.host = '';\n if (stateOverride) return;\n state = PATH_START;\n } else {\n failure = parseHost(url, buffer);\n if (failure) return failure;\n if (url.host == 'localhost') url.host = '';\n if (stateOverride) return;\n buffer = '';\n state = PATH_START;\n } continue;\n } else buffer += char;\n break;\n\n case PATH_START:\n if (isSpecial(url)) {\n state = PATH;\n if (char != '/' && char != '\\\\') continue;\n } else if (!stateOverride && char == '?') {\n url.query = '';\n state = QUERY;\n } else if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n state = PATH;\n if (char != '/') continue;\n } break;\n\n case PATH:\n if (\n char == EOF || char == '/' ||\n (char == '\\\\' && isSpecial(url)) ||\n (!stateOverride && (char == '?' || char == '#'))\n ) {\n if (isDoubleDot(buffer)) {\n shortenURLsPath(url);\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else if (isSingleDot(buffer)) {\n if (char != '/' && !(char == '\\\\' && isSpecial(url))) {\n url.path.push('');\n }\n } else {\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\n if (url.host) url.host = '';\n buffer = buffer.charAt(0) + ':'; // normalize windows drive letter\n }\n url.path.push(buffer);\n }\n buffer = '';\n if (url.scheme == 'file' && (char == EOF || char == '?' || char == '#')) {\n while (url.path.length > 1 && url.path[0] === '') {\n url.path.shift();\n }\n }\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n }\n } else {\n buffer += percentEncode(char, pathPercentEncodeSet);\n } break;\n\n case CANNOT_BE_A_BASE_URL_PATH:\n if (char == '?') {\n url.query = '';\n state = QUERY;\n } else if (char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n url.path[0] += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case QUERY:\n if (!stateOverride && char == '#') {\n url.fragment = '';\n state = FRAGMENT;\n } else if (char != EOF) {\n if (char == \"'\" && isSpecial(url)) url.query += '%27';\n else if (char == '#') url.query += '%23';\n else url.query += percentEncode(char, C0ControlPercentEncodeSet);\n } break;\n\n case FRAGMENT:\n if (char != EOF) url.fragment += percentEncode(char, fragmentPercentEncodeSet);\n break;\n }\n\n pointer++;\n }\n};\n\n// `URL` constructor\n// https://url.spec.whatwg.org/#url-class\nvar URLConstructor = function URL(url /* , base */) {\n var that = anInstance(this, URLConstructor, 'URL');\n var base = arguments.length > 1 ? arguments[1] : undefined;\n var urlString = String(url);\n var state = setInternalState(that, { type: 'URL' });\n var baseState, failure;\n if (base !== undefined) {\n if (base instanceof URLConstructor) baseState = getInternalURLState(base);\n else {\n failure = parseURL(baseState = {}, String(base));\n if (failure) throw TypeError(failure);\n }\n }\n failure = parseURL(state, urlString, null, baseState);\n if (failure) throw TypeError(failure);\n var searchParams = state.searchParams = new URLSearchParams();\n var searchParamsState = getInternalSearchParamsState(searchParams);\n searchParamsState.updateSearchParams(state.query);\n searchParamsState.updateURL = function () {\n state.query = String(searchParams) || null;\n };\n if (!DESCRIPTORS) {\n that.href = serializeURL.call(that);\n that.origin = getOrigin.call(that);\n that.protocol = getProtocol.call(that);\n that.username = getUsername.call(that);\n that.password = getPassword.call(that);\n that.host = getHost.call(that);\n that.hostname = getHostname.call(that);\n that.port = getPort.call(that);\n that.pathname = getPathname.call(that);\n that.search = getSearch.call(that);\n that.searchParams = getSearchParams.call(that);\n that.hash = getHash.call(that);\n }\n};\n\nvar URLPrototype = URLConstructor.prototype;\n\nvar serializeURL = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var username = url.username;\n var password = url.password;\n var host = url.host;\n var port = url.port;\n var path = url.path;\n var query = url.query;\n var fragment = url.fragment;\n var output = scheme + ':';\n if (host !== null) {\n output += '//';\n if (includesCredentials(url)) {\n output += username + (password ? ':' + password : '') + '@';\n }\n output += serializeHost(host);\n if (port !== null) output += ':' + port;\n } else if (scheme == 'file') output += '//';\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n if (query !== null) output += '?' + query;\n if (fragment !== null) output += '#' + fragment;\n return output;\n};\n\nvar getOrigin = function () {\n var url = getInternalURLState(this);\n var scheme = url.scheme;\n var port = url.port;\n if (scheme == 'blob') try {\n return new URL(scheme.path[0]).origin;\n } catch (error) {\n return 'null';\n }\n if (scheme == 'file' || !isSpecial(url)) return 'null';\n return scheme + '://' + serializeHost(url.host) + (port !== null ? ':' + port : '');\n};\n\nvar getProtocol = function () {\n return getInternalURLState(this).scheme + ':';\n};\n\nvar getUsername = function () {\n return getInternalURLState(this).username;\n};\n\nvar getPassword = function () {\n return getInternalURLState(this).password;\n};\n\nvar getHost = function () {\n var url = getInternalURLState(this);\n var host = url.host;\n var port = url.port;\n return host === null ? ''\n : port === null ? serializeHost(host)\n : serializeHost(host) + ':' + port;\n};\n\nvar getHostname = function () {\n var host = getInternalURLState(this).host;\n return host === null ? '' : serializeHost(host);\n};\n\nvar getPort = function () {\n var port = getInternalURLState(this).port;\n return port === null ? '' : String(port);\n};\n\nvar getPathname = function () {\n var url = getInternalURLState(this);\n var path = url.path;\n return url.cannotBeABaseURL ? path[0] : path.length ? '/' + path.join('/') : '';\n};\n\nvar getSearch = function () {\n var query = getInternalURLState(this).query;\n return query ? '?' + query : '';\n};\n\nvar getSearchParams = function () {\n return getInternalURLState(this).searchParams;\n};\n\nvar getHash = function () {\n var fragment = getInternalURLState(this).fragment;\n return fragment ? '#' + fragment : '';\n};\n\nvar accessorDescriptor = function (getter, setter) {\n return { get: getter, set: setter, configurable: true, enumerable: true };\n};\n\nif (DESCRIPTORS) {\n defineProperties(URLPrototype, {\n // `URL.prototype.href` accessors pair\n // https://url.spec.whatwg.org/#dom-url-href\n href: accessorDescriptor(serializeURL, function (href) {\n var url = getInternalURLState(this);\n var urlString = String(href);\n var failure = parseURL(url, urlString);\n if (failure) throw TypeError(failure);\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.origin` getter\n // https://url.spec.whatwg.org/#dom-url-origin\n origin: accessorDescriptor(getOrigin),\n // `URL.prototype.protocol` accessors pair\n // https://url.spec.whatwg.org/#dom-url-protocol\n protocol: accessorDescriptor(getProtocol, function (protocol) {\n var url = getInternalURLState(this);\n parseURL(url, String(protocol) + ':', SCHEME_START);\n }),\n // `URL.prototype.username` accessors pair\n // https://url.spec.whatwg.org/#dom-url-username\n username: accessorDescriptor(getUsername, function (username) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(username));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.username = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.password` accessors pair\n // https://url.spec.whatwg.org/#dom-url-password\n password: accessorDescriptor(getPassword, function (password) {\n var url = getInternalURLState(this);\n var codePoints = arrayFrom(String(password));\n if (cannotHaveUsernamePasswordPort(url)) return;\n url.password = '';\n for (var i = 0; i < codePoints.length; i++) {\n url.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\n }\n }),\n // `URL.prototype.host` accessors pair\n // https://url.spec.whatwg.org/#dom-url-host\n host: accessorDescriptor(getHost, function (host) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(host), HOST);\n }),\n // `URL.prototype.hostname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hostname\n hostname: accessorDescriptor(getHostname, function (hostname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n parseURL(url, String(hostname), HOSTNAME);\n }),\n // `URL.prototype.port` accessors pair\n // https://url.spec.whatwg.org/#dom-url-port\n port: accessorDescriptor(getPort, function (port) {\n var url = getInternalURLState(this);\n if (cannotHaveUsernamePasswordPort(url)) return;\n port = String(port);\n if (port == '') url.port = null;\n else parseURL(url, port, PORT);\n }),\n // `URL.prototype.pathname` accessors pair\n // https://url.spec.whatwg.org/#dom-url-pathname\n pathname: accessorDescriptor(getPathname, function (pathname) {\n var url = getInternalURLState(this);\n if (url.cannotBeABaseURL) return;\n url.path = [];\n parseURL(url, pathname + '', PATH_START);\n }),\n // `URL.prototype.search` accessors pair\n // https://url.spec.whatwg.org/#dom-url-search\n search: accessorDescriptor(getSearch, function (search) {\n var url = getInternalURLState(this);\n search = String(search);\n if (search == '') {\n url.query = null;\n } else {\n if ('?' == search.charAt(0)) search = search.slice(1);\n url.query = '';\n parseURL(url, search, QUERY);\n }\n getInternalSearchParamsState(url.searchParams).updateSearchParams(url.query);\n }),\n // `URL.prototype.searchParams` getter\n // https://url.spec.whatwg.org/#dom-url-searchparams\n searchParams: accessorDescriptor(getSearchParams),\n // `URL.prototype.hash` accessors pair\n // https://url.spec.whatwg.org/#dom-url-hash\n hash: accessorDescriptor(getHash, function (hash) {\n var url = getInternalURLState(this);\n hash = String(hash);\n if (hash == '') {\n url.fragment = null;\n return;\n }\n if ('#' == hash.charAt(0)) hash = hash.slice(1);\n url.fragment = '';\n parseURL(url, hash, FRAGMENT);\n })\n });\n}\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\nredefine(URLPrototype, 'toJSON', function toJSON() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\n// `URL.prototype.toString` method\n// https://url.spec.whatwg.org/#URL-stringification-behavior\nredefine(URLPrototype, 'toString', function toString() {\n return serializeURL.call(this);\n}, { enumerable: true });\n\nif (NativeURL) {\n var nativeCreateObjectURL = NativeURL.createObjectURL;\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\n // `URL.createObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\n // eslint-disable-next-line no-unused-vars\n if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {\n return nativeCreateObjectURL.apply(NativeURL, arguments);\n });\n // `URL.revokeObjectURL` method\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\n // eslint-disable-next-line no-unused-vars\n if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {\n return nativeRevokeObjectURL.apply(NativeURL, arguments);\n });\n}\n\nsetToStringTag(URLConstructor, 'URL');\n\n$({ global: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\n URL: URLConstructor\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\nvar nativeAssign = Object.assign;\nvar defineProperty = Object.defineProperty;\n\n// `Object.assign` method\n// https://tc39.github.io/ecma262/#sec-object.assign\nmodule.exports = !nativeAssign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && nativeAssign({ b: 1 }, nativeAssign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || propertyIsEnumerable.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : nativeAssign;\n","'use strict';\nvar bind = require('../internals/function-bind-context');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar toLength = require('../internals/to-length');\nvar createProperty = require('../internals/create-property');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\n// `Array.from` method implementation\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n next = iterator.next;\n result = new C();\n for (;!(step = next.call(iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var anObject = require('../internals/an-object');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n throw error;\n }\n};\n","'use strict';\nvar toPrimitive = require('../internals/to-primitive');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\nvar base = 36;\nvar tMin = 1;\nvar tMax = 26;\nvar skew = 38;\nvar damp = 700;\nvar initialBias = 72;\nvar initialN = 128; // 0x80\nvar delimiter = '-'; // '\\x2D'\nvar regexNonASCII = /[^\\0-\\u007E]/; // non-ASCII chars\nvar regexSeparators = /[.\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\nvar baseMinusTMin = base - tMin;\nvar floor = Math.floor;\nvar stringFromCharCode = String.fromCharCode;\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n */\nvar ucs2decode = function (string) {\n var output = [];\n var counter = 0;\n var length = string.length;\n while (counter < length) {\n var value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n var extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n */\nvar digitToBasic = function (digit) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n */\nvar adapt = function (delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n */\n// eslint-disable-next-line max-statements\nvar encode = function (input) {\n var output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n input = ucs2decode(input);\n\n // Cache the length.\n var inputLength = input.length;\n\n // Initialize the state.\n var n = initialN;\n var delta = 0;\n var bias = initialBias;\n var i, currentValue;\n\n // Handle the basic code points.\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n var basicLength = output.length; // number of basic code points.\n var handledCPCount = basicLength; // number of code points that have been handled;\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next larger one:\n var m = maxInt;\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.\n var handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n throw RangeError(OVERFLOW_ERROR);\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (i = 0; i < input.length; i++) {\n currentValue = input[i];\n if (currentValue < n && ++delta > maxInt) {\n throw RangeError(OVERFLOW_ERROR);\n }\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer.\n var q = delta;\n for (var k = base; /* no condition */; k += base) {\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) break;\n var qMinusT = q - t;\n var baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n};\n\nmodule.exports = function (input) {\n var encoded = [];\n var labels = input.toLowerCase().replace(regexSeparators, '\\u002E').split('.');\n var i, label;\n for (i = 0; i < labels.length; i++) {\n label = labels[i];\n encoded.push(regexNonASCII.test(label) ? 'xn--' + encode(label) : label);\n }\n return encoded.join('.');\n};\n","'use strict';\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env`\nrequire('../modules/es.array.iterator');\nvar $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar USE_NATIVE_URL = require('../internals/native-url');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar InternalStateModule = require('../internals/internal-state');\nvar anInstance = require('../internals/an-instance');\nvar hasOwn = require('../internals/has');\nvar bind = require('../internals/function-bind-context');\nvar classof = require('../internals/classof');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar $fetch = getBuiltIn('fetch');\nvar Headers = getBuiltIn('Headers');\nvar ITERATOR = wellKnownSymbol('iterator');\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\n\nvar plus = /\\+/g;\nvar sequences = Array(4);\n\nvar percentSequence = function (bytes) {\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\da-f]{2}){' + bytes + '})', 'gi'));\n};\n\nvar percentDecode = function (sequence) {\n try {\n return decodeURIComponent(sequence);\n } catch (error) {\n return sequence;\n }\n};\n\nvar deserialize = function (it) {\n var result = it.replace(plus, ' ');\n var bytes = 4;\n try {\n return decodeURIComponent(result);\n } catch (error) {\n while (bytes) {\n result = result.replace(percentSequence(bytes--), percentDecode);\n }\n return result;\n }\n};\n\nvar find = /[!'()~]|%20/g;\n\nvar replace = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+'\n};\n\nvar replacer = function (match) {\n return replace[match];\n};\n\nvar serialize = function (it) {\n return encodeURIComponent(it).replace(find, replacer);\n};\n\nvar parseSearchParams = function (result, query) {\n if (query) {\n var attributes = query.split('&');\n var index = 0;\n var attribute, entry;\n while (index < attributes.length) {\n attribute = attributes[index++];\n if (attribute.length) {\n entry = attribute.split('=');\n result.push({\n key: deserialize(entry.shift()),\n value: deserialize(entry.join('='))\n });\n }\n }\n }\n};\n\nvar updateSearchParams = function (query) {\n this.entries.length = 0;\n parseSearchParams(this.entries, query);\n};\n\nvar validateArgumentsLength = function (passed, required) {\n if (passed < required) throw TypeError('Not enough arguments');\n};\n\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\n setInternalState(this, {\n type: URL_SEARCH_PARAMS_ITERATOR,\n iterator: getIterator(getInternalParamsState(params).entries),\n kind: kind\n });\n}, 'Iterator', function next() {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var step = state.iterator.next();\n var entry = step.value;\n if (!step.done) {\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\n } return step;\n});\n\n// `URLSearchParams` constructor\n// https://url.spec.whatwg.org/#interface-urlsearchparams\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\n anInstance(this, URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n var init = arguments.length > 0 ? arguments[0] : undefined;\n var that = this;\n var entries = [];\n var iteratorMethod, iterator, next, step, entryIterator, entryNext, first, second, key;\n\n setInternalState(that, {\n type: URL_SEARCH_PARAMS,\n entries: entries,\n updateURL: function () { /* empty */ },\n updateSearchParams: updateSearchParams\n });\n\n if (init !== undefined) {\n if (isObject(init)) {\n iteratorMethod = getIteratorMethod(init);\n if (typeof iteratorMethod === 'function') {\n iterator = iteratorMethod.call(init);\n next = iterator.next;\n while (!(step = next.call(iterator)).done) {\n entryIterator = getIterator(anObject(step.value));\n entryNext = entryIterator.next;\n if (\n (first = entryNext.call(entryIterator)).done ||\n (second = entryNext.call(entryIterator)).done ||\n !entryNext.call(entryIterator).done\n ) throw TypeError('Expected sequence with length 2');\n entries.push({ key: first.value + '', value: second.value + '' });\n }\n } else for (key in init) if (hasOwn(init, key)) entries.push({ key: key, value: init[key] + '' });\n } else {\n parseSearchParams(entries, typeof init === 'string' ? init.charAt(0) === '?' ? init.slice(1) : init : init + '');\n }\n }\n};\n\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\n\nredefineAll(URLSearchParamsPrototype, {\n // `URLSearchParams.prototype.appent` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\n append: function append(name, value) {\n validateArgumentsLength(arguments.length, 2);\n var state = getInternalParamsState(this);\n state.entries.push({ key: name + '', value: value + '' });\n state.updateURL();\n },\n // `URLSearchParams.prototype.delete` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\n 'delete': function (name) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index].key === key) entries.splice(index, 1);\n else index++;\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.get` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\n get: function get(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) return entries[index].value;\n }\n return null;\n },\n // `URLSearchParams.prototype.getAll` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\n getAll: function getAll(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var result = [];\n var index = 0;\n for (; index < entries.length; index++) {\n if (entries[index].key === key) result.push(entries[index].value);\n }\n return result;\n },\n // `URLSearchParams.prototype.has` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\n has: function has(name) {\n validateArgumentsLength(arguments.length, 1);\n var entries = getInternalParamsState(this).entries;\n var key = name + '';\n var index = 0;\n while (index < entries.length) {\n if (entries[index++].key === key) return true;\n }\n return false;\n },\n // `URLSearchParams.prototype.set` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\n set: function set(name, value) {\n validateArgumentsLength(arguments.length, 1);\n var state = getInternalParamsState(this);\n var entries = state.entries;\n var found = false;\n var key = name + '';\n var val = value + '';\n var index = 0;\n var entry;\n for (; index < entries.length; index++) {\n entry = entries[index];\n if (entry.key === key) {\n if (found) entries.splice(index--, 1);\n else {\n found = true;\n entry.value = val;\n }\n }\n }\n if (!found) entries.push({ key: key, value: val });\n state.updateURL();\n },\n // `URLSearchParams.prototype.sort` method\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\n sort: function sort() {\n var state = getInternalParamsState(this);\n var entries = state.entries;\n // Array#sort is not stable in some engines\n var slice = entries.slice();\n var entry, entriesIndex, sliceIndex;\n entries.length = 0;\n for (sliceIndex = 0; sliceIndex < slice.length; sliceIndex++) {\n entry = slice[sliceIndex];\n for (entriesIndex = 0; entriesIndex < sliceIndex; entriesIndex++) {\n if (entries[entriesIndex].key > entry.key) {\n entries.splice(entriesIndex, 0, entry);\n break;\n }\n }\n if (entriesIndex === sliceIndex) entries.push(entry);\n }\n state.updateURL();\n },\n // `URLSearchParams.prototype.forEach` method\n forEach: function forEach(callback /* , thisArg */) {\n var entries = getInternalParamsState(this).entries;\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined, 3);\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n boundFunction(entry.value, entry.key, this);\n }\n },\n // `URLSearchParams.prototype.keys` method\n keys: function keys() {\n return new URLSearchParamsIterator(this, 'keys');\n },\n // `URLSearchParams.prototype.values` method\n values: function values() {\n return new URLSearchParamsIterator(this, 'values');\n },\n // `URLSearchParams.prototype.entries` method\n entries: function entries() {\n return new URLSearchParamsIterator(this, 'entries');\n }\n}, { enumerable: true });\n\n// `URLSearchParams.prototype[@@iterator]` method\nredefine(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries);\n\n// `URLSearchParams.prototype.toString` method\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\nredefine(URLSearchParamsPrototype, 'toString', function toString() {\n var entries = getInternalParamsState(this).entries;\n var result = [];\n var index = 0;\n var entry;\n while (index < entries.length) {\n entry = entries[index++];\n result.push(serialize(entry.key) + '=' + serialize(entry.value));\n } return result.join('&');\n}, { enumerable: true });\n\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\n\n$({ global: true, forced: !USE_NATIVE_URL }, {\n URLSearchParams: URLSearchParamsConstructor\n});\n\n// Wrap `fetch` for correct work with polyfilled `URLSearchParams`\n// https://github.com/zloirock/core-js/issues/674\nif (!USE_NATIVE_URL && typeof $fetch == 'function' && typeof Headers == 'function') {\n $({ global: true, enumerable: true, forced: true }, {\n fetch: function fetch(input /* , init */) {\n var args = [input];\n var init, body, headers;\n if (arguments.length > 1) {\n init = arguments[1];\n if (isObject(init)) {\n body = init.body;\n if (classof(body) === URL_SEARCH_PARAMS) {\n headers = init.headers ? new Headers(init.headers) : new Headers();\n if (!headers.has('content-type')) {\n headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n init = create(init, {\n body: createPropertyDescriptor(0, String(body)),\n headers: createPropertyDescriptor(0, headers)\n });\n }\n }\n args.push(init);\n } return $fetch.apply(this, args);\n }\n });\n}\n\nmodule.exports = {\n URLSearchParams: URLSearchParamsConstructor,\n getState: getInternalParamsState\n};\n","var anObject = require('../internals/an-object');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nmodule.exports = function (it) {\n var iteratorMethod = getIteratorMethod(it);\n if (typeof iteratorMethod != 'function') {\n throw TypeError(String(it) + ' is not iterable');\n } return anObject(iteratorMethod.call(it));\n};\n","/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n(function(scope) {\n\n 'use strict';\n\n // defaultPrevented is broken in IE.\n // https://connect.microsoft.com/IE/feedback/details/790389/event-defaultprevented-returns-false-after-preventdefault-was-called\n var workingDefaultPrevented = (function() {\n var e = document.createEvent('Event');\n e.initEvent('foo', true, true);\n e.preventDefault();\n return e.defaultPrevented;\n })();\n\n if (!workingDefaultPrevented) {\n var origPreventDefault = Event.prototype.preventDefault;\n Event.prototype.preventDefault = function() {\n if (!this.cancelable) {\n return;\n }\n\n origPreventDefault.call(this);\n\n Object.defineProperty(this, 'defaultPrevented', {\n get: function() {\n return true;\n },\n configurable: true\n });\n };\n }\n\n var isIE = /Trident/.test(navigator.userAgent);\n\n // CustomEvent constructor shim\n if (!window.CustomEvent || isIE && (typeof window.CustomEvent !== 'function')) {\n window.CustomEvent = function(inType, params) {\n params = params || {};\n var e = document.createEvent('CustomEvent');\n e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail);\n return e;\n };\n window.CustomEvent.prototype = window.Event.prototype;\n }\n\n // Event constructor shim\n if (!window.Event || isIE && (typeof window.Event !== 'function')) {\n var origEvent = window.Event;\n window.Event = function(inType, params) {\n params = params || {};\n var e = document.createEvent('Event');\n e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable));\n return e;\n };\n if (origEvent) {\n for (var i in origEvent) {\n window.Event[i] = origEvent[i];\n }\n }\n window.Event.prototype = origEvent.prototype;\n }\n\n if (!window.MouseEvent || isIE && (typeof window.MouseEvent !== 'function')) {\n var origMouseEvent = window.MouseEvent;\n window.MouseEvent = function(inType, params) {\n params = params || {};\n var e = document.createEvent('MouseEvent');\n e.initMouseEvent(inType,\n Boolean(params.bubbles), Boolean(params.cancelable),\n params.view || window, params.detail,\n params.screenX, params.screenY, params.clientX, params.clientY,\n params.ctrlKey, params.altKey, params.shiftKey, params.metaKey,\n params.button, params.relatedTarget);\n return e;\n };\n if (origMouseEvent) {\n for (var i in origMouseEvent) {\n window.MouseEvent[i] = origMouseEvent[i];\n }\n }\n window.MouseEvent.prototype = origMouseEvent.prototype;\n }\n\n // ES6 stuff\n if (!Array.from) {\n Array.from = function (object) {\n return [].slice.call(object);\n };\n }\n\n if (!Object.assign) {\n var assign = function(target, source) {\n var n$ = Object.getOwnPropertyNames(source);\n for (var i=0, p; i < n$.length; i++) {\n p = n$[i];\n target[p] = source[p];\n }\n }\n\n Object.assign = function(target, sources) {\n var args = [].slice.call(arguments, 1);\n for (var i=0, s; i < args.length; i++) {\n s = args[i];\n if (s) {\n assign(target, s);\n }\n }\n return target;\n }\n }\n\n})(window.WebComponents);\n",null,null,null,null,null,null,"/**\n@license\nCopyright (c) 2018 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\nimport SymbolPolyfill from '../node_modules/es-symbol/dist/symbol.js';\n\nif (!window.Symbol) {\n window.Symbol = SymbolPolyfill;\n const iterator = window.Symbol.iterator;\n\n // implement iterators for IE 11\n\n /** @this {Array} */\n Array.prototype[iterator] = function*() {\n for (let i = 0; i < this.length; i++) {\n yield this[i];\n }\n };\n\n /** @this {Set} */\n Set.prototype[iterator] = function*() {\n const temp = [];\n this.forEach((value) => {\n temp.push(value);\n });\n for (let i = 0; i < temp.length; i++) {\n yield temp[i];\n }\n };\n\n /** @this {Map} */\n Map.prototype[iterator] = function*() {\n const entries = [];\n this.forEach((value, key) => {\n entries.push([key, value]);\n });\n for(let i = 0; i < entries.length; i++) {\n yield entries[i];\n }\n };\n\n /** @this {String} */\n String.prototype[iterator] = function*() {\n for (let i = 0; i < this.length; i++) {\n yield this[i];\n }\n };\n}","/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n// minimal template polyfill\n(function() {\n 'use strict';\n\n var needsTemplate = (typeof HTMLTemplateElement === 'undefined');\n var brokenDocFragment = !(document.createDocumentFragment().cloneNode() instanceof DocumentFragment);\n var needsDocFrag = false;\n\n // NOTE: Replace DocumentFragment to work around IE11 bug that\n // causes children of a document fragment modified while\n // there is a mutation observer to not have a parentNode, or\n // have a broken parentNode (!?!)\n if (/Trident/.test(navigator.userAgent)) {\n (function() {\n\n needsDocFrag = true;\n\n var origCloneNode = Node.prototype.cloneNode;\n Node.prototype.cloneNode = function cloneNode(deep) {\n var newDom = origCloneNode.call(this, deep);\n if (this instanceof DocumentFragment) {\n newDom.__proto__ = DocumentFragment.prototype;\n }\n return newDom;\n };\n\n // IE's DocumentFragment querySelector code doesn't work when\n // called on an element instance\n DocumentFragment.prototype.querySelectorAll = HTMLElement.prototype.querySelectorAll;\n DocumentFragment.prototype.querySelector = HTMLElement.prototype.querySelector;\n\n Object.defineProperties(DocumentFragment.prototype, {\n 'nodeType': {\n get: function () {\n return Node.DOCUMENT_FRAGMENT_NODE;\n },\n configurable: true\n },\n\n 'localName': {\n get: function () {\n return undefined;\n },\n configurable: true\n },\n\n 'nodeName': {\n get: function () {\n return '#document-fragment';\n },\n configurable: true\n }\n });\n\n var origInsertBefore = Node.prototype.insertBefore;\n function insertBefore(newNode, refNode) {\n if (newNode instanceof DocumentFragment) {\n var child;\n while ((child = newNode.firstChild)) {\n origInsertBefore.call(this, child, refNode);\n }\n } else {\n origInsertBefore.call(this, newNode, refNode);\n }\n return newNode;\n }\n Node.prototype.insertBefore = insertBefore;\n\n var origAppendChild = Node.prototype.appendChild;\n Node.prototype.appendChild = function appendChild(child) {\n if (child instanceof DocumentFragment) {\n insertBefore.call(this, child, null);\n } else {\n origAppendChild.call(this, child);\n }\n return child;\n };\n\n var origRemoveChild = Node.prototype.removeChild;\n var origReplaceChild = Node.prototype.replaceChild;\n Node.prototype.replaceChild = function replaceChild(newChild, oldChild) {\n if (newChild instanceof DocumentFragment) {\n insertBefore.call(this, newChild, oldChild);\n origRemoveChild.call(this, oldChild);\n } else {\n origReplaceChild.call(this, newChild, oldChild);\n }\n return oldChild;\n };\n\n Document.prototype.createDocumentFragment = function createDocumentFragment() {\n var frag = this.createElement('df');\n frag.__proto__ = DocumentFragment.prototype;\n return frag;\n };\n\n var origImportNode = Document.prototype.importNode;\n Document.prototype.importNode = function importNode(impNode, deep) {\n deep = deep || false;\n var newNode = origImportNode.call(this, impNode, deep);\n if (impNode instanceof DocumentFragment) {\n newNode.__proto__ = DocumentFragment.prototype;\n }\n return newNode;\n };\n })();\n }\n\n // NOTE: we rely on this cloneNode not causing element upgrade.\n // This means this polyfill must load before the CE polyfill and\n // this would need to be re-worked if a browser supports native CE\n // but not <template>.\n var capturedCloneNode = Node.prototype.cloneNode;\n var capturedCreateElement = Document.prototype.createElement;\n var capturedImportNode = Document.prototype.importNode;\n var capturedRemoveChild = Node.prototype.removeChild;\n var capturedAppendChild = Node.prototype.appendChild;\n var capturedReplaceChild = Node.prototype.replaceChild;\n var capturedParseFromString = DOMParser.prototype.parseFromString;\n var capturedHTMLElementInnerHTML = Object.getOwnPropertyDescriptor(window.HTMLElement.prototype, 'innerHTML');\n var capturedChildNodes = Object.getOwnPropertyDescriptor(window.Node.prototype, 'childNodes');\n\n var elementQuerySelectorAll = Element.prototype.querySelectorAll;\n var docQuerySelectorAll = Document.prototype.querySelectorAll;\n var fragQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;\n\n var scriptSelector = 'script:not([type]),script[type=\"application/javascript\"],script[type=\"text/javascript\"]';\n\n function QSA(node, selector) {\n // IE 11 throws a SyntaxError with `scriptSelector` if the node has no children due to the `:not([type])` syntax\n if (!node.childNodes.length) {\n return [];\n }\n switch (node.nodeType) {\n case Node.DOCUMENT_NODE:\n return docQuerySelectorAll.call(node, selector);\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragQuerySelectorAll.call(node, selector);\n default:\n return elementQuerySelectorAll.call(node, selector);\n }\n }\n\n // returns true if nested templates cannot be cloned (they cannot be on\n // some impl's like Safari 8 and Edge)\n // OR if cloning a document fragment does not result in a document fragment\n var needsCloning = (function() {\n if (!needsTemplate) {\n var t = document.createElement('template');\n var t2 = document.createElement('template');\n t2.content.appendChild(document.createElement('div'));\n t.content.appendChild(t2);\n var clone = t.cloneNode(true);\n return (clone.content.childNodes.length === 0 || clone.content.firstChild.content.childNodes.length === 0\n || brokenDocFragment);\n }\n })();\n\n var TEMPLATE_TAG = 'template';\n var PolyfilledHTMLTemplateElement = function() {};\n\n if (needsTemplate) {\n\n var contentDoc = document.implementation.createHTMLDocument('template');\n var canDecorate = true;\n\n var templateStyle = document.createElement('style');\n templateStyle.textContent = TEMPLATE_TAG + '{display:none;}';\n\n var head = document.head;\n head.insertBefore(templateStyle, head.firstElementChild);\n\n /**\n Provides a minimal shim for the <template> element.\n */\n PolyfilledHTMLTemplateElement.prototype = Object.create(HTMLElement.prototype);\n\n\n // if elements do not have `innerHTML` on instances, then\n // templates can be patched by swizzling their prototypes.\n var canProtoPatch =\n !(document.createElement('div').hasOwnProperty('innerHTML'));\n\n /**\n The `decorate` method moves element children to the template's `content`.\n NOTE: there is no support for dynamically adding elements to templates.\n */\n PolyfilledHTMLTemplateElement.decorate = function(template) {\n // if the template is decorated or not in HTML namespace, return fast\n if (template.content ||\n template.namespaceURI !== document.documentElement.namespaceURI) {\n return;\n }\n template.content = contentDoc.createDocumentFragment();\n var child;\n while ((child = template.firstChild)) {\n capturedAppendChild.call(template.content, child);\n }\n // NOTE: prefer prototype patching for performance and\n // because on some browsers (IE11), re-defining `innerHTML`\n // can result in intermittent errors.\n if (canProtoPatch) {\n template.__proto__ = PolyfilledHTMLTemplateElement.prototype;\n } else {\n template.cloneNode = function(deep) {\n return PolyfilledHTMLTemplateElement._cloneNode(this, deep);\n };\n // add innerHTML to template, if possible\n // Note: this throws on Safari 7\n if (canDecorate) {\n try {\n defineInnerHTML(template);\n defineOuterHTML(template);\n } catch (err) {\n canDecorate = false;\n }\n }\n }\n // bootstrap recursively\n PolyfilledHTMLTemplateElement.bootstrap(template.content);\n };\n\n // Taken from https://github.com/jquery/jquery/blob/73d7e6259c63ac45f42c6593da8c2796c6ce9281/src/manipulation/wrapMap.js\n var topLevelWrappingMap = {\n 'option': ['select'],\n 'thead': ['table'],\n 'col': ['colgroup', 'table'],\n 'tr': ['tbody', 'table'],\n 'th': ['tr', 'tbody', 'table'],\n 'td': ['tr', 'tbody', 'table']\n };\n\n var getTagName = function(text) {\n // Taken from https://github.com/jquery/jquery/blob/73d7e6259c63ac45f42c6593da8c2796c6ce9281/src/manipulation/var/rtagName.js\n return ( /<([a-z][^/\\0>\\x20\\t\\r\\n\\f]+)/i.exec(text) || ['', ''])[1].toLowerCase();\n };\n\n var defineInnerHTML = function defineInnerHTML(obj) {\n Object.defineProperty(obj, 'innerHTML', {\n get: function() {\n return getInnerHTML(this);\n },\n set: function(text) {\n // For IE11, wrap the text in the correct (table) context\n var wrap = topLevelWrappingMap[getTagName(text)];\n if (wrap) {\n for (var i = 0; i < wrap.length; i++) {\n text = '<' + wrap[i] + '>' + text + '</' + wrap[i] + '>';\n }\n }\n contentDoc.body.innerHTML = text;\n PolyfilledHTMLTemplateElement.bootstrap(contentDoc);\n while (this.content.firstChild) {\n capturedRemoveChild.call(this.content, this.content.firstChild);\n }\n var body = contentDoc.body;\n // If we had wrapped, get back to the original node\n if (wrap) {\n for (var j = 0; j < wrap.length; j++) {\n body = body.lastChild;\n }\n }\n while (body.firstChild) {\n capturedAppendChild.call(this.content, body.firstChild);\n }\n },\n configurable: true\n });\n };\n\n var defineOuterHTML = function defineOuterHTML(obj) {\n Object.defineProperty(obj, 'outerHTML', {\n get: function() {\n return '<' + TEMPLATE_TAG + '>' + this.innerHTML + '</' + TEMPLATE_TAG + '>';\n },\n set: function(innerHTML) {\n if (this.parentNode) {\n contentDoc.body.innerHTML = innerHTML;\n var docFrag = this.ownerDocument.createDocumentFragment();\n while (contentDoc.body.firstChild) {\n capturedAppendChild.call(docFrag, contentDoc.body.firstChild);\n }\n capturedReplaceChild.call(this.parentNode, docFrag, this);\n } else {\n throw new Error(\"Failed to set the 'outerHTML' property on 'Element': This element has no parent node.\");\n }\n },\n configurable: true\n });\n };\n\n defineInnerHTML(PolyfilledHTMLTemplateElement.prototype);\n defineOuterHTML(PolyfilledHTMLTemplateElement.prototype);\n\n /**\n The `bootstrap` method is called automatically and \"fixes\" all\n <template> elements in the document referenced by the `doc` argument.\n */\n PolyfilledHTMLTemplateElement.bootstrap = function bootstrap(doc) {\n var templates = QSA(doc, TEMPLATE_TAG);\n for (var i=0, l=templates.length, t; (i<l) && (t=templates[i]); i++) {\n PolyfilledHTMLTemplateElement.decorate(t);\n }\n };\n\n // auto-bootstrapping for main document\n document.addEventListener('DOMContentLoaded', function() {\n PolyfilledHTMLTemplateElement.bootstrap(document);\n });\n\n // Patch document.createElement to ensure newly created templates have content\n Document.prototype.createElement = function createElement() {\n var el = capturedCreateElement.apply(this, arguments);\n if (el.localName === 'template') {\n PolyfilledHTMLTemplateElement.decorate(el);\n }\n return el;\n };\n\n DOMParser.prototype.parseFromString = function() {\n var el = capturedParseFromString.apply(this, arguments);\n PolyfilledHTMLTemplateElement.bootstrap(el);\n return el;\n };\n\n Object.defineProperty(HTMLElement.prototype, 'innerHTML', {\n get: function() {\n return getInnerHTML(this);\n },\n set: function(text) {\n capturedHTMLElementInnerHTML.set.call(this, text);\n PolyfilledHTMLTemplateElement.bootstrap(this);\n },\n configurable: true,\n enumerable: true\n });\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#escapingString\n var escapeAttrRegExp = /[&\\u00A0\"]/g;\n var escapeDataRegExp = /[&\\u00A0<>]/g;\n\n var escapeReplace = function(c) {\n switch (c) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case '\\u00A0':\n return '&nbsp;';\n }\n };\n\n var escapeAttr = function(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n };\n\n var escapeData = function(s) {\n return s.replace(escapeDataRegExp, escapeReplace);\n };\n\n var makeSet = function(arr) {\n var set = {};\n for (var i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n };\n\n // http://www.whatwg.org/specs/web-apps/current-work/#void-elements\n var voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n ]);\n\n var plaintextParents = makeSet([\n 'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'noscript'\n ]);\n\n /**\n * @param {Node} node\n * @param {Node} parentNode\n * @param {Function=} callback\n */\n var getOuterHTML = function(node, parentNode, callback) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE: {\n var tagName = node.localName;\n var s = '<' + tagName;\n var attrs = node.attributes;\n for (var i = 0, attr; (attr = attrs[i]); i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\n if (voidElements[tagName]) {\n return s;\n }\n return s + getInnerHTML(node, callback) + '</' + tagName + '>';\n }\n case Node.TEXT_NODE: {\n var data = /** @type {Text} */ (node).data;\n if (parentNode && plaintextParents[parentNode.localName]) {\n return data;\n }\n return escapeData(data);\n }\n case Node.COMMENT_NODE: {\n return '<!--' + /** @type {Comment} */ (node).data + '-->';\n }\n default: {\n window.console.error(node);\n throw new Error('not implemented');\n }\n }\n };\n\n /**\n * @param {Node} node\n * @param {Function=} callback\n */\n var getInnerHTML = function(node, callback) {\n if (node.localName === 'template') {\n node = /** @type {HTMLTemplateElement} */ (node).content;\n }\n var s = '';\n var c$ = callback ? callback(node) : capturedChildNodes.get.call(node);\n for (var i=0, l=c$.length, child; (i<l) && (child=c$[i]); i++) {\n s += getOuterHTML(child, node, callback);\n }\n return s;\n };\n\n }\n\n // make cloning/importing work!\n if (needsTemplate || needsCloning) {\n\n PolyfilledHTMLTemplateElement._cloneNode = function _cloneNode(template, deep) {\n var clone = capturedCloneNode.call(template, false);\n // NOTE: decorate doesn't auto-fix children because they are already\n // decorated so they need special clone fixup.\n if (this.decorate) {\n this.decorate(clone);\n }\n if (deep) {\n // NOTE: use native clone node to make sure CE's wrapped\n // cloneNode does not cause elements to upgrade.\n capturedAppendChild.call(clone.content, capturedCloneNode.call(template.content, true));\n // now ensure nested templates are cloned correctly.\n fixClonedDom(clone.content, template.content);\n }\n return clone;\n };\n\n // Given a source and cloned subtree, find <template>'s in the cloned\n // subtree and replace them with cloned <template>'s from source.\n // We must do this because only the source templates have proper .content.\n var fixClonedDom = function fixClonedDom(clone, source) {\n // do nothing if cloned node is not an element\n if (!source.querySelectorAll) return;\n // these two lists should be coincident\n var s$ = QSA(source, TEMPLATE_TAG);\n if (s$.length === 0) {\n return;\n }\n var t$ = QSA(clone, TEMPLATE_TAG);\n for (var i=0, l=t$.length, t, s; i<l; i++) {\n s = s$[i];\n t = t$[i];\n if (PolyfilledHTMLTemplateElement && PolyfilledHTMLTemplateElement.decorate) {\n PolyfilledHTMLTemplateElement.decorate(s);\n }\n capturedReplaceChild.call(t.parentNode, cloneNode.call(s, true), t);\n }\n };\n\n // make sure scripts inside of a cloned template are executable\n var fixClonedScripts = function fixClonedScripts(fragment) {\n var scripts = QSA(fragment, scriptSelector);\n for (var ns, s, i = 0; i < scripts.length; i++) {\n s = scripts[i];\n ns = capturedCreateElement.call(document, 'script');\n ns.textContent = s.textContent;\n var attrs = s.attributes;\n for (var ai = 0, a; ai < attrs.length; ai++) {\n a = attrs[ai];\n ns.setAttribute(a.name, a.value);\n }\n capturedReplaceChild.call(s.parentNode, ns, s);\n }\n };\n\n // override all cloning to fix the cloned subtree to contain properly\n // cloned templates.\n var cloneNode = Node.prototype.cloneNode = function cloneNode(deep) {\n var dom;\n // workaround for Edge bug cloning documentFragments\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/8619646/\n if (!needsDocFrag && brokenDocFragment && this instanceof DocumentFragment) {\n if (!deep) {\n return this.ownerDocument.createDocumentFragment();\n } else {\n dom = importNode.call(this.ownerDocument, this, true);\n }\n } else if (this.nodeType === Node.ELEMENT_NODE &&\n this.localName === TEMPLATE_TAG &&\n this.namespaceURI == document.documentElement.namespaceURI) {\n dom = PolyfilledHTMLTemplateElement._cloneNode(this, deep);\n } else {\n dom = capturedCloneNode.call(this, deep);\n }\n // template.content is cloned iff `deep`.\n if (deep) {\n fixClonedDom(dom, this);\n }\n return dom;\n };\n\n // NOTE: we are cloning instead of importing <template>'s.\n // However, the ownerDocument of the cloned template will be correct!\n // This is because the native import node creates the right document owned\n // subtree and `fixClonedDom` inserts cloned templates into this subtree,\n // thus updating the owner doc.\n var importNode = Document.prototype.importNode = function importNode(element, deep) {\n deep = deep || false;\n if (element.localName === TEMPLATE_TAG) {\n return PolyfilledHTMLTemplateElement._cloneNode(element, deep);\n } else {\n var dom = capturedImportNode.call(this, element, deep);\n if (deep) {\n fixClonedDom(dom, element);\n fixClonedScripts(dom);\n }\n return dom;\n }\n };\n }\n\n if (needsTemplate) {\n window.HTMLTemplateElement = PolyfilledHTMLTemplateElement;\n }\n\n})();\n","import promiseFinally from './finally';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(values) {\n return new Promise(function(resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n (typeof setImmediate === 'function' &&\n function(fn) {\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\nimport PromisePolyfill from '../node_modules/promise-polyfill/src/index.js';\n\n/*\nAssign the ES6 promise polyfill to window ourselves instead of using the \"auto\" polyfill\nto work around https://github.com/webcomponents/webcomponentsjs/issues/837\n*/\nif (!window.Promise) {\n window.Promise = PromisePolyfill;\n // save Promise API\n /* eslint-disable no-self-assign */\n // PromisePolyfill.prototype['catch'] = PromisePolyfill.prototype.catch;\n PromisePolyfill.prototype['then'] = PromisePolyfill.prototype.then;\n // PromisePolyfill.prototype['finally'] = PromisePolyfill.prototype.finally;\n PromisePolyfill['all'] = PromisePolyfill.all;\n PromisePolyfill['race'] = PromisePolyfill.race;\n PromisePolyfill['resolve'] = PromisePolyfill.resolve;\n PromisePolyfill['reject'] = PromisePolyfill.reject;\n /* eslint-enable */\n\n if (!window.setImmediate) {\n // approach copied from https://github.com/Polymer/polymer/blob/v3.0.2/lib/utils/async.js\n const node = document.createTextNode('');\n const twiddleNode = function twiddleNode() {\n node.textContent = node.textContent.length > 0 ? '' : 'a';\n };\n /** @type {!Array<function():void>} */\n const callbacks = [];\n (new MutationObserver(() => {\n const len = callbacks.length;\n for (let i = 0; i < len; i++) {\n callbacks[i]();\n }\n callbacks.splice(0, len);\n }).observe(node, {characterData: true}));\n\n // set _immediateFn to a MutationObserver for close-to-native timing\n PromisePolyfill._immediateFn = (fn) => {\n callbacks.push(fn);\n twiddleNode();\n }\n }\n}","export default function(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n return constructor.resolve(callback()).then(function() {\n return constructor.reject(reason);\n });\n }\n );\n}\n","\"use strict\";\n\nvar globalSymbolRegistryList = {};\n\n// Aliases & Helpers\nvar make = Object.create;\nvar defProps = Object.defineProperties;\nvar defProp = Object.defineProperty;\nvar defValue = function (value) {\n var opts = arguments[1] === undefined ? {} : arguments[1];\n return {\n value: value,\n configurable: !!opts.c,\n writable: !!opts.w,\n enumerable: !!opts.e\n };\n};\nvar isSymbol = function (symbol) {\n return symbol && symbol[xSymbol.toStringTag] === \"Symbol\";\n};\n\nvar supportsAccessors = undefined;\ntry {\n var x = defProp({}, \"y\", { get: function () {\n return 1;\n } });\n supportsAccessors = x.y === 1;\n} catch (e) {\n supportsAccessors = false;\n}\n\nvar id = {};\nvar uid = function (desc) {\n desc = String(desc);\n var x = \"\";\n var i = 0;\n while (id[desc + x]) {\n x = i += 1;\n }\n id[desc + x] = 1;\n\n var tag = \"Symbol(\" + desc + \"\" + x + \")\";\n\n /* istanbul ignore else */\n if (supportsAccessors) {\n // Make the symbols hidden to pre-es6 code\n defProp(Object.prototype, tag, {\n get: undefined,\n set: function (value) {\n defProp(this, tag, defValue(value, { c: true, w: true }));\n },\n configurable: true,\n enumerable: false\n });\n }\n\n return tag;\n};\n\n// The base symbol\nvar SymbolProto = make(null);\n\n// 19.4.1.1\nfunction xSymbol(descString) {\n if (this instanceof xSymbol) {\n throw new TypeError(\"Symbol is not a constructor\");\n }\n\n descString = descString === undefined ? \"\" : String(descString);\n\n var tag = uid(descString);\n\n /* istanbul ignore next */\n if (!supportsAccessors) {\n return tag;\n }\n\n return make(SymbolProto, {\n __description__: defValue(descString),\n __tag__: defValue(tag)\n });\n}\n\ndefProps(xSymbol, {\n // 19.4.2.1\n \"for\": defValue(function (key) {\n var stringKey = String(key);\n\n if (globalSymbolRegistryList[stringKey]) {\n return globalSymbolRegistryList[stringKey];\n }\n\n var symbol = xSymbol(stringKey);\n globalSymbolRegistryList[stringKey] = symbol;\n\n return symbol;\n }),\n\n // 19.4.2.5\n keyFor: defValue(function (sym) {\n if (supportsAccessors && !isSymbol(sym)) {\n throw new TypeError(\"\" + sym + \" is not a symbol\");\n }\n\n for (var key in globalSymbolRegistryList) {\n if (globalSymbolRegistryList[key] === sym) {\n return supportsAccessors ? globalSymbolRegistryList[key].__description__ : globalSymbolRegistryList[key].substr(7, globalSymbolRegistryList[key].length - 8);\n }\n }\n })\n});\n\n// 6.1.5.1\ndefProps(xSymbol, {\n hasInstance: defValue(xSymbol(\"hasInstance\")),\n isConcatSpreadable: defValue(xSymbol(\"isConcatSpreadable\")),\n iterator: defValue(xSymbol(\"iterator\")),\n match: defValue(xSymbol(\"match\")),\n replace: defValue(xSymbol(\"replace\")),\n search: defValue(xSymbol(\"search\")),\n species: defValue(xSymbol(\"species\")),\n split: defValue(xSymbol(\"split\")),\n toPrimitive: defValue(xSymbol(\"toPrimitive\")),\n toStringTag: defValue(xSymbol(\"toStringTag\")),\n unscopables: defValue(xSymbol(\"unscopables\"))\n});\n\n// 19.4.3\ndefProps(SymbolProto, {\n constructor: defValue(xSymbol),\n\n // 19.4.3.2\n toString: defValue(function () {\n return this.__tag__;\n }),\n\n // 19.4.3.3\n valueOf: defValue(function () {\n return \"Symbol(\" + this.__description__ + \")\";\n })\n});\n\n// 19.4.3.5\n/* istanbul ignore else */\nif (supportsAccessors) {\n defProp(SymbolProto, xSymbol.toStringTag, defValue(\"Symbol\", { c: true }));\n}\n\nmodule.exports = typeof Symbol === \"function\" ? Symbol : xSymbol;\n\n","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n\n// Establish scope.\nwindow['WebComponents'] = window['WebComponents'] || {'flags':{}};\n\n// loading script\nlet file = 'webcomponents-bundle';\nlet script = document.querySelector('script[src*=\"' + file + '\"]');\nlet flagMatcher = /wc-(.+)/;\n\n// Flags. Convert url arguments to flags\nlet flags = {};\nif (!flags['noOpts']) {\n // from url\n location.search.slice(1).split('&').forEach(function(option) {\n let parts = option.split('=');\n let match;\n if (parts[0] && (match = parts[0].match(flagMatcher))) {\n flags[match[1]] = parts[1] || true;\n }\n });\n // from script\n if (script) {\n for (let i=0, a; (a=script.attributes[i]); i++) {\n if (a.name !== 'src') {\n flags[a.name] = a.value || true;\n }\n }\n }\n // log flags\n if (flags['log'] && flags['log']['split']) {\n let parts = flags['log'].split(',');\n flags['log'] = {};\n parts.forEach(function(f) {\n flags['log'][f] = true;\n });\n } else {\n flags['log'] = {};\n }\n}\n\n// exports\nwindow['WebComponents']['flags'] = flags;\nlet forceShady = flags['shadydom'];\nif (forceShady) {\n window['ShadyDOM'] = window['ShadyDOM'] || {};\n window['ShadyDOM']['force'] = forceShady;\n}\n\nlet forceCE = flags['register'] || flags['ce'];\nif (forceCE && window['customElements']) {\n window['customElements']['forcePolyfill'] = forceCE;\n}","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n\nexport class ShadyData {\n constructor() {\n /** @type {ShadowRoot} */\n this.root = null;\n /** @type {ShadowRoot} */\n this.publicRoot = null;\n this.dirty = false;\n this.observer = null;\n /** @type {Array<Node>} */\n this.assignedNodes = null;\n /** @type {Element} */\n this.assignedSlot = null;\n /** @type {Array<Node>} */\n this._previouslyAssignedNodes = null;\n /** @type {Element} */\n this._prevAssignedSlot = null;\n /** @type {Array<Node>} */\n this.flattenedNodes = null;\n this.ownerShadyRoot = undefined;\n /** @type {Node|undefined} */\n this.parentNode = undefined;\n /** @type {Node|undefined} */\n this.firstChild = undefined;\n /** @type {Node|undefined} */\n this.lastChild = undefined;\n /** @type {Node|undefined} */\n this.previousSibling = undefined;\n /** @type {Node|undefined} */\n this.nextSibling = undefined;\n /** @type {Array<Node>|undefined} */\n this.childNodes = undefined;\n this.__outsideAccessors = false;\n this.__insideAccessors = false;\n this.__onCallbackListeners = {};\n }\n\n toJSON() {\n return {};\n }\n}\n\nexport function ensureShadyDataForNode(node) {\n if (!node.__shady) {\n node.__shady = new ShadyData();\n }\n return node.__shady;\n}\n\nexport function shadyDataForNode(node) {\n return node && node.__shady;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport {shadyDataForNode} from './shady-data.js';\n\nexport let settings = window['ShadyDOM'] || {};\n\nsettings.hasNativeShadowDOM = Boolean(Element.prototype.attachShadow && Node.prototype.getRootNode);\n\nlet desc = Object.getOwnPropertyDescriptor(Node.prototype, 'firstChild');\n\nsettings.hasDescriptors = Boolean(desc && desc.configurable && desc.get);\nsettings.inUse = settings['force'] || !settings.hasNativeShadowDOM;\n\n// Default to using native accessors (instead of treewalker) only for\n// IE/Edge where they are faster.\nconst IS_IE = navigator.userAgent.match('Trident');\nconst IS_EDGE = navigator.userAgent.match('Edge');\nif (settings.useNativeAccessors === undefined) {\n settings.useNativeAccessors = settings.hasDescriptors && (IS_IE || IS_EDGE);\n}\n\nexport function isTrackingLogicalChildNodes(node) {\n const nodeData = shadyDataForNode(node);\n return (nodeData && nodeData.firstChild !== undefined);\n}\n\nexport function isShadyRoot(obj) {\n return Boolean(obj._localName === 'ShadyRoot');\n}\n\nexport function ownerShadyRootForNode(node) {\n let root = node.getRootNode();\n if (isShadyRoot(root)) {\n return root;\n }\n}\n\nlet p = Element.prototype;\nlet matches = p.matches || p.matchesSelector ||\n p.mozMatchesSelector || p.msMatchesSelector ||\n p.oMatchesSelector || p.webkitMatchesSelector;\n\nexport function matchesSelector(element, selector) {\n return matches.call(element, selector);\n}\n\nfunction copyOwnProperty(name, source, target) {\n let pd = Object.getOwnPropertyDescriptor(source, name);\n if (pd) {\n Object.defineProperty(target, name, pd);\n }\n}\n\nexport function extend(target, source) {\n if (target && source) {\n let n$ = Object.getOwnPropertyNames(source);\n for (let i=0, n; (i<n$.length) && (n=n$[i]); i++) {\n copyOwnProperty(n, source, target);\n }\n }\n return target || source;\n}\n\nexport function extendAll(target, ...sources) {\n for (let i=0; i < sources.length; i++) {\n extend(target, sources[i]);\n }\n return target;\n}\n\nexport function mixin(target, source) {\n for (var i in source) {\n target[i] = source[i];\n }\n return target;\n}\n\nexport function patchPrototype(obj, mixin) {\n let proto = Object.getPrototypeOf(obj);\n if (!proto.hasOwnProperty('__patchProto')) {\n let patchProto = Object.create(proto);\n patchProto.__sourceProto = proto;\n extend(patchProto, mixin);\n proto['__patchProto'] = patchProto;\n }\n // old browsers don't have setPrototypeOf\n obj.__proto__ = proto['__patchProto'];\n}\n\n\nlet twiddle = document.createTextNode('');\nlet content = 0;\nlet queue = [];\nnew MutationObserver(() => {\n while (queue.length) {\n // catch errors in user code...\n try {\n queue.shift()();\n } catch(e) {\n // enqueue another record and throw\n twiddle.textContent = content++;\n throw(e);\n }\n }\n}).observe(twiddle, {characterData: true});\n\n// use MutationObserver to get microtask async timing.\nexport function microtask(callback) {\n queue.push(callback);\n twiddle.textContent = content++;\n}\n\nexport const hasDocumentContains = Boolean(document.contains);\n\nexport function contains(container, node) {\n while (node) {\n if (node == container) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\nfunction getNodeHTMLCollectionName(node) {\n return node.getAttribute('id') || node.getAttribute('name');\n}\n\nfunction isValidHTMLCollectionName(name) {\n return name !== 'length' && isNaN(name);\n}\n\nexport function createPolyfilledHTMLCollection(nodes) {\n // Note: loop in reverse so that the first named item matches the named property\n for (let l = nodes.length - 1; l >= 0; l--) {\n const node = nodes[l];\n const name = getNodeHTMLCollectionName(node);\n\n if (name && isValidHTMLCollectionName(name)) {\n nodes[name] = node;\n }\n }\n nodes.item = function(index) {\n return nodes[index];\n }\n nodes.namedItem = function(name) {\n if (isValidHTMLCollectionName(name) && nodes[name]) {\n return nodes[name];\n }\n\n for (const node of nodes) {\n const nodeName = getNodeHTMLCollectionName(node);\n\n if (nodeName == name) {\n return node;\n }\n }\n\n return null;\n };\n return nodes;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\n\n// render enqueuer/flusher\nlet flushList = [];\nlet scheduled;\nexport function enqueue(callback) {\n if (!scheduled) {\n scheduled = true;\n utils.microtask(flush);\n }\n flushList.push(callback);\n}\n\nexport function flush() {\n scheduled = false;\n let didFlush = Boolean(flushList.length);\n while (flushList.length) {\n flushList.shift()();\n }\n return didFlush;\n}\n\nflush['list'] = flushList;\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {ensureShadyDataForNode} from './shady-data.js';\n\nclass AsyncObserver {\n\n constructor() {\n this._scheduled = false;\n this.addedNodes = [];\n this.removedNodes = [];\n this.callbacks = new Set();\n }\n\n schedule() {\n if (!this._scheduled) {\n this._scheduled = true;\n utils.microtask(() => {\n this.flush();\n });\n }\n }\n\n flush() {\n if (this._scheduled) {\n this._scheduled = false;\n let mutations = this.takeRecords();\n if (mutations.length) {\n this.callbacks.forEach(function(cb) {\n cb(mutations);\n });\n }\n }\n }\n\n takeRecords() {\n if (this.addedNodes.length || this.removedNodes.length) {\n let mutations = [{\n addedNodes: this.addedNodes,\n removedNodes: this.removedNodes\n }];\n this.addedNodes = [];\n this.removedNodes = [];\n return mutations;\n }\n return [];\n }\n\n}\n\n// TODO(sorvell): consider instead polyfilling MutationObserver\n// directly so that users do not have to fork their code.\n// Supporting the entire api may be challenging: e.g. filtering out\n// removed nodes in the wrong scope and seeing non-distributing\n// subtree child mutations.\nexport let observeChildren = function(node, callback) {\n const sd = ensureShadyDataForNode(node);\n if (!sd.observer) {\n sd.observer = new AsyncObserver();\n }\n sd.observer.callbacks.add(callback);\n let observer = sd.observer;\n return {\n _callback: callback,\n _observer: observer,\n _node: node,\n takeRecords() {\n return observer.takeRecords()\n }\n };\n}\n\nexport let unobserveChildren = function(handle) {\n let observer = handle && handle._observer;\n if (observer) {\n observer.callbacks.delete(handle._callback);\n if (!observer.callbacks.size) {\n ensureShadyDataForNode(handle._node).observer = null;\n }\n }\n}\n\nexport function filterMutations(mutations, target) {\n /** @const {Node} */\n const targetRootNode = target.getRootNode();\n return mutations.map(function(mutation) {\n /** @const {boolean} */\n const mutationInScope = (targetRootNode === mutation.target.getRootNode());\n if (mutationInScope && mutation.addedNodes) {\n let nodes = Array.from(mutation.addedNodes).filter(function(n) {\n return (targetRootNode === n.getRootNode());\n });\n if (nodes.length) {\n mutation = Object.create(mutation);\n Object.defineProperty(mutation, 'addedNodes', {\n value: nodes,\n configurable: true\n });\n return mutation;\n }\n } else if (mutationInScope) {\n return mutation;\n }\n }).filter(function(m) { return m});\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport let appendChild = Element.prototype.appendChild;\nexport let insertBefore = Element.prototype.insertBefore;\nexport let replaceChild = Element.prototype.replaceChild;\nexport let removeChild = Element.prototype.removeChild;\nexport let setAttribute = Element.prototype.setAttribute;\nexport let removeAttribute = Element.prototype.removeAttribute;\nexport let cloneNode = Element.prototype.cloneNode;\nexport let importNode = Document.prototype.importNode;\nexport let addEventListener = Element.prototype.addEventListener;\nexport let removeEventListener = Element.prototype.removeEventListener;\nexport let windowAddEventListener = Window.prototype.addEventListener;\nexport let windowRemoveEventListener = Window.prototype.removeEventListener;\nexport let dispatchEvent = Element.prototype.dispatchEvent;\nexport let contains = Node.prototype.contains || HTMLElement.prototype.contains;\nexport let getElementById = Document.prototype.getElementById;\nexport let elementQuerySelector = Element.prototype.querySelector;\nexport let fragmentQuerySelector = DocumentFragment.prototype.querySelector;\nexport let documentQuerySelector = Document.prototype.querySelector;\nexport let querySelector = /** @this {Element|Document|DocumentFragment} */ function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelector.call(/** @type {Element} */ (this), selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelector.call(/** @type {Document} */ (this), selector);\n default:\n return fragmentQuerySelector.call(this, selector);\n }\n};\nexport let elementQuerySelectorAll = Element.prototype.querySelectorAll;\nexport let fragmentQuerySelectorAll = DocumentFragment.prototype.querySelectorAll;\nexport let documentQuerySelectorAll = Document.prototype.querySelectorAll;\nexport let querySelectorAll = /** @this {Element|Document|DocumentFragment} */ function(selector) {\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n return elementQuerySelectorAll.call(/** @type {Element} */ (this), selector);\n case Node.DOCUMENT_NODE:\n return documentQuerySelectorAll.call(/** @type {Document} */ (this), selector);\n default:\n return fragmentQuerySelectorAll.call(this, selector);\n }\n};\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n// Cribbed from ShadowDOM polyfill\n// https://github.com/webcomponents/webcomponentsjs/blob/master/src/ShadowDOM/wrappers/HTMLElement.js#L28\n/////////////////////////////////////////////////////////////////////////////\n// innerHTML and outerHTML\n\n// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#escapingString\nlet escapeAttrRegExp = /[&\\u00A0\"]/g;\nlet escapeDataRegExp = /[&\\u00A0<>]/g;\n\nfunction escapeReplace(c) {\n switch (c) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case '\\u00A0':\n return '&nbsp;';\n }\n}\n\nfunction escapeAttr(s) {\n return s.replace(escapeAttrRegExp, escapeReplace);\n}\n\nfunction escapeData(s) {\n return s.replace(escapeDataRegExp, escapeReplace);\n}\n\nfunction makeSet(arr) {\n let set = {};\n for (let i = 0; i < arr.length; i++) {\n set[arr[i]] = true;\n }\n return set;\n}\n\n// http://www.whatwg.org/specs/web-apps/current-work/#void-elements\nlet voidElements = makeSet([\n 'area',\n 'base',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]);\n\nlet plaintextParents = makeSet([\n 'style',\n 'script',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'plaintext',\n 'noscript'\n]);\n\n/**\n * @param {Node} node\n * @param {Node} parentNode\n * @param {Function=} callback\n */\nexport function getOuterHTML(node, parentNode, callback) {\n switch (node.nodeType) {\n case Node.ELEMENT_NODE: {\n let tagName = node.localName;\n let s = '<' + tagName;\n let attrs = node.attributes;\n for (let i = 0, attr; (attr = attrs[i]); i++) {\n s += ' ' + attr.name + '=\"' + escapeAttr(attr.value) + '\"';\n }\n s += '>';\n if (voidElements[tagName]) {\n return s;\n }\n return s + getInnerHTML(node, callback) + '</' + tagName + '>';\n }\n case Node.TEXT_NODE: {\n let data = /** @type {Text} */ (node).data;\n if (parentNode && plaintextParents[parentNode.localName]) {\n return data;\n }\n return escapeData(data);\n }\n case Node.COMMENT_NODE: {\n return '<!--' + /** @type {Comment} */ (node).data + '-->';\n }\n default: {\n window.console.error(node);\n throw new Error('not implemented');\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Function=} callback\n */\nexport function getInnerHTML(node, callback) {\n if (node.localName === 'template') {\n node = /** @type {HTMLTemplateElement} */ (node).content;\n }\n let s = '';\n let c$ = callback ? callback(node) : node.childNodes;\n for (let i=0, l=c$.length, child; (i<l) && (child=c$[i]); i++) {\n s += getOuterHTML(child, node, callback);\n }\n return s;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {getInnerHTML} from './innerHTML.js';\nimport * as utils from './utils.js';\n\nlet nodeWalker = document.createTreeWalker(document, NodeFilter.SHOW_ALL,\n null, false);\n\nlet elementWalker = document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT,\n null, false);\n\nexport function parentNode(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.parentNode();\n}\n\nexport function firstChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.firstChild();\n}\n\nexport function lastChild(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.lastChild();\n}\n\nexport function previousSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.previousSibling();\n}\n\nexport function nextSibling(node) {\n nodeWalker.currentNode = node;\n return nodeWalker.nextSibling();\n}\n\nexport function childNodes(node) {\n let nodes = [];\n nodeWalker.currentNode = node;\n let n = nodeWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = nodeWalker.nextSibling();\n }\n return nodes;\n}\n\nexport function parentElement(node) {\n elementWalker.currentNode = node;\n return elementWalker.parentNode();\n}\n\nexport function firstElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.firstChild();\n}\n\nexport function lastElementChild(node) {\n elementWalker.currentNode = node;\n return elementWalker.lastChild();\n}\n\nexport function previousElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.previousSibling();\n}\n\nexport function nextElementSibling(node) {\n elementWalker.currentNode = node;\n return elementWalker.nextSibling();\n}\n\nexport function children(node) {\n let nodes = [];\n elementWalker.currentNode = node;\n let n = elementWalker.firstChild();\n while (n) {\n nodes.push(n);\n n = elementWalker.nextSibling();\n }\n return utils.createPolyfilledHTMLCollection(nodes);\n}\n\nexport function innerHTML(node) {\n return getInnerHTML(node, (n) => childNodes(n));\n}\n\nexport function textContent(node) {\n /* eslint-disable no-case-declarations */\n switch (node.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n let textWalker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT,\n null, false);\n let content = '', n;\n while ( (n = textWalker.nextNode()) ) {\n // TODO(sorvell): can't use textContent since we patch it on Node.prototype!\n // However, should probably patch it only on element.\n content += n.nodeValue;\n }\n return content;\n default:\n return node.nodeValue;\n }\n /* eslint-enable */\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\nimport * as utils from './utils.js';\n\nconst hasDescriptors = utils.settings.hasDescriptors;\n\n// Find descriptor on the \"lowest\" native prototype. Safe as these are not\n// overridden and we call these on nodes.\nconst nativeProtos = [Node.prototype, Element.prototype, HTMLElement.prototype];\n// note, avoid Array.find for IE11 compat.\nfunction findNativeProtoWithDescriptor(name) {\n for (let i=0; i < nativeProtos.length; i++) {\n const proto = nativeProtos[i];\n if (proto.hasOwnProperty(name)) {\n return proto;\n }\n }\n}\nfunction findNodeDescriptor(name) {\n const proto = findNativeProtoWithDescriptor(name);\n if (!proto) {\n throw Error(`Could not find descriptor for ${name}`);\n }\n return Object.getOwnPropertyDescriptor(proto, name);\n}\n\nexport const nodeAccessors = hasDescriptors ? {\n parentNode: findNodeDescriptor('parentNode'),\n firstChild: findNodeDescriptor('firstChild'),\n lastChild: findNodeDescriptor('lastChild'),\n previousSibling: findNodeDescriptor('previousSibling'),\n nextSibling: findNodeDescriptor('nextSibling'),\n childNodes: findNodeDescriptor('childNodes'),\n parentElement: findNodeDescriptor('parentElement'),\n previousElementSibling: findNodeDescriptor('previousElementSibling'),\n nextElementSibling: findNodeDescriptor('nextElementSibling'),\n innerHTML: findNodeDescriptor('innerHTML'),\n textContent: findNodeDescriptor('textContent'),\n firstElementChild: findNodeDescriptor('firstElementChild'),\n lastElementChild: findNodeDescriptor('lastElementChild'),\n children: findNodeDescriptor('children'),\n} : {};\n\nexport const fragmentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n DocumentFragment.prototype, 'children')\n} : {};\n\nexport const documentAccessors = hasDescriptors ? {\n firstElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'firstElementChild'),\n lastElementChild: Object.getOwnPropertyDescriptor(\n Document.prototype, 'lastElementChild'),\n children: Object.getOwnPropertyDescriptor(\n Document.prototype, 'children')\n} : {};\n\nexport function parentNode(node) {\n return nodeAccessors.parentNode.get.call(node);\n}\n\nexport function firstChild(node) {\n return nodeAccessors.firstChild.get.call(node);\n}\n\nexport function lastChild(node) {\n return nodeAccessors.lastChild.get.call(node);\n}\n\nexport function previousSibling(node) {\n return nodeAccessors.previousSibling.get.call(node);\n}\n\nexport function nextSibling(node) {\n return nodeAccessors.nextSibling.get.call(node);\n}\n\nexport function childNodes(node) {\n return Array.prototype.slice.call(nodeAccessors.childNodes.get.call(node));\n}\n\nexport function parentElement(node) {\n return nodeAccessors.parentElement.get.call(node);\n}\n\nexport function previousElementSibling(node) {\n return nodeAccessors.previousElementSibling.get.call(node);\n}\n\nexport function nextElementSibling(node) {\n return nodeAccessors.nextElementSibling.get.call(node);\n}\n\nexport function innerHTML(node) {\n return nodeAccessors.innerHTML.get.call(node);\n}\n\nexport function textContent(node) {\n return nodeAccessors.textContent.get.call(node);\n}\n\nexport function children(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.children.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.children.get.call(node);\n default:\n return nodeAccessors.children.get.call(node);\n }\n}\n\nexport function firstElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.firstElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.firstElementChild.get.call(node);\n default:\n return nodeAccessors.firstElementChild.get.call(node);\n }\n}\n\nexport function lastElementChild(node) {\n switch (node.nodeType) {\n case Node.DOCUMENT_FRAGMENT_NODE:\n return fragmentAccessors.lastElementChild.get.call(node);\n case Node.DOCUMENT_NODE:\n return documentAccessors.lastElementChild.get.call(node);\n default:\n return nodeAccessors.lastElementChild.get.call(node);\n }\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as nativeTreeWalker from './native-tree-walker.js';\nimport * as nativeTreeAccessors from './native-tree-accessors.js';\nimport * as utils from './utils.js';\n\nexport const accessors = utils.settings.useNativeAccessors ?\n nativeTreeAccessors : nativeTreeWalker;","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {getInnerHTML} from './innerHTML.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {nodeAccessors as nativeAccessors} from './native-tree-accessors.js';\nimport {contains as nativeContains} from './native-methods.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nfunction clearNode(node) {\n while (node.firstChild) {\n node.removeChild(node.firstChild);\n }\n}\n\nconst hasDescriptors = utils.settings.hasDescriptors;\nconst inertDoc = document.implementation.createHTMLDocument('inert');\n\nconst nativeIsConnectedAccessors =\n/** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Node.prototype, 'isConnected')\n);\n\nconst nativeIsConnected = nativeIsConnectedAccessors && nativeIsConnectedAccessors.get;\n\nconst nativeActiveElementDescriptor =\n /** @type {ObjectPropertyDescriptor} */(\n Object.getOwnPropertyDescriptor(Document.prototype, 'activeElement')\n );\nfunction getDocumentActiveElement() {\n if (nativeActiveElementDescriptor && nativeActiveElementDescriptor.get) {\n return nativeActiveElementDescriptor.get.call(document);\n } else if (!utils.settings.hasDescriptors) {\n return document.activeElement;\n }\n}\n\nfunction activeElementForNode(node) {\n let active = getDocumentActiveElement();\n // In IE11, activeElement might be an empty object if the document is\n // contained in an iframe.\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/10998788/\n if (!active || !active.nodeType) {\n return null;\n }\n let isShadyRoot = !!(utils.isShadyRoot(node));\n if (node !== document) {\n // If this node isn't a document or shady root, then it doesn't have\n // an active element.\n if (!isShadyRoot) {\n return null;\n }\n // If this shady root's host is the active element or the active\n // element is not a descendant of the host (in the composed tree),\n // then it doesn't have an active element.\n if (node.host === active ||\n !nativeContains.call(node.host, active)) {\n return null;\n }\n }\n // This node is either the document or a shady root of which the active\n // element is a (composed) descendant of its host; iterate upwards to\n // find the active element's most shallow host within it.\n let activeRoot = utils.ownerShadyRootForNode(active);\n while (activeRoot && activeRoot !== node) {\n active = activeRoot.host;\n activeRoot = utils.ownerShadyRootForNode(active);\n }\n if (node === document) {\n // This node is the document, so activeRoot should be null.\n return activeRoot ? null : active;\n } else {\n // This node is a non-document shady root, and it should be\n // activeRoot.\n return activeRoot === node ? active : null;\n }\n}\n\nlet OutsideAccessors = {\n\n parentElement: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n let l = nodeData && nodeData.parentNode;\n if (l && l.nodeType !== Node.ELEMENT_NODE) {\n l = null;\n }\n return l !== undefined ? l : nativeTree.parentElement(this);\n },\n configurable: true\n },\n\n parentNode: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.parentNode;\n return l !== undefined ? l : nativeTree.parentNode(this);\n },\n configurable: true\n },\n\n nextSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.nextSibling;\n return l !== undefined ? l : nativeTree.nextSibling(this);\n },\n configurable: true\n },\n\n previousSibling: {\n /** @this {Node} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.previousSibling;\n return l !== undefined ? l : nativeTree.previousSibling(this);\n },\n configurable: true\n },\n\n // fragment, element, document\n nextElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.nextSibling !== undefined) {\n let n = this.nextSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.nextElementSibling(this);\n }\n },\n configurable: true\n },\n\n previousElementSibling: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.previousSibling !== undefined) {\n let n = this.previousSibling;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.previousElementSibling(this);\n }\n },\n configurable: true\n }\n\n};\n\nexport const ClassNameAccessor = {\n className: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return this.getAttribute('class') || '';\n },\n /**\n * @this {HTMLElement}\n */\n set(value) {\n this.setAttribute('class', value);\n },\n configurable: true\n }\n}\n\nexport const IsConnectedAccessor = {\n\n isConnected: {\n /**\n * @this {Node}\n */\n get() {\n if (nativeIsConnected && nativeIsConnected.call(this)) {\n return true;\n }\n if (this.nodeType == Node.DOCUMENT_FRAGMENT_NODE) {\n return false;\n }\n // Fast path for distributed nodes.\n const ownerDocument = this.ownerDocument;\n if (utils.hasDocumentContains) {\n if (nativeContains.call(ownerDocument, this)) {\n return true;\n }\n } else if (ownerDocument.documentElement &&\n nativeContains.call(ownerDocument.documentElement, this)) {\n return true;\n }\n // Slow path for non-distributed nodes.\n let node = this;\n while (node && !(node instanceof Document)) {\n node = node.parentNode || (utils.isShadyRoot(node) ? /** @type {ShadowRoot} */(node).host : undefined);\n }\n return !!(node && node instanceof Document);\n },\n configurable: true\n }\n};\n\nlet InsideAccessors = {\n\n childNodes: {\n /**\n * @this {HTMLElement}\n */\n get() {\n let childNodes;\n if (utils.isTrackingLogicalChildNodes(this)) {\n const nodeData = shadyDataForNode(this);\n if (!nodeData.childNodes) {\n nodeData.childNodes = [];\n for (let n=this.firstChild; n; n=n.nextSibling) {\n nodeData.childNodes.push(n);\n }\n }\n childNodes = nodeData.childNodes;\n } else {\n childNodes = nativeTree.childNodes(this);\n }\n childNodes.item = function(index) {\n return childNodes[index];\n }\n return childNodes;\n },\n configurable: true\n },\n\n childElementCount: {\n /** @this {HTMLElement} */\n get() {\n return this.children.length;\n },\n configurable: true\n },\n\n firstChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.firstChild;\n return l !== undefined ? l : nativeTree.firstChild(this);\n },\n configurable: true\n },\n\n lastChild: {\n /** @this {HTMLElement} */\n get() {\n const nodeData = shadyDataForNode(this);\n const l = nodeData && nodeData.lastChild;\n return l !== undefined ? l : nativeTree.lastChild(this);\n },\n configurable: true\n },\n\n textContent: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n let tc = [];\n for (let i = 0, cn = this.childNodes, c; (c = cn[i]); i++) {\n if (c.nodeType !== Node.COMMENT_NODE) {\n tc.push(c.textContent);\n }\n }\n return tc.join('');\n } else {\n return nativeTree.textContent(this);\n }\n },\n /**\n * @this {HTMLElement}\n * @param {string} text\n */\n set(text) {\n if (typeof text === 'undefined' || text === null) {\n text = ''\n }\n switch (this.nodeType) {\n case Node.ELEMENT_NODE:\n case Node.DOCUMENT_FRAGMENT_NODE:\n if (!utils.isTrackingLogicalChildNodes(this) && hasDescriptors) {\n // may be removing a nested slot but fast path if we know we are not.\n const firstChild = this.firstChild;\n if (firstChild != this.lastChild ||\n (firstChild && firstChild.nodeType != Node.TEXT_NODE)) {\n clearNode(this);\n }\n nativeAccessors.textContent.set.call(this, text);\n } else {\n clearNode(this);\n // Document fragments must have no childnodes if setting a blank string\n if (text.length > 0 || this.nodeType === Node.ELEMENT_NODE) {\n this.appendChild(document.createTextNode(text));\n }\n }\n break;\n default:\n // TODO(sorvell): can't do this if patch nodeValue.\n this.nodeValue = text;\n break;\n }\n },\n configurable: true\n },\n\n // fragment, element, document\n firstElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.firstChild !== undefined) {\n let n = this.firstChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.nextSibling;\n }\n return n;\n } else {\n return nativeTree.firstElementChild(this);\n }\n },\n configurable: true\n },\n\n lastElementChild: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n if (nodeData && nodeData.lastChild !== undefined) {\n let n = this.lastChild;\n while (n && n.nodeType !== Node.ELEMENT_NODE) {\n n = n.previousSibling;\n }\n return n;\n } else {\n return nativeTree.lastElementChild(this);\n }\n },\n configurable: true\n },\n\n children: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (!utils.isTrackingLogicalChildNodes(this)) {\n return nativeTree.children(this);\n }\n return utils.createPolyfilledHTMLCollection(Array.prototype.filter.call(this.childNodes, function(n) {\n return (n.nodeType === Node.ELEMENT_NODE);\n }));\n },\n configurable: true\n },\n\n // element (HTMLElement on IE11)\n innerHTML: {\n /**\n * @this {HTMLElement}\n */\n get() {\n if (utils.isTrackingLogicalChildNodes(this)) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n return getInnerHTML(content);\n } else {\n return nativeTree.innerHTML(this);\n }\n },\n /**\n * @this {HTMLElement}\n */\n set(text) {\n const content = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(this).content : this;\n clearNode(content);\n const containerName = this.localName || 'div';\n let htmlContainer;\n if (!this.namespaceURI || this.namespaceURI === inertDoc.namespaceURI) {\n htmlContainer = inertDoc.createElement(containerName);\n } else {\n htmlContainer = inertDoc.createElementNS(this.namespaceURI, containerName);\n }\n if (hasDescriptors) {\n nativeAccessors.innerHTML.set.call(htmlContainer, text);\n } else {\n htmlContainer.innerHTML = text;\n }\n const newContent = this.localName === 'template' ?\n /** @type {HTMLTemplateElement} */(htmlContainer).content : htmlContainer;\n while (newContent.firstChild) {\n content.appendChild(newContent.firstChild);\n }\n },\n configurable: true\n }\n\n};\n\n// Note: Can be patched on element prototype on all browsers.\n// Must be patched on instance on browsers that support native Shadow DOM\n// but do not have builtin accessors (old Chrome).\nexport let ShadowRootAccessor = {\n\n shadowRoot: {\n /**\n * @this {HTMLElement}\n */\n get() {\n const nodeData = shadyDataForNode(this);\n return nodeData && nodeData.publicRoot || null;\n },\n configurable: true\n }\n};\n\n// Note: Can be patched on document prototype on browsers with builtin accessors.\n// Must be patched separately on simulated ShadowRoot.\n// Must be patched as `_activeElement` on browsers without builtin accessors.\nexport let ActiveElementAccessor = {\n\n activeElement: {\n /**\n * @this {HTMLElement}\n */\n get() {\n return activeElementForNode(this);\n },\n /**\n * @this {HTMLElement}\n */\n set() {},\n configurable: true\n }\n\n};\n\n// patch a group of descriptors on an object only if it exists or if the `force`\n// argument is true.\n/**\n * @param {!Object} obj\n * @param {!Object} descriptors\n * @param {boolean=} force\n */\nfunction patchAccessorGroup(obj, descriptors, force) {\n for (let p in descriptors) {\n let objDesc = Object.getOwnPropertyDescriptor(obj, p);\n if ((objDesc && objDesc.configurable) ||\n (!objDesc && force)) {\n Object.defineProperty(obj, p, descriptors[p]);\n } else if (force) {\n console.warn('Could not define', p, 'on', obj); // eslint-disable-line no-console\n }\n }\n}\n\n// patch dom accessors on proto where they exist\nexport function patchAccessors(proto) {\n patchAccessorGroup(proto, OutsideAccessors);\n patchAccessorGroup(proto, ClassNameAccessor);\n patchAccessorGroup(proto, InsideAccessors);\n patchAccessorGroup(proto, ActiveElementAccessor);\n}\n\nexport function patchShadowRootAccessors(proto) {\n proto.__proto__ = DocumentFragment.prototype;\n // ensure element descriptors (IE/Edge don't have em)\n patchAccessorGroup(proto, OutsideAccessors, true);\n patchAccessorGroup(proto, InsideAccessors, true);\n patchAccessorGroup(proto, ActiveElementAccessor, true);\n // Ensure native properties are all safely wrapped since ShadowRoot is not an\n // actual DocumentFragment instance.\n Object.defineProperties(proto, {\n nodeType: {\n value: Node.DOCUMENT_FRAGMENT_NODE,\n configurable: true\n },\n nodeName: {\n value: '#document-fragment',\n configurable: true\n },\n nodeValue: {\n value: null,\n configurable: true\n }\n });\n // make undefined\n [\n 'localName',\n 'namespaceURI',\n 'prefix'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n value: undefined,\n configurable: true\n });\n });\n // defer properties to host\n [\n 'ownerDocument',\n 'baseURI',\n 'isConnected'\n ].forEach((prop) => {\n Object.defineProperty(proto, prop, {\n get() {\n return this.host[prop];\n },\n configurable: true\n });\n });\n}\n\n// ensure an element has patched \"outside\" accessors; no-op when not needed\nexport let patchOutsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__outsideAccessors) {\n sd.__outsideAccessors = true;\n patchAccessorGroup(element, OutsideAccessors, true);\n patchAccessorGroup(element, ClassNameAccessor, true);\n }\n }\n\n// ensure an element has patched \"inside\" accessors; no-op when not needed\nexport let patchInsideElementAccessors = utils.settings.hasDescriptors ?\n function() {} : function(element) {\n const sd = ensureShadyDataForNode(element);\n if (!sd.__insideAccessors) {\n patchAccessorGroup(element, InsideAccessors, true);\n patchAccessorGroup(element, ShadowRootAccessor, true);\n }\n }\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {childNodes} = accessors;\n\nexport function recordInsertBefore(node, container, ref_node) {\n patchInsideElementAccessors(container);\n const containerData = ensureShadyDataForNode(container);\n if (containerData.firstChild !== undefined) {\n containerData.childNodes = null;\n }\n // handle document fragments\n if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let c$ = node.childNodes;\n for (let i=0; i < c$.length; i++) {\n linkNode(c$[i], container, ref_node);\n }\n // cleanup logical dom in doc fragment.\n const nodeData = ensureShadyDataForNode(node);\n let resetTo = (nodeData.firstChild !== undefined) ? null : undefined;\n nodeData.firstChild = nodeData.lastChild = resetTo;\n nodeData.childNodes = resetTo;\n } else {\n linkNode(node, container, ref_node);\n }\n}\n\nfunction linkNode(node, container, ref_node) {\n patchOutsideElementAccessors(node);\n ref_node = ref_node || null;\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n const ref_nodeData = ref_node ? ensureShadyDataForNode(ref_node) : null;\n // update ref_node.previousSibling <-> node\n nodeData.previousSibling = ref_node ? ref_nodeData.previousSibling :\n container.lastChild;\n let psd = shadyDataForNode(nodeData.previousSibling);\n if (psd) {\n psd.nextSibling = node;\n }\n // update node <-> ref_node\n let nsd = shadyDataForNode(nodeData.nextSibling = ref_node);\n if (nsd) {\n nsd.previousSibling = node;\n }\n // update node <-> container\n nodeData.parentNode = container;\n if (ref_node) {\n if (ref_node === containerData.firstChild) {\n containerData.firstChild = node;\n }\n } else {\n containerData.lastChild = node;\n if (!containerData.firstChild) {\n containerData.firstChild = node;\n }\n }\n // remove caching of childNodes\n containerData.childNodes = null;\n}\n\nexport function recordRemoveChild(node, container) {\n const nodeData = ensureShadyDataForNode(node);\n const containerData = ensureShadyDataForNode(container);\n if (node === containerData.firstChild) {\n containerData.firstChild = nodeData.nextSibling;\n }\n if (node === containerData.lastChild) {\n containerData.lastChild = nodeData.previousSibling;\n }\n let p = nodeData.previousSibling;\n let n = nodeData.nextSibling;\n if (p) {\n ensureShadyDataForNode(p).nextSibling = n;\n }\n if (n) {\n ensureShadyDataForNode(n).previousSibling = p;\n }\n // When an element is removed, logical data is no longer tracked.\n // Explicitly set `undefined` here to indicate this. This is disginguished\n // from `null` which is set if info is null.\n nodeData.parentNode = nodeData.previousSibling =\n nodeData.nextSibling = undefined;\n if (containerData.childNodes !== undefined) {\n // remove caching of childNodes\n containerData.childNodes = null;\n }\n}\n\n/**\n * @param {!Node} node\n * @param {Array<Node>=} nodes\n */\nfunction recordChildNodes(node, nodes) {\n const nodeData = ensureShadyDataForNode(node);\n if (nodeData.firstChild === undefined) {\n // remove caching of childNodes\n nodeData.childNodes = null;\n const c$ = nodes || childNodes(node);\n nodeData.firstChild = c$[0] || null;\n nodeData.lastChild = c$[c$.length-1] || null;\n patchInsideElementAccessors(node);\n for (let i=0; i<c$.length; i++) {\n const n = c$[i];\n const sd = ensureShadyDataForNode(n);\n sd.parentNode = node;\n sd.nextSibling = c$[i+1] || null;\n sd.previousSibling = c$[i-1] || null;\n patchOutsideElementAccessors(n);\n }\n }\n}\n\nexport {recordChildNodes}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as logicalTree from './logical-tree.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode} = accessors;\n\n// Patched `insertBefore`. Note that all mutations that add nodes are routed\n// here. When a <slot> is added or a node is added to a host with a shadowRoot\n// with a slot, a standard dom `insert` call is aborted and `_asyncRender`\n// is called on the relevant shadowRoot. In all other cases, a standard dom\n// `insert` can be made, but the location and ref_node may need to be changed.\n/**\n * @param {Node} parent\n * @param {Node} node\n * @param {Node=} ref_node\n */\nexport function insertBefore(parent, node, ref_node) {\n if (node === parent) {\n throw Error(`Failed to execute 'appendChild' on 'Node': The new child element contains the parent.`);\n }\n if (ref_node) {\n const refData = shadyDataForNode(ref_node);\n const p = refData && refData.parentNode;\n if ((p !== undefined && p !== parent) ||\n (p === undefined && parentNode(ref_node) !== parent)) {\n throw Error(`Failed to execute 'insertBefore' on 'Node': The node ` +\n `before which the new node is to be inserted is not a child of this node.`);\n }\n }\n if (ref_node === node) {\n return node;\n }\n // remove from existing location\n if (node.parentNode) {\n // NOTE: avoid node.removeChild as this *can* trigger another patched\n // method (e.g. custom elements) and we want only the shady method to run.\n removeChild(node.parentNode, node);\n }\n // add to new parent\n let allowNativeInsert = true;\n let ownerRoot;\n let slotsAdded;\n if (!node['__noInsertionPoint']) {\n ownerRoot = utils.ownerShadyRootForNode(parent);\n slotsAdded = ownerRoot && findContainedSlots(node);\n if (slotsAdded) {\n ownerRoot._addSlots(slotsAdded);\n }\n }\n // if a slot is added, must render containing root.\n if (parent.localName === 'slot' || slotsAdded) {\n ownerRoot = ownerRoot || utils.ownerShadyRootForNode(parent);\n if (ownerRoot) {\n ownerRoot._asyncRender();\n }\n }\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordInsertBefore(node, parent, ref_node);\n // when inserting into a host with a shadowRoot with slot, use\n // `shadowRoot._asyncRender()` via `attach-shadow` module\n const parentData = shadyDataForNode(parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n allowNativeInsert = false;\n // when inserting into a host with shadowRoot with NO slot, do nothing\n // as the node should not be added to composed dome anywhere.\n } else if (parentData.root) {\n allowNativeInsert = false;\n }\n }\n if (allowNativeInsert) {\n // if adding to a shadyRoot, add to host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host : parent;\n // if ref_node, get the ref_node that's actually in composed dom.\n if (ref_node) {\n ref_node = firstComposedNode(ref_node);\n nativeMethods.insertBefore.call(container, node, ref_node);\n } else {\n nativeMethods.appendChild.call(container, node);\n }\n // Since ownerDocument is not patched, it can be incorrect afer this call\n // if the node is physically appended via distribution. This can result\n // in the custom elements polyfill not upgrading the node if it's in an inert doc.\n // We correct this by calling `adoptNode`.\n } else if (node.ownerDocument !== parent.ownerDocument) {\n parent.ownerDocument.adoptNode(node);\n }\n scheduleObserver(parent, node);\n return node;\n}\n\nfunction findContainedSlots(node) {\n let slots;\n if (node.localName === 'slot') {\n slots = [node];\n } else if (node.querySelectorAll) {\n slots = node.querySelectorAll('slot');\n }\n if (slots && slots.length) {\n return slots;\n }\n}\n\n/**\n * Patched `removeChild`. Note that all dom \"removals\" are routed here.\n * Removes the given `node` from the element's `children`.\n * This method also performs dom composition.\n * @param {Node} parent\n * @param {Node} node\n*/\nexport function removeChild(parent, node) {\n if (node.parentNode !== parent) {\n throw Error('The node to be removed is not a child of this node: ' +\n node);\n }\n let preventNativeRemove;\n let ownerRoot = utils.ownerShadyRootForNode(node);\n let removingInsertionPoint;\n const parentData = shadyDataForNode(parent);\n if (utils.isTrackingLogicalChildNodes(parent)) {\n logicalTree.recordRemoveChild(node, parent);\n if (hasShadowRootWithSlot(parent)) {\n parentData.root._asyncRender();\n preventNativeRemove = true;\n }\n }\n removeOwnerShadyRoot(node);\n // if removing slot, must render containing root\n if (ownerRoot) {\n let changeSlotContent = parent && parent.localName === 'slot';\n if (changeSlotContent) {\n preventNativeRemove = true;\n }\n removingInsertionPoint = ownerRoot._removeContainedSlots(node);\n if (removingInsertionPoint || changeSlotContent) {\n ownerRoot._asyncRender();\n }\n }\n if (!preventNativeRemove) {\n // if removing from a shadyRoot, remove form host instead\n let container = utils.isShadyRoot(parent) ?\n /** @type {ShadowRoot} */(parent).host :\n parent;\n // not guaranteed to physically be in container; e.g.\n // (1) if parent has a shadyRoot, element may or may not at distributed\n // location (could be undistributed)\n // (2) if parent is a slot, element may not ben in composed dom\n if (!(parentData.root || node.localName === 'slot') ||\n (container === parentNode(node))) {\n nativeMethods.removeChild.call(container, node);\n }\n }\n scheduleObserver(parent, null, node);\n return node;\n}\n\nfunction removeOwnerShadyRoot(node) {\n // optimization: only reset the tree if node is actually in a root\n if (hasCachedOwnerRoot(node)) {\n let c$ = node.childNodes;\n for (let i=0, l=c$.length, n; (i<l) && (n=c$[i]); i++) {\n removeOwnerShadyRoot(n);\n }\n }\n const nodeData = shadyDataForNode(node);\n if (nodeData) {\n nodeData.ownerShadyRoot = undefined;\n }\n}\n\nfunction hasCachedOwnerRoot(node) {\n const nodeData = shadyDataForNode(node);\n return Boolean(nodeData && nodeData.ownerShadyRoot !== undefined);\n}\n\n/**\n * Finds the first flattened node that is composed in the node's parent.\n * If the given node is a slot, then the first flattened node is returned\n * if it exists, otherwise advance to the node's nextSibling.\n * @param {Node} node within which to find first composed node\n * @returns {Node} first composed node\n */\nfunction firstComposedNode(node) {\n let composed = node;\n if (node && node.localName === 'slot') {\n const nodeData = shadyDataForNode(node);\n const flattened = nodeData && nodeData.flattenedNodes;\n composed = flattened && flattened.length ? flattened[0] :\n firstComposedNode(node.nextSibling);\n }\n return composed;\n}\n\nfunction hasShadowRootWithSlot(node) {\n const nodeData = shadyDataForNode(node);\n let root = nodeData && nodeData.root;\n return (root && root._hasInsertionPoint());\n}\n\n/**\n * Should be called whenever an attribute changes. If the `slot` attribute\n * changes, provokes rendering if necessary. If a `<slot>` element's `name`\n * attribute changes, updates the root's slot map and renders.\n * @param {Node} node\n * @param {string} name\n */\nfunction distributeAttributeChange(node, name) {\n if (name === 'slot') {\n const parent = node.parentNode;\n if (hasShadowRootWithSlot(parent)) {\n shadyDataForNode(parent).root._asyncRender();\n }\n } else if (node.localName === 'slot' && name === 'name') {\n let root = utils.ownerShadyRootForNode(node);\n if (root) {\n root._updateSlotName(node);\n root._asyncRender();\n }\n }\n}\n\n/**\n * @param {Node} node\n * @param {Node=} addedNode\n * @param {Node=} removedNode\n */\nfunction scheduleObserver(node, addedNode, removedNode) {\n const nodeData = shadyDataForNode(node);\n const observer = nodeData && nodeData.observer;\n if (observer) {\n if (addedNode) {\n observer.addedNodes.push(addedNode);\n }\n if (removedNode) {\n observer.removedNodes.push(removedNode);\n }\n observer.schedule();\n }\n}\n\n/**\n * @param {Node} node\n * @param {Object=} options\n */\nexport function getRootNode(node, options) { // eslint-disable-line no-unused-vars\n if (!node || !node.nodeType) {\n return;\n }\n const nodeData = ensureShadyDataForNode(node);\n let root = nodeData.ownerShadyRoot;\n if (root === undefined) {\n if (utils.isShadyRoot(node)) {\n root = node;\n nodeData.ownerShadyRoot = root;\n } else {\n let parent = node.parentNode;\n root = parent ? getRootNode(parent) : node;\n // memo-ize result for performance but only memo-ize\n // result if node is in the document. This avoids a problem where a root\n // can be cached while an element is inside a fragment.\n // If this happens and we cache the result, the value can become stale\n // because for perf we avoid processing the subtree of added fragments.\n if (nativeMethods.contains.call(document.documentElement, node)) {\n nodeData.ownerShadyRoot = root;\n }\n }\n\n }\n return root;\n}\n\n// NOTE: `query` is used primarily for ShadyDOM's querySelector impl,\n// but it's also generally useful to recurse through the element tree\n// and is used by Polymer's styling system.\n/**\n * @param {Node} node\n * @param {Function} matcher\n * @param {Function=} halter\n */\nexport function query(node, matcher, halter) {\n let list = [];\n queryElements(node.childNodes, matcher,\n halter, list);\n return list;\n}\n\nfunction queryElements(elements, matcher, halter, list) {\n for (let i=0, l=elements.length, c; (i<l) && (c=elements[i]); i++) {\n if (c.nodeType === Node.ELEMENT_NODE &&\n queryElement(c, matcher, halter, list)) {\n return true;\n }\n }\n}\n\nfunction queryElement(node, matcher, halter, list) {\n let result = matcher(node);\n if (result) {\n list.push(node);\n }\n if (halter && halter(result)) {\n return result;\n }\n queryElements(node.childNodes, matcher,\n halter, list);\n}\n\nexport function renderRootNode(element) {\n var root = element.getRootNode();\n if (utils.isShadyRoot(root)) {\n root._render();\n }\n}\n\nlet scopingShim = null;\n\nexport function setAttribute(node, attr, value) {\n if (!scopingShim) {\n scopingShim = window['ShadyCSS'] && window['ShadyCSS']['ScopingShim'];\n }\n if (scopingShim && attr === 'class') {\n scopingShim['setElementClass'](node, value);\n } else {\n nativeMethods.setAttribute.call(node, attr, value);\n distributeAttributeChange(node, attr);\n }\n}\n\nexport function removeAttribute(node, attr) {\n nativeMethods.removeAttribute.call(node, attr);\n distributeAttributeChange(node, attr);\n}\n\nexport function cloneNode(node, deep) {\n if (node.localName == 'template') {\n return nativeMethods.cloneNode.call(node, deep);\n } else {\n let n = nativeMethods.cloneNode.call(node, false);\n // Attribute nodes historically had childNodes, but they have later\n // been removed from the spec.\n // Make sure we do not do a deep clone on them for old browsers (IE11)\n if (deep && n.nodeType !== Node.ATTRIBUTE_NODE) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = c$[i].cloneNode(true);\n n.appendChild(nc);\n }\n }\n return n;\n }\n}\n\n// note: Though not technically correct, we fast path `importNode`\n// when called on a node not owned by the main document.\n// This allows, for example, elements that cannot\n// contain custom elements and are therefore not likely to contain shadowRoots\n// to cloned natively. This is a fairly significant performance win.\nexport function importNode(node, deep) {\n // A template element normally has no children with shadowRoots, so make\n // sure we always make a deep copy to correctly construct the template.content\n if (node.ownerDocument !== document || node.localName === 'template') {\n return nativeMethods.importNode.call(document, node, deep);\n }\n let n = nativeMethods.importNode.call(document, node, false);\n if (deep) {\n let c$ = node.childNodes;\n for (let i=0, nc; i < c$.length; i++) {\n nc = importNode(c$[i], true);\n n.appendChild(nc);\n }\n }\n return n;\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport {calculateSplices} from './array-splice.js';\nimport * as utils from './utils.js';\nimport {enqueue} from './flush.js';\nimport {recordChildNodes} from './logical-tree.js';\nimport {removeChild, insertBefore, dispatchEvent} from './native-methods.js';\nimport {accessors} from './native-tree.js';\nimport {ensureShadyDataForNode, shadyDataForNode} from './shady-data.js';\n\nconst {parentNode, childNodes} = accessors;\n\n// Do not export this object. It must be passed as the first argument to the\n// ShadyRoot constructor in `attachShadow` to prevent the constructor from\n// throwing. This prevents the user from being able to manually construct a\n// ShadyRoot (i.e. `new ShadowRoot()`).\nconst ShadyRootConstructionToken = {};\n\nconst CATCHALL_NAME = '__catchall';\nconst SHADYROOT_NAME = 'ShadyRoot';\n\nconst MODE_CLOSED = 'closed';\n\nlet isRendering = utils.settings['deferConnectionCallbacks'] && document.readyState === 'loading';\nlet rootRendered;\n\nfunction ancestorList(node) {\n let ancestors = [];\n do {\n ancestors.unshift(node);\n } while ((node = node.parentNode));\n return ancestors;\n}\n\n/**\n * @extends {ShadowRoot}\n */\nclass ShadyRoot {\n\n constructor(token, host, options) {\n if (token !== ShadyRootConstructionToken) {\n throw new TypeError('Illegal constructor');\n }\n // NOTE: set a fake local name so this element can be\n // distinguished from a DocumentFragment when patching.\n // FF doesn't allow this to be `localName`\n this._localName = SHADYROOT_NAME;\n // root <=> host\n this.host = host;\n this._mode = options && options.mode;\n recordChildNodes(host);\n const hostData = ensureShadyDataForNode(host);\n hostData.root = this;\n hostData.publicRoot = this._mode !== MODE_CLOSED ? this : null;\n // setup root\n const rootData = ensureShadyDataForNode(this);\n rootData.firstChild = rootData.lastChild =\n rootData.parentNode = rootData.nextSibling =\n rootData.previousSibling = null;\n rootData.childNodes = [];\n // state flags\n this._renderPending = false;\n this._hasRendered = false;\n // marsalled lazily\n this._slotList = null;\n /** @type {Object<string, Array<HTMLSlotElement>>} */\n this._slotMap = null;\n this._pendingSlots = null;\n this._initialChildren = null;\n this._asyncRender();\n }\n\n // async render\n _asyncRender() {\n if (!this._renderPending) {\n this._renderPending = true;\n enqueue(() => this._render());\n }\n }\n\n // returns the oldest renderPending ancestor root.\n _getRenderRoot() {\n let renderRoot;\n let root = this;\n while (root) {\n if (root._renderPending) {\n renderRoot = root;\n }\n root = root._rendererForHost();\n }\n return renderRoot;\n }\n\n // Returns the shadyRoot `this.host` if `this.host`\n // has children that require distribution.\n _rendererForHost() {\n let root = this.host.getRootNode();\n if (utils.isShadyRoot(root)) {\n let c$ = this.host.childNodes;\n for (let i=0, c; i < c$.length; i++) {\n c = c$[i];\n if (this._isInsertionPoint(c)) {\n return root;\n }\n }\n }\n }\n\n _render() {\n const root = this._getRenderRoot();\n if (root) {\n root['_renderRoot']();\n }\n }\n\n // NOTE: avoid renaming to ease testability.\n ['_renderRoot']() {\n // track rendering state.\n const wasRendering = isRendering;\n isRendering = true;\n this._renderPending = false;\n if (this._slotList) {\n this._distribute();\n this._compose();\n }\n // on initial render remove any undistributed children.\n if (!this._hasRendered) {\n const c$ = this.host.childNodes;\n for (let i=0, l=c$.length; i < l; i++) {\n const child = c$[i];\n const data = shadyDataForNode(child);\n if (parentNode(child) === this.host &&\n (child.localName === 'slot' || !data.assignedSlot)) {\n removeChild.call(this.host, child);\n }\n }\n }\n this._hasRendered = true;\n isRendering = wasRendering;\n if (rootRendered) {\n rootRendered();\n }\n }\n\n _distribute() {\n this._validateSlots();\n // capture # of previously assigned nodes to help determine if dirty.\n for (let i=0, slot; i < this._slotList.length; i++) {\n slot = this._slotList[i];\n this._clearSlotAssignedNodes(slot);\n }\n // distribute host children.\n for (let n=this.host.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n);\n }\n // fallback content, slotchange, and dirty roots\n for (let i=0; i < this._slotList.length; i++) {\n const slot = this._slotList[i];\n const slotData = shadyDataForNode(slot);\n // distribute fallback content\n if (!slotData.assignedNodes.length) {\n for (let n=slot.firstChild; n; n=n.nextSibling) {\n this._distributeNodeToSlot(n, slot);\n }\n }\n const slotParentData = shadyDataForNode(slot.parentNode);\n const slotParentRoot = slotParentData && slotParentData.root;\n if (slotParentRoot && slotParentRoot._hasInsertionPoint()) {\n slotParentRoot['_renderRoot']();\n }\n this._addAssignedToFlattenedNodes(slotData.flattenedNodes,\n slotData.assignedNodes);\n let prevAssignedNodes = slotData._previouslyAssignedNodes;\n if (prevAssignedNodes) {\n for (let i=0; i < prevAssignedNodes.length; i++) {\n shadyDataForNode(prevAssignedNodes[i])._prevAssignedSlot = null;\n }\n slotData._previouslyAssignedNodes = null;\n // dirty if previously less assigned nodes than previously assigned.\n if (prevAssignedNodes.length > slotData.assignedNodes.length) {\n slotData.dirty = true;\n }\n }\n /* Note: A slot is marked dirty whenever a node is newly assigned to it\n or a node is assigned to a different slot (done in `_distributeNodeToSlot`)\n or if the number of nodes assigned to the slot has decreased (done above);\n */\n if (slotData.dirty) {\n slotData.dirty = false;\n this._fireSlotChange(slot);\n }\n }\n }\n\n /**\n * Distributes given `node` to the appropriate slot based on its `slot`\n * attribute. If `forcedSlot` is given, then the node is distributed to the\n * `forcedSlot`.\n * Note: slot to which the node is assigned will be marked dirty for firing\n * `slotchange`.\n * @param {Node} node\n * @param {Node=} forcedSlot\n *\n */\n _distributeNodeToSlot(node, forcedSlot) {\n const nodeData = ensureShadyDataForNode(node);\n let oldSlot = nodeData._prevAssignedSlot;\n nodeData._prevAssignedSlot = null;\n let slot = forcedSlot;\n if (!slot) {\n let name = node.slot || CATCHALL_NAME;\n const list = this._slotMap[name];\n slot = list && list[0];\n }\n if (slot) {\n const slotData = ensureShadyDataForNode(slot);\n slotData.assignedNodes.push(node);\n nodeData.assignedSlot = slot;\n } else {\n nodeData.assignedSlot = undefined;\n }\n if (oldSlot !== nodeData.assignedSlot) {\n if (nodeData.assignedSlot) {\n ensureShadyDataForNode(nodeData.assignedSlot).dirty = true;\n }\n }\n }\n\n /**\n * Clears the assignedNodes tracking data for a given `slot`. Note, the current\n * assigned node data is tracked (via _previouslyAssignedNodes and\n * _prevAssignedSlot) to see if `slotchange` should fire. This data may be out\n * of date at this time because the assigned nodes may have already been\n * distributed to another root. This is ok since this data is only used to\n * track changes.\n * @param {HTMLSlotElement} slot\n */\n _clearSlotAssignedNodes(slot) {\n const slotData = shadyDataForNode(slot);\n let n$ = slotData.assignedNodes;\n slotData.assignedNodes = [];\n slotData.flattenedNodes = [];\n slotData._previouslyAssignedNodes = n$;\n if (n$) {\n for (let i=0; i < n$.length; i++) {\n let n = shadyDataForNode(n$[i]);\n n._prevAssignedSlot = n.assignedSlot;\n // only clear if it was previously set to this slot;\n // this helps ensure that if the node has otherwise been distributed\n // ignore it.\n if (n.assignedSlot === slot) {\n n.assignedSlot = null;\n }\n }\n }\n }\n\n _addAssignedToFlattenedNodes(flattened, assigned) {\n for (let i=0, n; (i<assigned.length) && (n=assigned[i]); i++) {\n if (n.localName == 'slot') {\n const nestedAssigned = shadyDataForNode(n).assignedNodes;\n if (nestedAssigned && nestedAssigned.length) {\n this._addAssignedToFlattenedNodes(flattened, nestedAssigned);\n }\n } else {\n flattened.push(assigned[i]);\n }\n }\n }\n\n _fireSlotChange(slot) {\n // NOTE: cannot bubble correctly here so not setting bubbles: true\n // Safari tech preview does not bubble but chrome does\n // Spec says it bubbles (https://dom.spec.whatwg.org/#mutation-observers)\n dispatchEvent.call(slot, new Event('slotchange'));\n const slotData = shadyDataForNode(slot);\n if (slotData.assignedSlot) {\n this._fireSlotChange(slotData.assignedSlot);\n }\n }\n\n // Reify dom such that it is at its correct rendering position\n // based on logical distribution.\n // NOTE: here we only compose parents of <slot> elements and not the\n // shadowRoot into the host. The latter is performend via a fast path\n // in the `logical-mutation`.insertBefore.\n _compose() {\n const slots = this._slotList;\n let composeList = [];\n for (let i=0; i < slots.length; i++) {\n const parent = slots[i].parentNode;\n /* compose node only if:\n (1) parent does not have a shadowRoot since shadowRoot has already\n composed into the host\n (2) we're not already composing it\n [consider (n^2) but rare better than Set]\n */\n const parentData = shadyDataForNode(parent);\n if (!(parentData && parentData.root) &&\n composeList.indexOf(parent) < 0) {\n composeList.push(parent);\n }\n }\n for (let i=0; i < composeList.length; i++) {\n const node = composeList[i];\n const targetNode = node === this ? this.host : node;\n this._updateChildNodes(targetNode, this._composeNode(node));\n }\n }\n\n // Returns the list of nodes which should be rendered inside `node`.\n _composeNode(node) {\n let children = [];\n let c$ = node.childNodes;\n for (let i = 0; i < c$.length; i++) {\n let child = c$[i];\n // Note: if we see a slot here, the nodes are guaranteed to need to be\n // composed here. This is because if there is redistribution, it has\n // already been handled by this point.\n if (this._isInsertionPoint(child)) {\n let flattenedNodes = shadyDataForNode(child).flattenedNodes;\n for (let j = 0; j < flattenedNodes.length; j++) {\n let distributedNode = flattenedNodes[j];\n children.push(distributedNode);\n }\n } else {\n children.push(child);\n }\n }\n return children;\n }\n\n _isInsertionPoint(node) {\n return node.localName == 'slot';\n }\n\n // Ensures that the rendered node list inside `container` is `children`.\n _updateChildNodes(container, children) {\n let composed = childNodes(container);\n let splices = calculateSplices(children, composed);\n // process removals\n for (let i=0, d=0, s; (i<splices.length) && (s=splices[i]); i++) {\n for (let j=0, n; (j < s.removed.length) && (n=s.removed[j]); j++) {\n // check if the node is still where we expect it is before trying\n // to remove it; this can happen if we move a node and\n // then schedule its previous host for distribution resulting in\n // the node being removed here.\n if (parentNode(n) === container) {\n removeChild.call(container, n);\n }\n // TODO(sorvell): avoid the need for splicing here.\n composed.splice(s.index + d, 1);\n }\n d -= s.addedCount;\n }\n // process adds\n for (let i=0, s, next; (i<splices.length) && (s=splices[i]); i++) { //eslint-disable-line no-redeclare\n next = composed[s.index];\n for (let j=s.index, n; j < s.index + s.addedCount; j++) {\n n = children[j];\n insertBefore.call(container, n, next);\n composed.splice(j, 0, n);\n }\n }\n }\n\n _ensureSlotData() {\n this._pendingSlots = this._pendingSlots || [];\n this._slotList = this._slotList || [];\n this._slotMap = this._slotMap || {};\n }\n\n _addSlots(slots) {\n this._ensureSlotData();\n this._pendingSlots.push(...slots);\n }\n\n _validateSlots() {\n if (this._pendingSlots && this._pendingSlots.length) {\n this._mapSlots(this._pendingSlots);\n this._pendingSlots = [];\n }\n }\n\n /**\n * Adds the given slots. Slots are maintained in an dom-ordered list.\n * In addition a map of name to slot is updated.\n */\n _mapSlots(slots) {\n let slotNamesToSort;\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n // ensure insertionPoints's and their parents have logical dom info.\n // save logical tree info\n // a. for shadyRoot\n // b. for insertion points (fallback)\n // c. for parents of insertion points\n recordChildNodes(slot);\n recordChildNodes(slot.parentNode);\n let name = this._nameForSlot(slot);\n if (this._slotMap[name]) {\n slotNamesToSort = slotNamesToSort || {};\n slotNamesToSort[name] = true;\n this._slotMap[name].push(slot);\n } else {\n this._slotMap[name] = [slot];\n }\n this._slotList.push(slot);\n }\n if (slotNamesToSort) {\n for (let n in slotNamesToSort) {\n this._slotMap[n] = this._sortSlots(this._slotMap[n]);\n }\n }\n }\n\n _nameForSlot(slot) {\n const name = slot['name'] || slot.getAttribute('name') || CATCHALL_NAME;\n slot.__slotName = name;\n return name;\n }\n\n /**\n * Slots are kept in an ordered list. Slots with the same name\n * are sorted here by tree order.\n */\n _sortSlots(slots) {\n // NOTE: Cannot use `compareDocumentPosition` because it's not polyfilled,\n // but the code here could be used to polyfill the preceeding/following info\n // in `compareDocumentPosition`.\n return slots.sort((a, b) => {\n let listA = ancestorList(a);\n let listB = ancestorList(b);\n for (var i=0; i < listA.length; i++) {\n let nA = listA[i];\n let nB = listB[i];\n if (nA !== nB) {\n let c$ = Array.from(nA.parentNode.childNodes);\n return c$.indexOf(nA) - c$.indexOf(nB);\n }\n }\n });\n }\n\n /**\n * Removes from tracked slot data any slots contained within `container` and\n * then updates the tracked data (_slotList and _slotMap).\n * Any removed slots also have their `assignedNodes` removed from comopsed dom.\n */\n _removeContainedSlots(container) {\n if (!this._slotList) {\n return;\n }\n this._validateSlots();\n let didRemove;\n const map = this._slotMap;\n for (let n in map) {\n let slots = map[n];\n for (let i=0; i < slots.length; i++) {\n let slot = slots[i];\n if (utils.contains(container, slot)) {\n slots.splice(i, 1);\n const x = this._slotList.indexOf(slot);\n if (x >= 0) {\n this._slotList.splice(x, 1);\n }\n i--;\n this._removeFlattenedNodes(slot);\n didRemove = true;\n }\n }\n }\n return didRemove;\n }\n\n _updateSlotName(slot) {\n if (!this._slotList) {\n return;\n }\n // make sure slotMap is initialized with this slot\n this._validateSlots();\n const oldName = slot.__slotName;\n const name = this._nameForSlot(slot);\n if (name === oldName) {\n return;\n }\n // remove from existing tracking\n let slots = this._slotMap[oldName];\n const i = slots.indexOf(slot);\n if (i >= 0) {\n slots.splice(i, 1);\n }\n // add to new location and sort if nedessary\n let list = this._slotMap[name] || (this._slotMap[name] = []);\n list.push(slot);\n if (list.length > 1) {\n this._slotMap[name] = this._sortSlots(list);\n }\n }\n\n _removeFlattenedNodes(slot) {\n const data = shadyDataForNode(slot);\n let n$ = data.flattenedNodes;\n if (n$) {\n for (let i=0; i<n$.length; i++) {\n let node = n$[i];\n let parent = parentNode(node);\n if (parent) {\n removeChild.call(parent, node);\n }\n }\n }\n data.flattenedNodes = [];\n data.assignedNodes = [];\n }\n\n _hasInsertionPoint() {\n this._validateSlots();\n return Boolean(this._slotList && this._slotList.length);\n }\n}\n\nexport {ShadyRoot};\n\n/**\n Implements a pared down version of ShadowDOM's scoping, which is easy to\n polyfill across browsers.\n*/\nexport function attachShadow(host, options) {\n if (!host) {\n throw 'Must provide a host.';\n }\n if (!options) {\n throw 'Not enough arguments.'\n }\n return new ShadyRoot(ShadyRootConstructionToken, host, options);\n}\n\n// Mitigate connect/disconnect spam by wrapping custom element classes.\nif (window['customElements'] && utils.settings.inUse) {\n\n // process connect/disconnect after roots have rendered to avoid\n // issues with reaction stack.\n let connectMap = new Map();\n rootRendered = function() {\n // allow elements to connect\n const map = Array.from(connectMap);\n connectMap.clear();\n for (const [e, value] of map) {\n if (value) {\n e.__shadydom_connectedCallback();\n } else {\n e.__shadydom_disconnectedCallback();\n }\n }\n }\n\n // Document is in loading state and flag is set (deferConnectionCallbacks)\n // so process connection stack when `readystatechange` fires.\n if (isRendering) {\n document.addEventListener('readystatechange', () => {\n isRendering = false;\n rootRendered();\n }, {once: true});\n }\n\n /*\n * (1) elements can only be connected/disconnected if they are in the expected\n * state.\n * (2) never run connect/disconnect during rendering to avoid reaction stack issues.\n */\n const ManageConnect = (base, connected, disconnected) => {\n let counter = 0;\n const connectFlag = `__isConnected${counter++}`;\n if (connected || disconnected) {\n\n base.prototype.connectedCallback = base.prototype.__shadydom_connectedCallback = function() {\n // if rendering defer connected\n // otherwise connect only if we haven't already\n if (isRendering) {\n connectMap.set(this, true);\n } else if (!this[connectFlag]) {\n this[connectFlag] = true;\n if (connected) {\n connected.call(this);\n }\n }\n }\n\n base.prototype.disconnectedCallback = base.prototype.__shadydom_disconnectedCallback = function() {\n // if rendering, cancel a pending connection and queue disconnect,\n // otherwise disconnect only if a connection has been allowed\n if (isRendering) {\n // This is necessary only because calling removeChild\n // on a node that requires distribution leaves it in the DOM tree\n // until distribution.\n // NOTE: remember this is checking the patched isConnected to determine\n // if the node is in the logical tree.\n if (!this.isConnected) {\n connectMap.set(this, false);\n }\n } else if (this[connectFlag]) {\n this[connectFlag] = false;\n if (disconnected) {\n disconnected.call(this);\n }\n }\n }\n }\n\n return base;\n }\n\n const define = window['customElements']['define'];\n // NOTE: Instead of patching customElements.define,\n // re-define on the CustomElementRegistry.prototype.define\n // for Safari 10 compatibility (it's flakey otherwise).\n Object.defineProperty(window['CustomElementRegistry'].prototype, 'define', {\n value: function(name, constructor) {\n const connected = constructor.prototype.connectedCallback;\n const disconnected = constructor.prototype.disconnectedCallback;\n define.call(window['customElements'], name,\n ManageConnect(constructor, connected, disconnected));\n // unpatch connected/disconnected on class; custom elements tears this off\n // so the patch is maintained, but if the user calls these methods for\n // e.g. testing, they will be as expected.\n constructor.prototype.connectedCallback = connected;\n constructor.prototype.disconnectedCallback = disconnected;\n }\n });\n\n}\n",null,null,"/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport * as nativeMethods from './native-methods.js';\nimport {shadyDataForNode} from './shady-data.js';\n\n/*\nMake this name unique so it is unlikely to conflict with properties on objects passed to `addEventListener`\nhttps://github.com/webcomponents/shadydom/issues/173\n*/\nconst /** string */ eventWrappersName = `__eventWrappers${Date.now()}`;\n\n/** @type {?function(!Event): boolean} */\nconst composedGetter = (() => {\n const composedProp = Object.getOwnPropertyDescriptor(Event.prototype, 'composed');\n return composedProp ? (ev) => composedProp.get.call(ev) : null;\n})();\n\n// https://github.com/w3c/webcomponents/issues/513#issuecomment-224183937\nconst alwaysComposed = {\n 'blur': true,\n 'focus': true,\n 'focusin': true,\n 'focusout': true,\n 'click': true,\n 'dblclick': true,\n 'mousedown': true,\n 'mouseenter': true,\n 'mouseleave': true,\n 'mousemove': true,\n 'mouseout': true,\n 'mouseover': true,\n 'mouseup': true,\n 'wheel': true,\n 'beforeinput': true,\n 'input': true,\n 'keydown': true,\n 'keyup': true,\n 'compositionstart': true,\n 'compositionupdate': true,\n 'compositionend': true,\n 'touchstart': true,\n 'touchend': true,\n 'touchmove': true,\n 'touchcancel': true,\n 'pointerover': true,\n 'pointerenter': true,\n 'pointerdown': true,\n 'pointermove': true,\n 'pointerup': true,\n 'pointercancel': true,\n 'pointerout': true,\n 'pointerleave': true,\n 'gotpointercapture': true,\n 'lostpointercapture': true,\n 'dragstart': true,\n 'drag': true,\n 'dragenter': true,\n 'dragleave': true,\n 'dragover': true,\n 'drop': true,\n 'dragend': true,\n 'DOMActivate': true,\n 'DOMFocusIn': true,\n 'DOMFocusOut': true,\n 'keypress': true\n};\n\nconst unpatchedEvents = {\n 'DOMAttrModified': true,\n 'DOMAttributeNameChanged': true,\n 'DOMCharacterDataModified': true,\n 'DOMElementNameChanged': true,\n 'DOMNodeInserted': true,\n 'DOMNodeInsertedIntoDocument': true,\n 'DOMNodeRemoved': true,\n 'DOMNodeRemovedFromDocument': true,\n 'DOMSubtreeModified': true\n}\n\nfunction pathComposer(startNode, composed) {\n let composedPath = [];\n let current = startNode;\n let startRoot = startNode === window ? window : startNode.getRootNode();\n while (current) {\n composedPath.push(current);\n if (current.assignedSlot) {\n current = current.assignedSlot;\n } else if (current.nodeType === Node.DOCUMENT_FRAGMENT_NODE && current.host && (composed || current !== startRoot)) {\n current = current.host;\n } else {\n current = current.parentNode;\n }\n }\n // event composedPath includes window when startNode's ownerRoot is document\n if (composedPath[composedPath.length - 1] === document) {\n composedPath.push(window);\n }\n return composedPath;\n}\n\nfunction retarget(refNode, path) {\n if (!utils.isShadyRoot) {\n return refNode;\n }\n // If ANCESTOR's root is not a shadow root or ANCESTOR's root is BASE's\n // shadow-including inclusive ancestor, return ANCESTOR.\n let refNodePath = pathComposer(refNode, true);\n let p$ = path;\n for (let i=0, ancestor, lastRoot, root, rootIdx; i < p$.length; i++) {\n ancestor = p$[i];\n root = ancestor === window ? window : ancestor.getRootNode();\n if (root !== lastRoot) {\n rootIdx = refNodePath.indexOf(root);\n lastRoot = root;\n }\n if (!utils.isShadyRoot(root) || rootIdx > -1) {\n return ancestor;\n }\n }\n}\n\nlet eventMixin = {\n\n /**\n * @this {Event}\n */\n get composed() {\n if (this.__composed === undefined) {\n // if there's an original `composed` getter on the Event prototype, use that\n if (composedGetter) {\n this.__composed = composedGetter(this);\n // If the event is trusted, or `isTrusted` is not supported, check the list of always composed events\n } else if (this.isTrusted !== false) {\n this.__composed = alwaysComposed[this.type];\n }\n }\n return this.__composed || false;\n },\n\n /**\n * @this {Event}\n */\n composedPath() {\n if (!this.__composedPath) {\n this.__composedPath = pathComposer(this['__target'], this.composed);\n }\n return this.__composedPath;\n },\n\n /**\n * @this {Event}\n */\n get target() {\n return retarget(this.currentTarget || this['__previousCurrentTarget'], this.composedPath());\n },\n\n // http://w3c.github.io/webcomponents/spec/shadow/#event-relatedtarget-retargeting\n /**\n * @this {Event}\n */\n get relatedTarget() {\n if (!this.__relatedTarget) {\n return null;\n }\n if (!this.__relatedTargetComposedPath) {\n this.__relatedTargetComposedPath = pathComposer(this.__relatedTarget, true);\n }\n // find the deepest node in relatedTarget composed path that is in the same root with the currentTarget\n return retarget(this.currentTarget || this['__previousCurrentTarget'], this.__relatedTargetComposedPath);\n },\n /**\n * @this {Event}\n */\n stopPropagation() {\n Event.prototype.stopPropagation.call(this);\n this.__propagationStopped = true;\n },\n /**\n * @this {Event}\n */\n stopImmediatePropagation() {\n Event.prototype.stopImmediatePropagation.call(this);\n this.__immediatePropagationStopped = true;\n this.__propagationStopped = true;\n }\n\n};\n\nfunction mixinComposedFlag(Base) {\n // NOTE: avoiding use of `class` here so that transpiled output does not\n // try to do `Base.call` with a dom construtor.\n let klazz = function(type, options) {\n let event = new Base(type, options);\n event.__composed = options && Boolean(options['composed']);\n return event;\n }\n // put constructor properties on subclass\n utils.mixin(klazz, Base);\n klazz.prototype = Base.prototype;\n return klazz;\n}\n\nlet nonBubblingEventsToRetarget = {\n 'focus': true,\n 'blur': true\n};\n\n\n/**\n * Check if the event has been retargeted by comparing original `target`, and calculated `target`\n * @param {Event} event\n * @return {boolean} True if the original target and calculated target are the same\n */\nfunction hasRetargeted(event) {\n return event['__target'] !== event.target || event.__relatedTarget !== event.relatedTarget;\n}\n\n/**\n *\n * @param {Event} event\n * @param {Node} node\n * @param {string} phase\n */\nfunction fireHandlers(event, node, phase) {\n let hs = node.__handlers && node.__handlers[event.type] &&\n node.__handlers[event.type][phase];\n if (hs) {\n for (let i = 0, fn; (fn = hs[i]); i++) {\n if (hasRetargeted(event) && event.target === event.relatedTarget) {\n return;\n }\n fn.call(node, event);\n if (event.__immediatePropagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction retargetNonBubblingEvent(e) {\n let path = e.composedPath();\n let node;\n // override `currentTarget` to let patched `target` calculate correctly\n Object.defineProperty(e, 'currentTarget', {\n get: function() {\n return node;\n },\n configurable: true\n });\n for (let i = path.length - 1; i >= 0; i--) {\n node = path[i];\n // capture phase fires all capture handlers\n fireHandlers(e, node, 'capture');\n if (e.__propagationStopped) {\n return;\n }\n }\n\n // set the event phase to `AT_TARGET` as in spec\n Object.defineProperty(e, 'eventPhase', {get() { return Event.AT_TARGET }});\n\n // the event only needs to be fired when owner roots change when iterating the event path\n // keep track of the last seen owner root\n let lastFiredRoot;\n for (let i = 0; i < path.length; i++) {\n node = path[i];\n const nodeData = shadyDataForNode(node);\n const root = nodeData && nodeData.root;\n if (i === 0 || (root && root === lastFiredRoot)) {\n fireHandlers(e, node, 'bubble');\n // don't bother with window, it doesn't have `getRootNode` and will be last in the path anyway\n if (node !== window) {\n lastFiredRoot = node.getRootNode();\n }\n if (e.__propagationStopped) {\n return;\n }\n }\n }\n}\n\nfunction listenerSettingsEqual(savedListener, node, type, capture, once, passive) {\n let {\n node: savedNode,\n type: savedType,\n capture: savedCapture,\n once: savedOnce,\n passive: savedPassive\n } = savedListener;\n return node === savedNode &&\n type === savedType &&\n capture === savedCapture &&\n once === savedOnce &&\n passive === savedPassive;\n}\n\nexport function findListener(wrappers, node, type, capture, once, passive) {\n for (let i = 0; i < wrappers.length; i++) {\n if (listenerSettingsEqual(wrappers[i], node, type, capture, once, passive)) {\n return i;\n }\n }\n return -1;\n}\n\n/**\n * Firefox can throw on accessing eventWrappers inside of `removeEventListener` during a selenium run\n * Try/Catch accessing eventWrappers to work around\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1353074\n */\nfunction getEventWrappers(eventLike) {\n let wrappers = null;\n try {\n wrappers = eventLike[eventWrappersName];\n } catch (e) {} // eslint-disable-line no-empty\n return wrappers;\n}\n\n/**\n * @this {Event}\n */\nexport function addEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n\n const handlerType = typeof fnOrObj;\n\n // bail if `fnOrObj` is not a function, not an object\n if (handlerType !== 'function' && handlerType !== 'object') {\n return;\n }\n\n // bail if `fnOrObj` is an object without a `handleEvent` method\n if (handlerType === 'object' && (!fnOrObj.handleEvent || typeof fnOrObj.handleEvent !== 'function')) {\n return;\n }\n\n const ael = this instanceof Window ? nativeMethods.windowAddEventListener :\n nativeMethods.addEventListener;\n\n if (unpatchedEvents[type]) {\n return ael.call(this, type, fnOrObj, optionsOrCapture);\n }\n\n // The callback `fn` might be used for multiple nodes/events. Since we generate\n // a wrapper function, we need to keep track of it when we remove the listener.\n // It's more efficient to store the node/type/options information as Array in\n // `fn` itself rather than the node (we assume that the same callback is used\n // for few nodes at most, whereas a node will likely have many event listeners).\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n // hack to let ShadyRoots have event listeners\n // event listener will be on host, but `currentTarget`\n // will be set to shadyroot for event listener\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n\n let wrappers = fnOrObj[eventWrappersName];\n if (wrappers) {\n // Stop if the wrapper function has already been created.\n if (findListener(wrappers, target, type, capture, once, passive) > -1) {\n return;\n }\n } else {\n fnOrObj[eventWrappersName] = [];\n }\n\n /**\n * @this {HTMLElement}\n * @param {Event} e\n */\n const wrapperFn = function(e) {\n // Support `once` option.\n if (once) {\n this.removeEventListener(type, fnOrObj, optionsOrCapture);\n }\n if (!e['__target']) {\n patchEvent(e);\n }\n let lastCurrentTargetDesc;\n if (target !== this) {\n // replace `currentTarget` to make `target` and `relatedTarget` correct for inside the shadowroot\n lastCurrentTargetDesc = Object.getOwnPropertyDescriptor(e, 'currentTarget');\n Object.defineProperty(e, 'currentTarget', {get() { return target }, configurable: true});\n }\n e['__previousCurrentTarget'] = e['currentTarget'];\n // Always check if a shadowRoot is in the current event path.\n // If it is not, the event was generated on either the host of the shadowRoot\n // or a children of the host.\n if (utils.isShadyRoot(target) && e.composedPath().indexOf(target) == -1) {\n return;\n }\n // There are two critera that should stop events from firing on this node\n // 1. the event is not composed and the current node is not in the same root as the target\n // 2. when bubbling, if after retargeting, relatedTarget and target point to the same node\n if (e.composed || e.composedPath().indexOf(target) > -1) {\n if (hasRetargeted(e) && e.target === e.relatedTarget) {\n if (e.eventPhase === Event.BUBBLING_PHASE) {\n e.stopImmediatePropagation();\n }\n return;\n }\n // prevent non-bubbling events from triggering bubbling handlers on shadowroot, but only if not in capture phase\n if (e.eventPhase !== Event.CAPTURING_PHASE && !e.bubbles && e.target !== target && !(target instanceof Window)) {\n return;\n }\n let ret = handlerType === 'function' ?\n fnOrObj.call(target, e) :\n (fnOrObj.handleEvent && fnOrObj.handleEvent(e));\n if (target !== this) {\n // replace the \"correct\" `currentTarget`\n if (lastCurrentTargetDesc) {\n Object.defineProperty(e, 'currentTarget', lastCurrentTargetDesc);\n lastCurrentTargetDesc = null;\n } else {\n delete e['currentTarget'];\n }\n }\n return ret;\n }\n };\n // Store the wrapper information.\n fnOrObj[eventWrappersName].push({\n // note: use target here which is either a shadowRoot\n // (when the host element is proxy'ing the event) or this element\n node: target,\n type: type,\n capture: capture,\n once: once,\n passive: passive,\n wrapperFn: wrapperFn\n });\n\n if (nonBubblingEventsToRetarget[type]) {\n this.__handlers = this.__handlers || {};\n this.__handlers[type] = this.__handlers[type] ||\n {'capture': [], 'bubble': []};\n this.__handlers[type][capture ? 'capture' : 'bubble'].push(wrapperFn);\n } else {\n ael.call(this, type, wrapperFn, optionsOrCapture);\n }\n}\n\n/**\n * @this {Event}\n */\nexport function removeEventListener(type, fnOrObj, optionsOrCapture) {\n if (!fnOrObj) {\n return;\n }\n const rel = this instanceof Window ? nativeMethods.windowRemoveEventListener :\n nativeMethods.removeEventListener;\n if (unpatchedEvents[type]) {\n return rel.call(this, type, fnOrObj, optionsOrCapture);\n }\n // NOTE(valdrin) invoking external functions is costly, inline has better perf.\n let capture, once, passive;\n if (optionsOrCapture && typeof optionsOrCapture === 'object') {\n capture = Boolean(optionsOrCapture.capture);\n once = Boolean(optionsOrCapture.once);\n passive = Boolean(optionsOrCapture.passive);\n } else {\n capture = Boolean(optionsOrCapture);\n once = false;\n passive = false;\n }\n let target = (optionsOrCapture && optionsOrCapture.__shadyTarget) || this;\n // Search the wrapped function.\n let wrapperFn = undefined;\n let wrappers = getEventWrappers(fnOrObj);\n if (wrappers) {\n let idx = findListener(wrappers, target, type, capture, once, passive);\n if (idx > -1) {\n wrapperFn = wrappers.splice(idx, 1)[0].wrapperFn;\n // Cleanup.\n if (!wrappers.length) {\n fnOrObj[eventWrappersName] = undefined;\n }\n }\n }\n rel.call(this, type, wrapperFn || fnOrObj, optionsOrCapture);\n if (wrapperFn && nonBubblingEventsToRetarget[type] &&\n this.__handlers && this.__handlers[type]) {\n const arr = this.__handlers[type][capture ? 'capture' : 'bubble'];\n const idx = arr.indexOf(wrapperFn);\n if (idx > -1) {\n arr.splice(idx, 1);\n }\n }\n}\n\nfunction activateFocusEventOverrides() {\n for (let ev in nonBubblingEventsToRetarget) {\n window.addEventListener(ev, function(e) {\n if (!e['__target']) {\n patchEvent(e);\n retargetNonBubblingEvent(e);\n }\n }, true);\n }\n}\n\nfunction patchEvent(event) {\n event['__target'] = event.target;\n event.__relatedTarget = event.relatedTarget;\n // patch event prototype if we can\n if (utils.settings.hasDescriptors) {\n utils.patchPrototype(event, eventMixin);\n // and fallback to patching instance\n } else {\n utils.extend(event, eventMixin);\n }\n}\n\nlet PatchedEvent = mixinComposedFlag(window.Event);\nlet PatchedCustomEvent = mixinComposedFlag(window.CustomEvent);\nlet PatchedMouseEvent = mixinComposedFlag(window.MouseEvent);\n\nexport function patchEvents() {\n window.Event = PatchedEvent;\n window.CustomEvent = PatchedCustomEvent;\n window.MouseEvent = PatchedMouseEvent;\n activateFocusEventOverrides();\n\n // Fix up `Element.prototype.click()` if `isTrusted` is supported, but `composed` isn't\n if (!composedGetter && Object.getOwnPropertyDescriptor(Event.prototype, 'isTrusted')) {\n /** @this {Element} */\n const composedClickFn = function() {\n const ev = new MouseEvent('click', {\n bubbles: true,\n cancelable: true,\n composed: true\n });\n this.dispatchEvent(ev);\n };\n if (Element.prototype.click) {\n Element.prototype.click = composedClickFn;\n } else if (HTMLElement.prototype.click) {\n HTMLElement.prototype.click = composedClickFn;\n }\n }\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nfunction newSplice(index, removed, addedCount) {\n return {\n index: index,\n removed: removed,\n addedCount: addedCount\n };\n}\n\nconst EDIT_LEAVE = 0;\nconst EDIT_UPDATE = 1;\nconst EDIT_ADD = 2;\nconst EDIT_DELETE = 3;\n\n// Note: This function is *based* on the computation of the Levenshtein\n// \"edit\" distance. The one change is that \"updates\" are treated as two\n// edits - not one. With Array splices, an update is really a delete\n// followed by an add. By retaining this, we optimize for \"keeping\" the\n// maximum array items in the original array. For example:\n//\n// 'xxxx123' -> '123yyyy'\n//\n// With 1-edit updates, the shortest path would be just to update all seven\n// characters. With 2-edit updates, we delete 4, leave 3, and add 4. This\n// leaves the substring '123' intact.\nfunction calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n // \"Deletion\" columns\n let rowCount = oldEnd - oldStart + 1;\n let columnCount = currentEnd - currentStart + 1;\n let distances = new Array(rowCount);\n\n // \"Addition\" rows. Initialize null column.\n for (let i = 0; i < rowCount; i++) {\n distances[i] = new Array(columnCount);\n distances[i][0] = i;\n }\n\n // Initialize null row\n for (let j = 0; j < columnCount; j++)\n distances[0][j] = j;\n\n for (let i = 1; i < rowCount; i++) {\n for (let j = 1; j < columnCount; j++) {\n if (equals(current[currentStart + j - 1], old[oldStart + i - 1]))\n distances[i][j] = distances[i - 1][j - 1];\n else {\n let north = distances[i - 1][j] + 1;\n let west = distances[i][j - 1] + 1;\n distances[i][j] = north < west ? north : west;\n }\n }\n }\n\n return distances;\n}\n\n// This starts at the final weight, and walks \"backward\" by finding\n// the minimum previous weight recursively until the origin of the weight\n// matrix.\nfunction spliceOperationsFromEditDistances(distances) {\n let i = distances.length - 1;\n let j = distances[0].length - 1;\n let current = distances[i][j];\n let edits = [];\n while (i > 0 || j > 0) {\n if (i == 0) {\n edits.push(EDIT_ADD);\n j--;\n continue;\n }\n if (j == 0) {\n edits.push(EDIT_DELETE);\n i--;\n continue;\n }\n let northWest = distances[i - 1][j - 1];\n let west = distances[i - 1][j];\n let north = distances[i][j - 1];\n\n let min;\n if (west < north)\n min = west < northWest ? west : northWest;\n else\n min = north < northWest ? north : northWest;\n\n if (min == northWest) {\n if (northWest == current) {\n edits.push(EDIT_LEAVE);\n } else {\n edits.push(EDIT_UPDATE);\n current = northWest;\n }\n i--;\n j--;\n } else if (min == west) {\n edits.push(EDIT_DELETE);\n i--;\n current = west;\n } else {\n edits.push(EDIT_ADD);\n j--;\n current = north;\n }\n }\n\n edits.reverse();\n return edits;\n}\n\n/**\n * Splice Projection functions:\n *\n * A splice map is a representation of how a previous array of items\n * was transformed into a new array of items. Conceptually it is a list of\n * tuples of\n *\n * <index, removed, addedCount>\n *\n * which are kept in ascending index order of. The tuple represents that at\n * the |index|, |removed| sequence of items were removed, and counting forward\n * from |index|, |addedCount| items were added.\n */\n\n/**\n * Lacking individual splice mutation information, the minimal set of\n * splices can be synthesized given the previous state and final state of an\n * array. The basic approach is to calculate the edit distance matrix and\n * choose the shortest path through it.\n *\n * Complexity: O(l * p)\n * l: The length of the current array\n * p: The length of the old array\n */\nfunction calcSplices(current, currentStart, currentEnd,\n old, oldStart, oldEnd) {\n let prefixCount = 0;\n let suffixCount = 0;\n let splice;\n\n let minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);\n if (currentStart == 0 && oldStart == 0)\n prefixCount = sharedPrefix(current, old, minLength);\n\n if (currentEnd == current.length && oldEnd == old.length)\n suffixCount = sharedSuffix(current, old, minLength - prefixCount);\n\n currentStart += prefixCount;\n oldStart += prefixCount;\n currentEnd -= suffixCount;\n oldEnd -= suffixCount;\n\n if (currentEnd - currentStart == 0 && oldEnd - oldStart == 0)\n return [];\n\n if (currentStart == currentEnd) {\n splice = newSplice(currentStart, [], 0);\n while (oldStart < oldEnd)\n splice.removed.push(old[oldStart++]);\n\n return [ splice ];\n } else if (oldStart == oldEnd)\n return [ newSplice(currentStart, [], currentEnd - currentStart) ];\n\n let ops = spliceOperationsFromEditDistances(\n calcEditDistances(current, currentStart, currentEnd,\n old, oldStart, oldEnd));\n\n splice = undefined;\n let splices = [];\n let index = currentStart;\n let oldIndex = oldStart;\n for (let i = 0; i < ops.length; i++) {\n switch(ops[i]) {\n case EDIT_LEAVE:\n if (splice) {\n splices.push(splice);\n splice = undefined;\n }\n\n index++;\n oldIndex++;\n break;\n case EDIT_UPDATE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n case EDIT_ADD:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.addedCount++;\n index++;\n break;\n case EDIT_DELETE:\n if (!splice)\n splice = newSplice(index, [], 0);\n\n splice.removed.push(old[oldIndex]);\n oldIndex++;\n break;\n }\n }\n\n if (splice) {\n splices.push(splice);\n }\n return splices;\n}\n\nfunction sharedPrefix(current, old, searchLength) {\n for (let i = 0; i < searchLength; i++)\n if (!equals(current[i], old[i]))\n return i;\n return searchLength;\n}\n\nfunction sharedSuffix(current, old, searchLength) {\n let index1 = current.length;\n let index2 = old.length;\n let count = 0;\n while (count < searchLength && equals(current[--index1], old[--index2]))\n count++;\n\n return count;\n}\n\nfunction equals(currentValue, previousValue) {\n return currentValue === previousValue;\n}\n\nexport function calculateSplices(current, previous) {\n return calcSplices(current, 0, current.length, previous, 0,\n previous.length);\n}\n\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nimport * as utils from './utils.js';\nimport {flush} from './flush.js';\nimport {dispatchEvent, querySelectorAll} from './native-methods.js';\nimport * as mutation from './logical-mutation.js';\nimport {ActiveElementAccessor, ShadowRootAccessor, patchAccessors, patchShadowRootAccessors, IsConnectedAccessor} from './patch-accessors.js';\nimport {addEventListener, removeEventListener} from './patch-events.js';\nimport {attachShadow, ShadyRoot} from './attach-shadow.js';\nimport {shadyDataForNode, ensureShadyDataForNode} from './shady-data.js';\n\nfunction getAssignedSlot(node) {\n mutation.renderRootNode(node);\n const nodeData = shadyDataForNode(node);\n return nodeData && nodeData.assignedSlot || null;\n}\n\nlet windowMixin = {\n\n // NOTE: ensure these methods are bound to `window` so that `this` is correct\n // when called directly from global context without a receiver; e.g.\n // `addEventListener(...)`.\n addEventListener: addEventListener.bind(window),\n\n removeEventListener: removeEventListener.bind(window)\n\n};\n\nlet nodeMixin = {\n\n addEventListener: addEventListener,\n\n removeEventListener: removeEventListener,\n\n appendChild(node) {\n return mutation.insertBefore(this, node);\n },\n\n insertBefore(node, ref_node) {\n return mutation.insertBefore(this, node, ref_node);\n },\n\n removeChild(node) {\n return mutation.removeChild(this, node);\n },\n\n /**\n * @this {Node}\n */\n replaceChild(node, ref_node) {\n mutation.insertBefore(this, node, ref_node);\n mutation.removeChild(this, ref_node);\n return node;\n },\n\n /**\n * @this {Node}\n */\n cloneNode(deep) {\n return mutation.cloneNode(this, deep);\n },\n\n /**\n * @this {Node}\n */\n getRootNode(options) {\n return mutation.getRootNode(this, options);\n },\n\n contains(node) {\n return utils.contains(this, node);\n },\n\n /**\n * @this {Node}\n */\n dispatchEvent(event) {\n flush();\n return dispatchEvent.call(this, event);\n }\n\n};\n\n// NOTE: we can do this regardless of the browser supporting native accessors\n// since this is always \"new\" in that case.\nObject.defineProperties(nodeMixin, IsConnectedAccessor);\n\n// NOTE: For some reason 'Text' redefines 'assignedSlot'\nlet textMixin = {\n /**\n * @this {Text}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n};\n\nlet fragmentMixin = {\n\n // TODO(sorvell): consider doing native QSA and filtering results.\n /**\n * @this {DocumentFragment}\n */\n querySelector(selector) {\n // match selector and halt on first result.\n let result = mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n },\n\n /**\n * @this {DocumentFragment}\n */\n // TODO(sorvell): `useNative` option relies on native querySelectorAll and\n // misses distributed nodes, see\n // https://github.com/webcomponents/shadydom/pull/210#issuecomment-361435503\n querySelectorAll(selector, useNative) {\n if (useNative) {\n const o = Array.prototype.slice.call(querySelectorAll.call(this, selector));\n const root = this.getRootNode();\n return o.filter(e => e.getRootNode() == root);\n }\n return mutation.query(this, function(n) {\n return utils.matchesSelector(n, selector);\n });\n }\n\n};\n\nlet slotMixin = {\n\n /**\n * @this {HTMLSlotElement}\n */\n assignedNodes(options) {\n if (this.localName === 'slot') {\n mutation.renderRootNode(this);\n const nodeData = shadyDataForNode(this);\n return nodeData ?\n ((options && options.flatten ? nodeData.flattenedNodes :\n nodeData.assignedNodes) || []) :\n [];\n }\n }\n\n};\n\nlet elementMixin = utils.extendAll({\n\n /**\n * @this {HTMLElement}\n */\n setAttribute(name, value) {\n mutation.setAttribute(this, name, value);\n },\n\n /**\n * @this {HTMLElement}\n */\n removeAttribute(name) {\n mutation.removeAttribute(this, name);\n },\n\n /**\n * @this {HTMLElement}\n */\n attachShadow(options) {\n return attachShadow(this, options);\n },\n\n /**\n * @this {HTMLElement}\n */\n get slot() {\n return this.getAttribute('slot');\n },\n\n /**\n * @this {HTMLElement}\n */\n set slot(value) {\n mutation.setAttribute(this, 'slot', value);\n },\n\n /**\n * @this {HTMLElement}\n */\n get assignedSlot() {\n return getAssignedSlot(this);\n }\n\n}, fragmentMixin, slotMixin);\n\nObject.defineProperties(elementMixin, ShadowRootAccessor);\n\nlet documentMixin = utils.extendAll({\n /**\n * @this {Document}\n */\n importNode(node, deep) {\n return mutation.importNode(node, deep);\n },\n\n /**\n * @this {Document}\n */\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n\n}, fragmentMixin);\n\nObject.defineProperties(documentMixin, {\n '_activeElement': ActiveElementAccessor.activeElement\n});\n\nlet nativeBlur = HTMLElement.prototype.blur;\n\nlet htmlElementMixin = {\n /**\n * @this {HTMLElement}\n */\n blur() {\n const nodeData = shadyDataForNode(this);\n let root = nodeData && nodeData.root;\n let shadowActive = root && root.activeElement;\n if (shadowActive) {\n shadowActive.blur();\n } else {\n nativeBlur.call(this);\n }\n }\n};\n\nfor (const property of Object.getOwnPropertyNames(Document.prototype)) {\n if (property.substring(0,2) === 'on') {\n Object.defineProperty(htmlElementMixin, property, {\n /** @this {HTMLElement} */\n set: function(fn) {\n const shadyData = ensureShadyDataForNode(this);\n const eventName = property.substring(2);\n shadyData.__onCallbackListeners[property] && this.removeEventListener(eventName, shadyData.__onCallbackListeners[property]);\n this.addEventListener(eventName, fn, {});\n shadyData.__onCallbackListeners[property] = fn;\n },\n /** @this {HTMLElement} */\n get() {\n const shadyData = shadyDataForNode(this);\n return shadyData && shadyData.__onCallbackListeners[property];\n },\n configurable: true\n });\n }\n}\n\nconst shadowRootMixin = {\n /**\n * @this {ShadowRoot}\n */\n addEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.addEventListener(type, fn, optionsOrCapture);\n },\n\n /**\n * @this {ShadowRoot}\n */\n removeEventListener(type, fn, optionsOrCapture) {\n if (typeof optionsOrCapture !== 'object') {\n optionsOrCapture = {\n capture: Boolean(optionsOrCapture)\n }\n }\n optionsOrCapture.__shadyTarget = this;\n this.host.removeEventListener(type, fn, optionsOrCapture);\n },\n\n /**\n * @this {ShadowRoot}\n */\n getElementById(id) {\n let result = mutation.query(this, function(n) {\n return n.id == id;\n }, function(n) {\n return Boolean(n);\n })[0];\n return result || null;\n }\n}\n\nfunction patchBuiltin(proto, obj) {\n let n$ = Object.getOwnPropertyNames(obj);\n for (let i=0; i < n$.length; i++) {\n let n = n$[i];\n let d = Object.getOwnPropertyDescriptor(obj, n);\n // NOTE: we prefer writing directly here because some browsers\n // have descriptors that are writable but not configurable (e.g.\n // `appendChild` on older browsers)\n if (d.value) {\n proto[n] = d.value;\n } else {\n Object.defineProperty(proto, n, d);\n }\n }\n}\n\n// Apply patches to builtins (e.g. Element.prototype). Some of these patches\n// can be done unconditionally (mostly methods like\n// `Element.prototype.appendChild`) and some can only be done when the browser\n// has proper descriptors on the builtin prototype\n// (e.g. `Element.prototype.firstChild`)`. When descriptors are not available,\n// elements are individually patched when needed (see e.g.\n// `patchInside/OutsideElementAccessors` in `patch-accessors.js`).\nexport function patchBuiltins() {\n let nativeHTMLElement =\n (window['customElements'] && window['customElements']['nativeHTMLElement']) ||\n HTMLElement;\n // These patches can always be done, for all supported browsers.\n patchBuiltin(ShadyRoot.prototype, shadowRootMixin);\n patchBuiltin(window.Node.prototype, nodeMixin);\n patchBuiltin(window.Window.prototype, windowMixin);\n patchBuiltin(window.Text.prototype, textMixin);\n patchBuiltin(window.DocumentFragment.prototype, fragmentMixin);\n patchBuiltin(window.Element.prototype, elementMixin);\n patchBuiltin(window.Document.prototype, documentMixin);\n if (window.HTMLSlotElement) {\n patchBuiltin(window.HTMLSlotElement.prototype, slotMixin);\n }\n patchBuiltin(nativeHTMLElement.prototype, htmlElementMixin);\n // These patches can *only* be done\n // on browsers that have proper property descriptors on builtin prototypes.\n // This includes: IE11, Edge, Chrome >= 4?; Safari >= 10, Firefox\n // On older browsers (Chrome <= 4?, Safari 9), a per element patching\n // strategy is used for patching accessors.\n if (utils.settings.hasDescriptors) {\n patchAccessors(window.Node.prototype);\n patchAccessors(window.Text.prototype);\n patchAccessors(window.DocumentFragment.prototype);\n patchAccessors(window.Element.prototype);\n patchAccessors(nativeHTMLElement.prototype);\n patchAccessors(window.Document.prototype);\n if (window.HTMLSlotElement) {\n patchAccessors(window.HTMLSlotElement.prototype);\n }\n }\n patchShadowRootAccessors(ShadyRoot.prototype);\n}\n","/**\n@license\nCopyright (c) 2016 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/**\n * Patches elements that interacts with ShadyDOM\n * such that tree traversal and mutation apis act like they would under\n * ShadowDOM.\n *\n * This import enables seemless interaction with ShadyDOM powered\n * custom elements, enabling better interoperation with 3rd party code,\n * libraries, and frameworks that use DOM tree manipulation apis.\n */\n\nimport * as utils from './utils.js';\nimport {flush, enqueue} from './flush.js';\nimport {observeChildren, unobserveChildren, filterMutations} from './observe-changes.js';\nimport * as nativeMethods from './native-methods.js';\nimport {accessors as nativeTree} from './native-tree.js';\nimport {patchBuiltins} from './patch-builtins.js';\nimport {patchInsideElementAccessors, patchOutsideElementAccessors} from './patch-accessors.js';\nimport {patchEvents} from './patch-events.js';\nimport {ShadyRoot} from './attach-shadow.js';\n\nif (utils.settings.inUse) {\n let ShadyDOM = {\n // TODO(sorvell): remove when Polymer does not depend on this.\n 'inUse': utils.settings.inUse,\n // NOTE: old browsers without prototype accessors (very old Chrome\n // and Safari) need manually patched accessors to properly set\n // `innerHTML` and `textContent` when an element is:\n // (1) inside a shadowRoot\n // (2) does not have special (slot) children itself\n // (3) and setting the property needs to provoke distribution (because\n // a nested slot is added/removed)\n 'patch': (node) => {\n patchInsideElementAccessors(node);\n patchOutsideElementAccessors(node);\n return node;\n },\n 'isShadyRoot': utils.isShadyRoot,\n 'enqueue': enqueue,\n 'flush': flush,\n 'settings': utils.settings,\n 'filterMutations': filterMutations,\n 'observeChildren': observeChildren,\n 'unobserveChildren': unobserveChildren,\n 'nativeMethods': nativeMethods,\n 'nativeTree': nativeTree,\n // Set to true to defer native custom elements connection until the\n // document has fully parsed. This enables custom elements that create\n // shadowRoots to be defined while the document is loading. Elements\n // customized as they are created by the parser will successfully\n // render with this flag on.\n 'deferConnectionCallbacks': utils.settings['deferConnectionCallbacks']\n };\n\n window['ShadyDOM'] = ShadyDOM;\n\n // Apply patches to events...\n patchEvents();\n // Apply patches to builtins (e.g. Element.prototype) where applicable.\n patchBuiltins();\n\n window.ShadowRoot = ShadyRoot;\n}\n","const reservedTagList = new Set([\n 'annotation-xml',\n 'color-profile',\n 'font-face',\n 'font-face-src',\n 'font-face-uri',\n 'font-face-format',\n 'font-face-name',\n 'missing-glyph',\n]);\n\n/**\n * @param {string} localName\n * @returns {boolean}\n */\nexport function isValidCustomElementName(localName) {\n const reserved = reservedTagList.has(localName);\n const validForm = /^[a-z][.0-9_a-z]*-[\\-.0-9_a-z]*$/.test(localName);\n return !reserved && validForm;\n}\n\n/**\n * @private\n * @param {!Node} node\n * @return {boolean}\n */\nexport function isConnected(node) {\n // Use `Node#isConnected`, if defined.\n const nativeValue = node.isConnected;\n if (nativeValue !== undefined) {\n return nativeValue;\n }\n\n /** @type {?Node|undefined} */\n let current = node;\n while (current && !(current.__CE_isImportDocument || current instanceof Document)) {\n current = current.parentNode || (window.ShadowRoot && current instanceof ShadowRoot ? current.host : undefined);\n }\n return !!(current && (current.__CE_isImportDocument || current instanceof Document));\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextSiblingOrAncestorSibling(root, start) {\n let node = start;\n while (node && node !== root && !node.nextSibling) {\n node = node.parentNode;\n }\n return (!node || node === root) ? null : node.nextSibling;\n}\n\n/**\n * @param {!Node} root\n * @param {!Node} start\n * @return {?Node}\n */\nfunction nextNode(root, start) {\n return start.firstChild ? start.firstChild : nextSiblingOrAncestorSibling(root, start);\n}\n\n/**\n * @param {!Node} root\n * @param {!function(!Element)} callback\n * @param {!Set<Node>=} visitedImports\n */\nexport function walkDeepDescendantElements(root, callback, visitedImports = new Set()) {\n let node = root;\n while (node) {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = /** @type {!Element} */(node);\n\n callback(element);\n\n const localName = element.localName;\n if (localName === 'link' && element.getAttribute('rel') === 'import') {\n // If this import (polyfilled or not) has it's root node available,\n // walk it.\n const importNode = /** @type {!Node} */ (element.import);\n if (importNode instanceof Node && !visitedImports.has(importNode)) {\n // Prevent multiple walks of the same import root.\n visitedImports.add(importNode);\n\n for (let child = importNode.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n\n // Ignore descendants of import links to prevent attempting to walk the\n // elements created by the HTML Imports polyfill that we just walked\n // above.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n } else if (localName === 'template') {\n // Ignore descendants of templates. There shouldn't be any descendants\n // because they will be moved into `.content` during construction in\n // browsers that support template but, in case they exist and are still\n // waiting to be moved by a polyfill, they will be ignored.\n node = nextSiblingOrAncestorSibling(root, element);\n continue;\n }\n\n // Walk shadow roots.\n const shadowRoot = element.__CE_shadowRoot;\n if (shadowRoot) {\n for (let child = shadowRoot.firstChild; child; child = child.nextSibling) {\n walkDeepDescendantElements(child, callback, visitedImports);\n }\n }\n }\n\n node = nextNode(root, node);\n }\n}\n\n/**\n * Used to suppress Closure's \"Modifying the prototype is only allowed if the\n * constructor is in the same scope\" warning without using\n * `@suppress {newCheckTypes, duplicate}` because `newCheckTypes` is too broad.\n *\n * @param {!Object} destination\n * @param {string} name\n * @param {*} value\n */\nexport function setPropertyUnchecked(destination, name, value) {\n destination[name] = value;\n}\n","import * as Utilities from './Utilities.js';\nimport CEState from './CustomElementState.js';\n\nexport default class CustomElementInternals {\n constructor() {\n /** @type {!Map<string, !CustomElementDefinition>} */\n this._localNameToDefinition = new Map();\n\n /** @type {!Map<!Function, !CustomElementDefinition>} */\n this._constructorToDefinition = new Map();\n\n /** @type {!Array<!function(!Node)>} */\n this._patches = [];\n\n /** @type {boolean} */\n this._hasPatches = false;\n }\n\n /**\n * @param {string} localName\n * @param {!CustomElementDefinition} definition\n */\n setDefinition(localName, definition) {\n this._localNameToDefinition.set(localName, definition);\n this._constructorToDefinition.set(definition.constructor, definition);\n }\n\n /**\n * @param {string} localName\n * @return {!CustomElementDefinition|undefined}\n */\n localNameToDefinition(localName) {\n return this._localNameToDefinition.get(localName);\n }\n\n /**\n * @param {!Function} constructor\n * @return {!CustomElementDefinition|undefined}\n */\n constructorToDefinition(constructor) {\n return this._constructorToDefinition.get(constructor);\n }\n\n /**\n * @param {!function(!Node)} listener\n */\n addPatch(listener) {\n this._hasPatches = true;\n this._patches.push(listener);\n }\n\n /**\n * @param {!Node} node\n */\n patchTree(node) {\n if (!this._hasPatches) return;\n\n Utilities.walkDeepDescendantElements(node, element => this.patch(element));\n }\n\n /**\n * @param {!Node} node\n */\n patch(node) {\n if (!this._hasPatches) return;\n\n if (node.__CE_patched) return;\n node.__CE_patched = true;\n\n for (let i = 0; i < this._patches.length; i++) {\n this._patches[i](node);\n }\n }\n\n /**\n * @param {!Node} root\n */\n connectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.connectedCallback(element);\n } else {\n this.upgradeElement(element);\n }\n }\n }\n\n /**\n * @param {!Node} root\n */\n disconnectTree(root) {\n const elements = [];\n\n Utilities.walkDeepDescendantElements(root, element => elements.push(element));\n\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.__CE_state === CEState.custom) {\n this.disconnectedCallback(element);\n }\n }\n }\n\n /**\n * Upgrades all uncustomized custom elements at and below a root node for\n * which there is a definition. When custom element reaction callbacks are\n * assumed to be called synchronously (which, by the current DOM / HTML spec\n * definitions, they are *not*), callbacks for both elements customized\n * synchronously by the parser and elements being upgraded occur in the same\n * relative order.\n *\n * NOTE: This function, when used to simulate the construction of a tree that\n * is already created but not customized (i.e. by the parser), does *not*\n * prevent the element from reading the 'final' (true) state of the tree. For\n * example, the element, during truly synchronous parsing / construction would\n * see that it contains no children as they have not yet been inserted.\n * However, this function does not modify the tree, the element will\n * (incorrectly) have children. Additionally, self-modification restrictions\n * for custom element constructors imposed by the DOM spec are *not* enforced.\n *\n *\n * The following nested list shows the steps extending down from the HTML\n * spec's parsing section that cause elements to be synchronously created and\n * upgraded:\n *\n * The \"in body\" insertion mode:\n * https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody\n * - Switch on token:\n * .. other cases ..\n * -> Any other start tag\n * - [Insert an HTML element](below) for the token.\n *\n * Insert an HTML element:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-an-html-element\n * - Insert a foreign element for the token in the HTML namespace:\n * https://html.spec.whatwg.org/multipage/syntax.html#insert-a-foreign-element\n * - Create an element for a token:\n * https://html.spec.whatwg.org/multipage/syntax.html#create-an-element-for-the-token\n * - Will execute script flag is true?\n * - (Element queue pushed to the custom element reactions stack.)\n * - Create an element:\n * https://dom.spec.whatwg.org/#concept-create-element\n * - Sync CE flag is true?\n * - Constructor called.\n * - Self-modification restrictions enforced.\n * - Sync CE flag is false?\n * - (Upgrade reaction enqueued.)\n * - Attributes appended to element.\n * (`attributeChangedCallback` reactions enqueued.)\n * - Will execute script flag is true?\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n * - (Element queue pushed to the custom element reactions stack.)\n * - Insert the element:\n * https://dom.spec.whatwg.org/#concept-node-insert\n * - Shadow-including descendants are connected. During parsing\n * construction, there are no shadow-*excluding* descendants.\n * However, the constructor may have validly attached a shadow\n * tree to itself and added descendants to that shadow tree.\n * (`connectedCallback` reactions enqueued.)\n * - (Element queue popped from the custom element reactions stack.\n * Reactions in the popped stack are invoked.)\n *\n * @param {!Node} root\n * @param {{\n * visitedImports: (!Set<!Node>|undefined),\n * upgrade: (!function(!Element)|undefined),\n * }=} options\n */\n patchAndUpgradeTree(root, options = {}) {\n const visitedImports = options.visitedImports || new Set();\n const upgrade = options.upgrade || (element => this.upgradeElement(element));\n\n const elements = [];\n\n const gatherElements = element => {\n if (element.localName === 'link' && element.getAttribute('rel') === 'import') {\n // The HTML Imports polyfill sets a descendant element of the link to\n // the `import` property, specifically this is *not* a Document.\n const importNode = /** @type {?Node} */ (element.import);\n\n if (importNode instanceof Node) {\n importNode.__CE_isImportDocument = true;\n // Connected links are associated with the registry.\n importNode.__CE_hasRegistry = true;\n }\n\n if (importNode && importNode.readyState === 'complete') {\n importNode.__CE_documentLoadHandled = true;\n } else {\n // If this link's import root is not available, its contents can't be\n // walked. Wait for 'load' and walk it when it's ready.\n element.addEventListener('load', () => {\n const importNode = /** @type {!Node} */ (element.import);\n\n if (importNode.__CE_documentLoadHandled) return;\n importNode.__CE_documentLoadHandled = true;\n\n // Clone the `visitedImports` set that was populated sync during\n // the `patchAndUpgradeTree` call that caused this 'load' handler to\n // be added. Then, remove *this* link's import node so that we can\n // walk that import again, even if it was partially walked later\n // during the same `patchAndUpgradeTree` call.\n const clonedVisitedImports = new Set(visitedImports);\n clonedVisitedImports.delete(importNode);\n\n this.patchAndUpgradeTree(importNode, {visitedImports: clonedVisitedImports, upgrade});\n });\n }\n } else {\n elements.push(element);\n }\n };\n\n // `walkDeepDescendantElements` populates (and internally checks against)\n // `visitedImports` when traversing a loaded import.\n Utilities.walkDeepDescendantElements(root, gatherElements, visitedImports);\n\n if (this._hasPatches) {\n for (let i = 0; i < elements.length; i++) {\n this.patch(elements[i]);\n }\n }\n\n for (let i = 0; i < elements.length; i++) {\n upgrade(elements[i]);\n }\n }\n\n /**\n * @param {!Element} element\n */\n upgradeElement(element) {\n const currentState = element.__CE_state;\n if (currentState !== undefined) return;\n\n // Prevent elements created in documents without a browsing context from\n // upgrading.\n //\n // https://html.spec.whatwg.org/multipage/custom-elements.html#look-up-a-custom-element-definition\n // \"If document does not have a browsing context, return null.\"\n //\n // https://html.spec.whatwg.org/multipage/window-object.html#dom-document-defaultview\n // \"The defaultView IDL attribute of the Document interface, on getting,\n // must return this Document's browsing context's WindowProxy object, if\n // this Document has an associated browsing context, or null otherwise.\"\n const ownerDocument = element.ownerDocument;\n if (\n !ownerDocument.defaultView &&\n !(ownerDocument.__CE_isImportDocument && ownerDocument.__CE_hasRegistry)\n ) return;\n\n const definition = this.localNameToDefinition(element.localName);\n if (!definition) return;\n\n definition.constructionStack.push(element);\n\n const constructor = definition.constructor;\n try {\n try {\n let result = new (constructor)();\n if (result !== element) {\n throw new Error('The custom element constructor did not produce the element being upgraded.');\n }\n } finally {\n definition.constructionStack.pop();\n }\n } catch (e) {\n element.__CE_state = CEState.failed;\n throw e;\n }\n\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n\n if (definition.attributeChangedCallback) {\n const observedAttributes = definition.observedAttributes;\n for (let i = 0; i < observedAttributes.length; i++) {\n const name = observedAttributes[i];\n const value = element.getAttribute(name);\n if (value !== null) {\n this.attributeChangedCallback(element, name, null, value, null);\n }\n }\n }\n\n if (Utilities.isConnected(element)) {\n this.connectedCallback(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n connectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.connectedCallback) {\n definition.connectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n */\n disconnectedCallback(element) {\n const definition = element.__CE_definition;\n if (definition.disconnectedCallback) {\n definition.disconnectedCallback.call(element);\n }\n }\n\n /**\n * @param {!Element} element\n * @param {string} name\n * @param {?string} oldValue\n * @param {?string} newValue\n * @param {?string} namespace\n */\n attributeChangedCallback(element, name, oldValue, newValue, namespace) {\n const definition = element.__CE_definition;\n if (\n definition.attributeChangedCallback &&\n definition.observedAttributes.indexOf(name) > -1\n ) {\n definition.attributeChangedCallback.call(element, name, oldValue, newValue, namespace);\n }\n }\n}\n","/**\n * @enum {number}\n */\nconst CustomElementState = {\n custom: 1,\n failed: 2,\n};\n\nexport default CustomElementState;\n","import CustomElementInternals from './CustomElementInternals.js';\n\nexport default class DocumentConstructionObserver {\n constructor(internals, doc) {\n /**\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @type {!Document}\n */\n this._document = doc;\n\n /**\n * @type {MutationObserver|undefined}\n */\n this._observer = undefined;\n\n\n // Simulate tree construction for all currently accessible nodes in the\n // document.\n this._internals.patchAndUpgradeTree(this._document);\n\n if (this._document.readyState === 'loading') {\n this._observer = new MutationObserver(this._handleMutations.bind(this));\n\n // Nodes created by the parser are given to the observer *before* the next\n // task runs. Inline scripts are run in a new task. This means that the\n // observer will be able to handle the newly parsed nodes before the inline\n // script is run.\n this._observer.observe(this._document, {\n childList: true,\n subtree: true,\n });\n }\n }\n\n disconnect() {\n if (this._observer) {\n this._observer.disconnect();\n }\n }\n\n /**\n * @param {!Array<!MutationRecord>} mutations\n */\n _handleMutations(mutations) {\n // Once the document's `readyState` is 'interactive' or 'complete', all new\n // nodes created within that document will be the result of script and\n // should be handled by patching.\n const readyState = this._document.readyState;\n if (readyState === 'interactive' || readyState === 'complete') {\n this.disconnect();\n }\n\n for (let i = 0; i < mutations.length; i++) {\n const addedNodes = mutations[i].addedNodes;\n for (let j = 0; j < addedNodes.length; j++) {\n const node = addedNodes[j];\n this._internals.patchAndUpgradeTree(node);\n }\n }\n }\n}\n","import CustomElementInternals from './CustomElementInternals.js';\nimport DocumentConstructionObserver from './DocumentConstructionObserver.js';\nimport Deferred from './Deferred.js';\nimport * as Utilities from './Utilities.js';\n\n/**\n * @unrestricted\n */\nexport default class CustomElementRegistry {\n\n /**\n * @param {!CustomElementInternals} internals\n */\n constructor(internals) {\n /**\n * @private\n * @type {boolean}\n */\n this._elementDefinitionIsRunning = false;\n\n /**\n * @private\n * @type {!CustomElementInternals}\n */\n this._internals = internals;\n\n /**\n * @private\n * @type {!Map<string, !Deferred<undefined>>}\n */\n this._whenDefinedDeferred = new Map();\n\n /**\n * The default flush callback triggers the document walk synchronously.\n * @private\n * @type {!Function}\n */\n this._flushCallback = fn => fn();\n\n /**\n * @private\n * @type {boolean}\n */\n this._flushPending = false;\n\n /**\n * @private\n * @type {!Array<!CustomElementDefinition>}\n */\n this._pendingDefinitions = [];\n\n /**\n * @private\n * @type {!DocumentConstructionObserver}\n */\n this._documentConstructionObserver = new DocumentConstructionObserver(internals, document);\n }\n\n /**\n * @param {string} localName\n * @param {!Function} constructor\n */\n define(localName, constructor) {\n if (!(constructor instanceof Function)) {\n throw new TypeError('Custom element constructors must be functions.');\n }\n\n if (!Utilities.isValidCustomElementName(localName)) {\n throw new SyntaxError(`The element name '${localName}' is not valid.`);\n }\n\n if (this._internals.localNameToDefinition(localName)) {\n throw new Error(`A custom element with name '${localName}' has already been defined.`);\n }\n\n if (this._elementDefinitionIsRunning) {\n throw new Error('A custom element is already being defined.');\n }\n this._elementDefinitionIsRunning = true;\n\n let connectedCallback;\n let disconnectedCallback;\n let adoptedCallback;\n let attributeChangedCallback;\n let observedAttributes;\n try {\n /** @type {!Object} */\n const prototype = constructor.prototype;\n if (!(prototype instanceof Object)) {\n throw new TypeError('The custom element constructor\\'s prototype is not an object.');\n }\n\n function getCallback(name) {\n const callbackValue = prototype[name];\n if (callbackValue !== undefined && !(callbackValue instanceof Function)) {\n throw new Error(`The '${name}' callback must be a function.`);\n }\n return callbackValue;\n }\n\n connectedCallback = getCallback('connectedCallback');\n disconnectedCallback = getCallback('disconnectedCallback');\n adoptedCallback = getCallback('adoptedCallback');\n attributeChangedCallback = getCallback('attributeChangedCallback');\n observedAttributes = constructor['observedAttributes'] || [];\n } catch (e) {\n return;\n } finally {\n this._elementDefinitionIsRunning = false;\n }\n\n const definition = {\n localName,\n constructor,\n connectedCallback,\n disconnectedCallback,\n adoptedCallback,\n attributeChangedCallback,\n observedAttributes,\n constructionStack: [],\n };\n\n this._internals.setDefinition(localName, definition);\n this._pendingDefinitions.push(definition);\n\n // If we've already called the flush callback and it hasn't called back yet,\n // don't call it again.\n if (!this._flushPending) {\n this._flushPending = true;\n this._flushCallback(() => this._flush());\n }\n }\n\n upgrade(element) {\n this._internals.patchAndUpgradeTree(element);\n }\n\n _flush() {\n // If no new definitions were defined, don't attempt to flush. This could\n // happen if a flush callback keeps the function it is given and calls it\n // multiple times.\n if (this._flushPending === false) return;\n this._flushPending = false;\n\n const pendingDefinitions = this._pendingDefinitions;\n\n /**\n * Unupgraded elements with definitions that were defined *before* the last\n * flush, in document order.\n * @type {!Array<!Element>}\n */\n const elementsWithStableDefinitions = [];\n\n /**\n * A map from `localName`s of definitions that were defined *after* the last\n * flush to unupgraded elements matching that definition, in document order.\n * @type {!Map<string, !Array<!Element>>}\n */\n const elementsWithPendingDefinitions = new Map();\n for (let i = 0; i < pendingDefinitions.length; i++) {\n elementsWithPendingDefinitions.set(pendingDefinitions[i].localName, []);\n }\n\n this._internals.patchAndUpgradeTree(document, {\n upgrade: element => {\n // Ignore the element if it has already upgraded or failed to upgrade.\n if (element.__CE_state !== undefined) return;\n\n const localName = element.localName;\n\n // If there is an applicable pending definition for the element, add the\n // element to the list of elements to be upgraded with that definition.\n const pendingElements = elementsWithPendingDefinitions.get(localName);\n if (pendingElements) {\n pendingElements.push(element);\n // If there is *any other* applicable definition for the element, add it\n // to the list of elements with stable definitions that need to be upgraded.\n } else if (this._internals.localNameToDefinition(localName)) {\n elementsWithStableDefinitions.push(element);\n }\n },\n });\n\n // Upgrade elements with 'stable' definitions first.\n for (let i = 0; i < elementsWithStableDefinitions.length; i++) {\n this._internals.upgradeElement(elementsWithStableDefinitions[i]);\n }\n\n // Upgrade elements with 'pending' definitions in the order they were defined.\n while (pendingDefinitions.length > 0) {\n const definition = pendingDefinitions.shift();\n const localName = definition.localName;\n\n // Attempt to upgrade all applicable elements.\n const pendingUpgradableElements = elementsWithPendingDefinitions.get(definition.localName);\n for (let i = 0; i < pendingUpgradableElements.length; i++) {\n this._internals.upgradeElement(pendingUpgradableElements[i]);\n }\n\n // Resolve any promises created by `whenDefined` for the definition.\n const deferred = this._whenDefinedDeferred.get(localName);\n if (deferred) {\n deferred.resolve(undefined);\n }\n }\n }\n\n /**\n * @param {string} localName\n * @return {Function|undefined}\n */\n get(localName) {\n const definition = this._internals.localNameToDefinition(localName);\n if (definition) {\n return definition.constructor;\n }\n\n return undefined;\n }\n\n /**\n * @param {string} localName\n * @return {!Promise<undefined>}\n */\n whenDefined(localName) {\n if (!Utilities.isValidCustomElementName(localName)) {\n return Promise.reject(new SyntaxError(`'${localName}' is not a valid custom element name.`));\n }\n\n const prior = this._whenDefinedDeferred.get(localName);\n if (prior) {\n return prior.toPromise();\n }\n\n const deferred = new Deferred();\n this._whenDefinedDeferred.set(localName, deferred);\n\n const definition = this._internals.localNameToDefinition(localName);\n // Resolve immediately only if the given local name has a definition *and*\n // the full document walk to upgrade elements with that local name has\n // already happened.\n if (definition && !this._pendingDefinitions.some(d => d.localName === localName)) {\n deferred.resolve(undefined);\n }\n\n return deferred.toPromise();\n }\n\n polyfillWrapFlushCallback(outer) {\n this._documentConstructionObserver.disconnect();\n const inner = this._flushCallback;\n this._flushCallback = flush => outer(() => inner(flush));\n }\n}\n\n// Closure compiler exports.\nwindow['CustomElementRegistry'] = CustomElementRegistry;\nCustomElementRegistry.prototype['define'] = CustomElementRegistry.prototype.define;\nCustomElementRegistry.prototype['upgrade'] = CustomElementRegistry.prototype.upgrade;\nCustomElementRegistry.prototype['get'] = CustomElementRegistry.prototype.get;\nCustomElementRegistry.prototype['whenDefined'] = CustomElementRegistry.prototype.whenDefined;\nCustomElementRegistry.prototype['polyfillWrapFlushCallback'] = CustomElementRegistry.prototype.polyfillWrapFlushCallback;\n","/**\n * @template T\n */\nexport default class Deferred {\n constructor() {\n /**\n * @private\n * @type {T|undefined}\n */\n this._value = undefined;\n\n /**\n * @private\n * @type {Function|undefined}\n */\n this._resolve = undefined;\n\n /**\n * @private\n * @type {!Promise<T>}\n */\n this._promise = new Promise(resolve => {\n this._resolve = resolve;\n\n if (this._value) {\n resolve(this._value);\n }\n });\n }\n\n /**\n * @param {T} value\n */\n resolve(value) {\n if (this._value) {\n throw new Error('Already resolved.');\n }\n\n this._value = value;\n\n if (this._resolve) {\n this._resolve(value);\n }\n }\n\n /**\n * @return {!Promise<T>}\n */\n toPromise() {\n return this._promise;\n }\n}\n","export default {\n Document_createElement: window.Document.prototype.createElement,\n Document_createElementNS: window.Document.prototype.createElementNS,\n Document_importNode: window.Document.prototype.importNode,\n Document_prepend: window.Document.prototype['prepend'],\n Document_append: window.Document.prototype['append'],\n DocumentFragment_prepend: window.DocumentFragment.prototype['prepend'],\n DocumentFragment_append: window.DocumentFragment.prototype['append'],\n Node_cloneNode: window.Node.prototype.cloneNode,\n Node_appendChild: window.Node.prototype.appendChild,\n Node_insertBefore: window.Node.prototype.insertBefore,\n Node_removeChild: window.Node.prototype.removeChild,\n Node_replaceChild: window.Node.prototype.replaceChild,\n Node_textContent: Object.getOwnPropertyDescriptor(window.Node.prototype, 'textContent'),\n Element_attachShadow: window.Element.prototype['attachShadow'],\n Element_innerHTML: Object.getOwnPropertyDescriptor(window.Element.prototype, 'innerHTML'),\n Element_getAttribute: window.Element.prototype.getAttribute,\n Element_setAttribute: window.Element.prototype.setAttribute,\n Element_removeAttribute: window.Element.prototype.removeAttribute,\n Element_getAttributeNS: window.Element.prototype.getAttributeNS,\n Element_setAttributeNS: window.Element.prototype.setAttributeNS,\n Element_removeAttributeNS: window.Element.prototype.removeAttributeNS,\n Element_insertAdjacentElement: window.Element.prototype['insertAdjacentElement'],\n Element_insertAdjacentHTML: window.Element.prototype['insertAdjacentHTML'],\n Element_prepend: window.Element.prototype['prepend'],\n Element_append: window.Element.prototype['append'],\n Element_before: window.Element.prototype['before'],\n Element_after: window.Element.prototype['after'],\n Element_replaceWith: window.Element.prototype['replaceWith'],\n Element_remove: window.Element.prototype['remove'],\n HTMLElement: window.HTMLElement,\n HTMLElement_innerHTML: Object.getOwnPropertyDescriptor(window.HTMLElement.prototype, 'innerHTML'),\n HTMLElement_insertAdjacentElement: window.HTMLElement.prototype['insertAdjacentElement'],\n HTMLElement_insertAdjacentHTML: window.HTMLElement.prototype['insertAdjacentHTML'],\n};\n","/**\n * This class exists only to work around Closure's lack of a way to describe\n * singletons. It represents the 'already constructed marker' used in custom\n * element construction stacks.\n *\n * https://html.spec.whatwg.org/#concept-already-constructed-marker\n */\nclass AlreadyConstructedMarker {}\n\nexport default new AlreadyConstructedMarker();\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * prepend: !function(...(!Node|string)),\n * append: !function(...(!Node|string)),\n * }}\n */\nlet ParentNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ParentNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function appendPrependPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.prepend !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'prepend', appendPrependPatch(builtIn.prepend));\n }\n\n if (builtIn.append !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'append', appendPrependPatch(builtIn.append));\n }\n};\n","/**\n * @license\n * Copyright (c) 2016 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\nimport CustomElementInternals from './CustomElementInternals.js';\nimport CustomElementRegistry from './CustomElementRegistry.js';\n\nimport PatchHTMLElement from './Patch/HTMLElement.js';\nimport PatchDocument from './Patch/Document.js';\nimport PatchDocumentFragment from './Patch/DocumentFragment.js';\nimport PatchNode from './Patch/Node.js';\nimport PatchElement from './Patch/Element.js';\n\nconst priorCustomElements = window['customElements'];\n\nif (!priorCustomElements ||\n priorCustomElements['forcePolyfill'] ||\n (typeof priorCustomElements['define'] != 'function') ||\n (typeof priorCustomElements['get'] != 'function')) {\n /** @type {!CustomElementInternals} */\n const internals = new CustomElementInternals();\n\n PatchHTMLElement(internals);\n PatchDocument(internals);\n PatchDocumentFragment(internals);\n PatchNode(internals);\n PatchElement(internals);\n\n // The main document is always associated with the registry.\n document.__CE_hasRegistry = true;\n\n /** @type {!CustomElementRegistry} */\n const customElements = new CustomElementRegistry(internals);\n\n Object.defineProperty(window, 'customElements', {\n configurable: true,\n enumerable: true,\n value: customElements,\n });\n}\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport AlreadyConstructedMarker from '../AlreadyConstructedMarker.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n window['HTMLElement'] = (function() {\n /**\n * @type {function(new: HTMLElement): !HTMLElement}\n */\n function HTMLElement() {\n // This should really be `new.target` but `new.target` can't be emulated\n // in ES5. Assuming the user keeps the default value of the constructor's\n // prototype's `constructor` property, this is equivalent.\n /** @type {!Function} */\n const constructor = this.constructor;\n\n const definition = internals.constructorToDefinition(constructor);\n if (!definition) {\n throw new Error('The custom element being constructed was not registered with `customElements`.');\n }\n\n const constructionStack = definition.constructionStack;\n\n if (constructionStack.length === 0) {\n const element = Native.Document_createElement.call(document, definition.localName);\n Object.setPrototypeOf(element, constructor.prototype);\n element.__CE_state = CEState.custom;\n element.__CE_definition = definition;\n internals.patch(element);\n return element;\n }\n\n const lastIndex = constructionStack.length - 1;\n const element = constructionStack[lastIndex];\n if (element === AlreadyConstructedMarker) {\n throw new Error('The HTMLElement constructor was either called reentrantly for this constructor or called multiple times.');\n }\n constructionStack[lastIndex] = AlreadyConstructedMarker;\n\n Object.setPrototypeOf(element, constructor.prototype);\n internals.patch(/** @type {!HTMLElement} */ (element));\n\n return element;\n }\n\n HTMLElement.prototype = Native.HTMLElement.prototype;\n // Safari 9 has `writable: false` on the propertyDescriptor\n // Make it writable so that TypeScript can patch up the\n // constructor in the ES5 compiled code.\n Object.defineProperty(HTMLElement.prototype, 'constructor', {\n writable: true,\n configurable: true,\n enumerable: false,\n value: HTMLElement\n });\n\n return HTMLElement;\n })();\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n Utilities.setPropertyUnchecked(Document.prototype, 'createElement',\n /**\n * @this {Document}\n * @param {string} localName\n * @return {!Element}\n */\n function(localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElement.call(this, localName));\n internals.patch(result);\n return result;\n });\n\n Utilities.setPropertyUnchecked(Document.prototype, 'importNode',\n /**\n * @this {Document}\n * @param {!Node} node\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(node, deep) {\n const clone = Native.Document_importNode.call(this, node, deep);\n // Only create custom elements if this document is associated with the registry.\n if (!this.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n const NS_HTML = \"http://www.w3.org/1999/xhtml\";\n\n Utilities.setPropertyUnchecked(Document.prototype, 'createElementNS',\n /**\n * @this {Document}\n * @param {?string} namespace\n * @param {string} localName\n * @return {!Element}\n */\n function(namespace, localName) {\n // Only create custom elements if this document is associated with the registry.\n if (this.__CE_hasRegistry && (namespace === null || namespace === NS_HTML)) {\n const definition = internals.localNameToDefinition(localName);\n if (definition) {\n return new (definition.constructor)();\n }\n }\n\n const result = /** @type {!Element} */\n (Native.Document_createElementNS.call(this, namespace, localName));\n internals.patch(result);\n return result;\n });\n\n PatchParentNode(internals, Document.prototype, {\n prepend: Native.Document_prepend,\n append: Native.Document_append,\n });\n};\n","import CustomElementInternals from '../CustomElementInternals.js';\nimport Native from './Native.js';\nimport PatchParentNode from './Interface/ParentNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n PatchParentNode(internals, DocumentFragment.prototype, {\n prepend: Native.DocumentFragment_prepend,\n append: Native.DocumentFragment_append,\n });\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport * as Utilities from '../Utilities.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n // `Node#nodeValue` is implemented on `Attr`.\n // `Node#textContent` is implemented on `Attr`, `Element`.\n\n Utilities.setPropertyUnchecked(Node.prototype, 'insertBefore',\n /**\n * @this {Node}\n * @param {!Node} node\n * @param {?Node} refNode\n * @return {!Node}\n */\n function(node, refNode) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_insertBefore.call(this, node, refNode);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'appendChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n if (node instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(node.childNodes);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_appendChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n if (Utilities.isConnected(this)) {\n internals.connectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'cloneNode',\n /**\n * @this {Node}\n * @param {boolean=} deep\n * @return {!Node}\n */\n function(deep) {\n const clone = Native.Node_cloneNode.call(this, deep);\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(clone);\n } else {\n internals.patchAndUpgradeTree(clone);\n }\n return clone;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'removeChild',\n /**\n * @this {Node}\n * @param {!Node} node\n * @return {!Node}\n */\n function(node) {\n const nodeWasConnected = Utilities.isConnected(node);\n const nativeResult = Native.Node_removeChild.call(this, node);\n\n if (nodeWasConnected) {\n internals.disconnectTree(node);\n }\n\n return nativeResult;\n });\n\n Utilities.setPropertyUnchecked(Node.prototype, 'replaceChild',\n /**\n * @this {Node}\n * @param {!Node} nodeToInsert\n * @param {!Node} nodeToRemove\n * @return {!Node}\n */\n function(nodeToInsert, nodeToRemove) {\n if (nodeToInsert instanceof DocumentFragment) {\n const insertedNodes = Array.prototype.slice.apply(nodeToInsert.childNodes);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n\n // DocumentFragments can't be connected, so `disconnectTree` will never\n // need to be called on a DocumentFragment's children after inserting it.\n\n if (Utilities.isConnected(this)) {\n internals.disconnectTree(nodeToRemove);\n for (let i = 0; i < insertedNodes.length; i++) {\n internals.connectTree(insertedNodes[i]);\n }\n }\n\n return nativeResult;\n }\n\n const nodeToInsertWasConnected = Utilities.isConnected(nodeToInsert);\n const nativeResult = Native.Node_replaceChild.call(this, nodeToInsert, nodeToRemove);\n const thisIsConnected = Utilities.isConnected(this);\n\n if (thisIsConnected) {\n internals.disconnectTree(nodeToRemove);\n }\n\n if (nodeToInsertWasConnected) {\n internals.disconnectTree(nodeToInsert);\n }\n\n if (thisIsConnected) {\n internals.connectTree(nodeToInsert);\n }\n\n return nativeResult;\n });\n\n\n function patch_textContent(destination, baseDescriptor) {\n Object.defineProperty(destination, 'textContent', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Node} */ function(assignedValue) {\n // If this is a text node then there are no nodes to disconnect.\n if (this.nodeType === Node.TEXT_NODE) {\n baseDescriptor.set.call(this, assignedValue);\n return;\n }\n\n let removedNodes = undefined;\n // Checking for `firstChild` is faster than reading `childNodes.length`\n // to compare with 0.\n if (this.firstChild) {\n // Using `childNodes` is faster than `children`, even though we only\n // care about elements.\n const childNodes = this.childNodes;\n const childNodesLength = childNodes.length;\n if (childNodesLength > 0 && Utilities.isConnected(this)) {\n // Copying an array by iterating is faster than using slice.\n removedNodes = new Array(childNodesLength);\n for (let i = 0; i < childNodesLength; i++) {\n removedNodes[i] = childNodes[i];\n }\n }\n }\n\n baseDescriptor.set.call(this, assignedValue);\n\n if (removedNodes) {\n for (let i = 0; i < removedNodes.length; i++) {\n internals.disconnectTree(removedNodes[i]);\n }\n }\n },\n });\n }\n\n if (Native.Node_textContent && Native.Node_textContent.get) {\n patch_textContent(Node.prototype, Native.Node_textContent);\n } else {\n internals.addPatch(function(element) {\n patch_textContent(element, {\n enumerable: true,\n configurable: true,\n // NOTE: This implementation of the `textContent` getter assumes that\n // text nodes' `textContent` getter will not be patched.\n get: /** @this {Node} */ function() {\n /** @type {!Array<string>} */\n const parts = [];\n\n for (let i = 0; i < this.childNodes.length; i++) {\n parts.push(this.childNodes[i].textContent);\n }\n\n return parts.join('');\n },\n set: /** @this {Node} */ function(assignedValue) {\n while (this.firstChild) {\n Native.Node_removeChild.call(this, this.firstChild);\n }\n Native.Node_appendChild.call(this, document.createTextNode(assignedValue));\n },\n });\n });\n }\n};\n","import Native from './Native.js';\nimport CustomElementInternals from '../CustomElementInternals.js';\nimport CEState from '../CustomElementState.js';\nimport * as Utilities from '../Utilities.js';\n\nimport PatchParentNode from './Interface/ParentNode.js';\nimport PatchChildNode from './Interface/ChildNode.js';\n\n/**\n * @param {!CustomElementInternals} internals\n */\nexport default function(internals) {\n if (Native.Element_attachShadow) {\n Utilities.setPropertyUnchecked(Element.prototype, 'attachShadow',\n /**\n * @this {Element}\n * @param {!{mode: string}} init\n * @return {ShadowRoot}\n */\n function(init) {\n const shadowRoot = Native.Element_attachShadow.call(this, init);\n this.__CE_shadowRoot = shadowRoot;\n return shadowRoot;\n });\n }\n\n\n function patch_innerHTML(destination, baseDescriptor) {\n Object.defineProperty(destination, 'innerHTML', {\n enumerable: baseDescriptor.enumerable,\n configurable: true,\n get: baseDescriptor.get,\n set: /** @this {Element} */ function(htmlString) {\n const isConnected = Utilities.isConnected(this);\n\n // NOTE: In IE11, when using the native `innerHTML` setter, all nodes\n // that were previously descendants of the context element have all of\n // their children removed as part of the set - the entire subtree is\n // 'disassembled'. This work around walks the subtree *before* using the\n // native setter.\n /** @type {!Array<!Element>|undefined} */\n let removedElements = undefined;\n if (isConnected) {\n removedElements = [];\n Utilities.walkDeepDescendantElements(this, element => {\n if (element !== this) {\n removedElements.push(element);\n }\n });\n }\n\n baseDescriptor.set.call(this, htmlString);\n\n if (removedElements) {\n for (let i = 0; i < removedElements.length; i++) {\n const element = removedElements[i];\n if (element.__CE_state === CEState.custom) {\n internals.disconnectedCallback(element);\n }\n }\n }\n\n // Only create custom elements if this element's owner document is\n // associated with the registry.\n if (!this.ownerDocument.__CE_hasRegistry) {\n internals.patchTree(this);\n } else {\n internals.patchAndUpgradeTree(this);\n }\n return htmlString;\n },\n });\n }\n\n if (Native.Element_innerHTML && Native.Element_innerHTML.get) {\n patch_innerHTML(Element.prototype, Native.Element_innerHTML);\n } else if (Native.HTMLElement_innerHTML && Native.HTMLElement_innerHTML.get) {\n patch_innerHTML(HTMLElement.prototype, Native.HTMLElement_innerHTML);\n } else {\n\n internals.addPatch(function(element) {\n patch_innerHTML(element, {\n enumerable: true,\n configurable: true,\n // Implements getting `innerHTML` by performing an unpatched `cloneNode`\n // of the element and returning the resulting element's `innerHTML`.\n // TODO: Is this too expensive?\n get: /** @this {Element} */ function() {\n return Native.Node_cloneNode.call(this, true).innerHTML;\n },\n // Implements setting `innerHTML` by creating an unpatched element,\n // setting `innerHTML` of that element and replacing the target\n // element's children with those of the unpatched element.\n set: /** @this {Element} */ function(assignedValue) {\n // NOTE: re-route to `content` for `template` elements.\n // We need to do this because `template.appendChild` does not\n // route into `template.content`.\n const isTemplate = (this.localName === 'template');\n /** @type {!Node} */\n const content = isTemplate ? (/** @type {!HTMLTemplateElement} */\n (this)).content : this;\n /** @type {!Node} */\n const rawElement = Native.Document_createElementNS.call(document,\n this.namespaceURI, this.localName);\n rawElement.innerHTML = assignedValue;\n\n while (content.childNodes.length > 0) {\n Native.Node_removeChild.call(content, content.childNodes[0]);\n }\n const container = isTemplate ? rawElement.content : rawElement;\n while (container.childNodes.length > 0) {\n Native.Node_appendChild.call(content, container.childNodes[0]);\n }\n },\n });\n });\n }\n\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttribute',\n /**\n * @this {Element}\n * @param {string} name\n * @param {string} newValue\n */\n function(name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttribute.call(this, name, newValue);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_setAttribute.call(this, name, newValue);\n newValue = Native.Element_getAttribute.call(this, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, null);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'setAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n * @param {string} newValue\n */\n function(namespace, name, newValue) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_setAttributeNS.call(this, namespace, name, newValue);\n newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttribute',\n /**\n * @this {Element}\n * @param {string} name\n */\n function(name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttribute.call(this, name);\n }\n\n const oldValue = Native.Element_getAttribute.call(this, name);\n Native.Element_removeAttribute.call(this, name);\n if (oldValue !== null) {\n internals.attributeChangedCallback(this, name, oldValue, null, null);\n }\n });\n\n Utilities.setPropertyUnchecked(Element.prototype, 'removeAttributeNS',\n /**\n * @this {Element}\n * @param {?string} namespace\n * @param {string} name\n */\n function(namespace, name) {\n // Fast path for non-custom elements.\n if (this.__CE_state !== CEState.custom) {\n return Native.Element_removeAttributeNS.call(this, namespace, name);\n }\n\n const oldValue = Native.Element_getAttributeNS.call(this, namespace, name);\n Native.Element_removeAttributeNS.call(this, namespace, name);\n // In older browsers, `Element#getAttributeNS` may return the empty string\n // instead of null if the attribute does not exist. For details, see;\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/getAttributeNS#Notes\n const newValue = Native.Element_getAttributeNS.call(this, namespace, name);\n if (oldValue !== newValue) {\n internals.attributeChangedCallback(this, name, oldValue, newValue, namespace);\n }\n });\n\n\n function patch_insertAdjacentElement(destination, baseMethod) {\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentElement',\n /**\n * @this {Element}\n * @param {string} position\n * @param {!Element} element\n * @return {?Element}\n */\n function(position, element) {\n const wasConnected = Utilities.isConnected(element);\n const insertedElement = /** @type {!Element} */\n (baseMethod.call(this, position, element));\n\n if (wasConnected) {\n internals.disconnectTree(element);\n }\n\n if (Utilities.isConnected(insertedElement)) {\n internals.connectTree(element);\n }\n return insertedElement;\n });\n }\n\n if (Native.HTMLElement_insertAdjacentElement) {\n patch_insertAdjacentElement(HTMLElement.prototype, Native.HTMLElement_insertAdjacentElement);\n } else if (Native.Element_insertAdjacentElement) {\n patch_insertAdjacentElement(Element.prototype, Native.Element_insertAdjacentElement);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentElement` was not patched.');\n }\n\n\n function patch_insertAdjacentHTML(destination, baseMethod) {\n /**\n * Patches and upgrades all nodes which are siblings between `start`\n * (inclusive) and `end` (exclusive). If `end` is `null`, then all siblings\n * following `start` will be patched and upgraded.\n * @param {!Node} start\n * @param {?Node} end\n */\n function upgradeNodesInRange(start, end) {\n const nodes = [];\n for (let node = start; node !== end; node = node.nextSibling) {\n nodes.push(node);\n }\n for (let i = 0; i < nodes.length; i++) {\n internals.patchAndUpgradeTree(nodes[i]);\n }\n }\n\n Utilities.setPropertyUnchecked(destination, 'insertAdjacentHTML',\n /**\n * @this {Element}\n * @param {string} position\n * @param {string} text\n */\n function(position, text) {\n position = position.toLowerCase();\n\n if (position === \"beforebegin\") {\n const marker = this.previousSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(\n /** @type {!Node} */ (marker || this.parentNode.firstChild), this);\n } else if (position === \"afterbegin\") {\n const marker = this.firstChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.firstChild), marker);\n } else if (position === \"beforeend\") {\n const marker = this.lastChild;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(marker || this.firstChild, null);\n } else if (position === \"afterend\") {\n const marker = this.nextSibling;\n baseMethod.call(this, position, text);\n upgradeNodesInRange(/** @type {!Node} */ (this.nextSibling), marker);\n } else {\n throw new SyntaxError(`The value provided (${String(position)}) is ` +\n \"not one of 'beforebegin', 'afterbegin', 'beforeend', or 'afterend'.\");\n }\n });\n }\n\n if (Native.HTMLElement_insertAdjacentHTML) {\n patch_insertAdjacentHTML(HTMLElement.prototype, Native.HTMLElement_insertAdjacentHTML);\n } else if (Native.Element_insertAdjacentHTML) {\n patch_insertAdjacentHTML(Element.prototype, Native.Element_insertAdjacentHTML);\n } else {\n console.warn('Custom Elements: `Element#insertAdjacentHTML` was not patched.');\n }\n\n\n PatchParentNode(internals, Element.prototype, {\n prepend: Native.Element_prepend,\n append: Native.Element_append,\n });\n\n PatchChildNode(internals, Element.prototype, {\n before: Native.Element_before,\n after: Native.Element_after,\n replaceWith: Native.Element_replaceWith,\n remove: Native.Element_remove,\n });\n};\n","import CustomElementInternals from '../../CustomElementInternals.js';\nimport * as Utilities from '../../Utilities.js';\n\n/**\n * @typedef {{\n * before: !function(...(!Node|string)),\n * after: !function(...(!Node|string)),\n * replaceWith: !function(...(!Node|string)),\n * remove: !function(),\n * }}\n */\nlet ChildNodeNativeMethods;\n\n/**\n * @param {!CustomElementInternals} internals\n * @param {!Object} destination\n * @param {!ChildNodeNativeMethods} builtIn\n */\nexport default function(internals, destination, builtIn) {\n /**\n * @param {!function(...(!Node|string))} builtInMethod\n * @return {!function(...(!Node|string))}\n */\n function beforeAfterPatch(builtInMethod) {\n return function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n builtInMethod.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (Utilities.isConnected(this)) {\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n };\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'before', beforeAfterPatch(builtIn.before));\n }\n\n if (builtIn.before !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'after', beforeAfterPatch(builtIn.after));\n }\n\n if (builtIn.replaceWith !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'replaceWith',\n /**\n * @param {...(!Node|string)} nodes\n */\n function(...nodes) {\n /**\n * A copy of `nodes`, with any DocumentFragment replaced by its children.\n * @type {!Array<!Node>}\n */\n const flattenedNodes = [];\n\n /**\n * Elements in `nodes` that were connected before this call.\n * @type {!Array<!Node>}\n */\n const connectedElements = [];\n\n for (var i = 0; i < nodes.length; i++) {\n const node = nodes[i];\n\n if (node instanceof Element && Utilities.isConnected(node)) {\n connectedElements.push(node);\n }\n\n if (node instanceof DocumentFragment) {\n for (let child = node.firstChild; child; child = child.nextSibling) {\n flattenedNodes.push(child);\n }\n } else {\n flattenedNodes.push(node);\n }\n }\n\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.replaceWith.apply(this, nodes);\n\n for (let i = 0; i < connectedElements.length; i++) {\n internals.disconnectTree(connectedElements[i]);\n }\n\n if (wasConnected) {\n internals.disconnectTree(this);\n for (let i = 0; i < flattenedNodes.length; i++) {\n const node = flattenedNodes[i];\n if (node instanceof Element) {\n internals.connectTree(node);\n }\n }\n }\n });\n }\n\n if (builtIn.remove !== undefined) {\n Utilities.setPropertyUnchecked(destination, 'remove',\n function() {\n const wasConnected = Utilities.isConnected(this);\n\n builtIn.remove.call(this);\n\n if (wasConnected) {\n internals.disconnectTree(this);\n }\n });\n }\n};\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n/*\nExtremely simple css parser. Intended to be not more than what we need\nand definitely not necessarily correct =).\n*/\n\n'use strict';\n\n/** @unrestricted */\nclass StyleNode {\n constructor() {\n /** @type {number} */\n this['start'] = 0;\n /** @type {number} */\n this['end'] = 0;\n /** @type {StyleNode} */\n this['previous'] = null;\n /** @type {StyleNode} */\n this['parent'] = null;\n /** @type {Array<StyleNode>} */\n this['rules'] = null;\n /** @type {string} */\n this['parsedCssText'] = '';\n /** @type {string} */\n this['cssText'] = '';\n /** @type {boolean} */\n this['atRule'] = false;\n /** @type {number} */\n this['type'] = 0;\n /** @type {string} */\n this['keyframesName'] = '';\n /** @type {string} */\n this['selector'] = '';\n /** @type {string} */\n this['parsedSelector'] = '';\n }\n}\n\nexport {StyleNode}\n\n// given a string of css, return a simple rule tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nexport function parse(text) {\n text = clean(text);\n return parseCss(lex(text), text);\n}\n\n// remove stuff we don't care about that may hinder parsing\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction clean(cssText) {\n return cssText.replace(RX.comments, '').replace(RX.port, '');\n}\n\n// super simple {...} lexer that returns a node tree\n/**\n * @param {string} text\n * @return {StyleNode}\n */\nfunction lex(text) {\n let root = new StyleNode();\n root['start'] = 0;\n root['end'] = text.length\n let n = root;\n for (let i = 0, l = text.length; i < l; i++) {\n if (text[i] === OPEN_BRACE) {\n if (!n['rules']) {\n n['rules'] = [];\n }\n let p = n;\n let previous = p['rules'][p['rules'].length - 1] || null;\n n = new StyleNode();\n n['start'] = i + 1;\n n['parent'] = p;\n n['previous'] = previous;\n p['rules'].push(n);\n } else if (text[i] === CLOSE_BRACE) {\n n['end'] = i + 1;\n n = n['parent'] || root;\n }\n }\n return root;\n}\n\n// add selectors/cssText to node tree\n/**\n * @param {StyleNode} node\n * @param {string} text\n * @return {StyleNode}\n */\nfunction parseCss(node, text) {\n let t = text.substring(node['start'], node['end'] - 1);\n node['parsedCssText'] = node['cssText'] = t.trim();\n if (node['parent']) {\n let ss = node['previous'] ? node['previous']['end'] : node['parent']['start'];\n t = text.substring(ss, node['start'] - 1);\n t = _expandUnicodeEscapes(t);\n t = t.replace(RX.multipleSpaces, ' ');\n // TODO(sorvell): ad hoc; make selector include only after last ;\n // helps with mixin syntax\n t = t.substring(t.lastIndexOf(';') + 1);\n let s = node['parsedSelector'] = node['selector'] = t.trim();\n node['atRule'] = (s.indexOf(AT_START) === 0);\n // note, support a subset of rule types...\n if (node['atRule']) {\n if (s.indexOf(MEDIA_START) === 0) {\n node['type'] = types.MEDIA_RULE;\n } else if (s.match(RX.keyframesRule)) {\n node['type'] = types.KEYFRAMES_RULE;\n node['keyframesName'] =\n node['selector'].split(RX.multipleSpaces).pop();\n }\n } else {\n if (s.indexOf(VAR_START) === 0) {\n node['type'] = types.MIXIN_RULE;\n } else {\n node['type'] = types.STYLE_RULE;\n }\n }\n }\n let r$ = node['rules'];\n if (r$) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n parseCss(r, text);\n }\n }\n return node;\n}\n\n/**\n * conversion of sort unicode escapes with spaces like `\\33 ` (and longer) into\n * expanded form that doesn't require trailing space `\\000033`\n * @param {string} s\n * @return {string}\n */\nfunction _expandUnicodeEscapes(s) {\n return s.replace(/\\\\([0-9a-f]{1,6})\\s/gi, function() {\n let code = arguments[1],\n repeat = 6 - code.length;\n while (repeat--) {\n code = '0' + code;\n }\n return '\\\\' + code;\n });\n}\n\n/**\n * stringify parsed css.\n * @param {StyleNode} node\n * @param {boolean=} preserveProperties\n * @param {string=} text\n * @return {string}\n */\nexport function stringify(node, preserveProperties, text = '') {\n // calc rule cssText\n let cssText = '';\n if (node['cssText'] || node['rules']) {\n let r$ = node['rules'];\n if (r$ && !_hasMixinRules(r$)) {\n for (let i = 0, l = r$.length, r;\n (i < l) && (r = r$[i]); i++) {\n cssText = stringify(r, preserveProperties, cssText);\n }\n } else {\n cssText = preserveProperties ? node['cssText'] :\n removeCustomProps(node['cssText']);\n cssText = cssText.trim();\n if (cssText) {\n cssText = ' ' + cssText + '\\n';\n }\n }\n }\n // emit rule if there is cssText\n if (cssText) {\n if (node['selector']) {\n text += node['selector'] + ' ' + OPEN_BRACE + '\\n';\n }\n text += cssText;\n if (node['selector']) {\n text += CLOSE_BRACE + '\\n\\n';\n }\n }\n return text;\n}\n\n/**\n * @param {Array<StyleNode>} rules\n * @return {boolean}\n */\nfunction _hasMixinRules(rules) {\n let r = rules[0];\n return Boolean(r) && Boolean(r['selector']) && r['selector'].indexOf(VAR_START) === 0;\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomProps(cssText) {\n cssText = removeCustomPropAssignment(cssText);\n return removeCustomPropApply(cssText);\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nexport function removeCustomPropAssignment(cssText) {\n return cssText\n .replace(RX.customProp, '')\n .replace(RX.mixinProp, '');\n}\n\n/**\n * @param {string} cssText\n * @return {string}\n */\nfunction removeCustomPropApply(cssText) {\n return cssText\n .replace(RX.mixinApply, '')\n .replace(RX.varApply, '');\n}\n\n/** @enum {number} */\nexport const types = {\n STYLE_RULE: 1,\n KEYFRAMES_RULE: 7,\n MEDIA_RULE: 4,\n MIXIN_RULE: 1000\n}\n\nconst OPEN_BRACE = '{';\nconst CLOSE_BRACE = '}';\n\n// helper regexp's\nconst RX = {\n comments: /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//gim,\n port: /@import[^;]*;/gim,\n customProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?(?:[;\\n]|$)/gim,\n mixinProp: /(?:^[^;\\-\\s}]+)?--[^;{}]*?:[^{};]*?{[^}]*?}(?:[;\\n]|$)?/gim,\n mixinApply: /@apply\\s*\\(?[^);]*\\)?\\s*(?:[;\\n]|$)?/gim,\n varApply: /[^;:]*?:[^;]*?var\\([^;]*\\)(?:[;\\n]|$)?/gim,\n keyframesRule: /^@[^\\s]*keyframes/,\n multipleSpaces: /\\s+/g\n}\n\nconst VAR_START = '--';\nconst MEDIA_START = '@media';\nconst AT_START = '@';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nexport const nativeShadow = !(window['ShadyDOM'] && window['ShadyDOM']['inUse']);\nlet nativeCssVariables_;\n\n/**\n * @param {(ShadyCSSOptions | ShadyCSSInterface)=} settings\n */\nfunction calcCssVariables(settings) {\n if (settings && settings['shimcssproperties']) {\n nativeCssVariables_ = false;\n } else {\n // chrome 49 has semi-working css vars, check if box-shadow works\n // safari 9.1 has a recalc bug: https://bugs.webkit.org/show_bug.cgi?id=155782\n // However, shim css custom properties are only supported with ShadyDOM enabled,\n // so fall back on native if we do not detect ShadyDOM\n // Edge 15: custom properties used in ::before and ::after will also be used in the parent element\n // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12414257/\n nativeCssVariables_ = nativeShadow || Boolean(!navigator.userAgent.match(/AppleWebKit\\/601|Edge\\/15/) &&\n window.CSS && CSS.supports && CSS.supports('box-shadow', '0 0 0 var(--foo)'));\n }\n}\n\nif (window.ShadyCSS && window.ShadyCSS.nativeCss !== undefined) {\n nativeCssVariables_ = window.ShadyCSS.nativeCss;\n} else if (window.ShadyCSS) {\n calcCssVariables(window.ShadyCSS);\n // reset window variable to let ShadyCSS API take its place\n window.ShadyCSS = undefined;\n} else {\n calcCssVariables(window['WebComponents'] && window['WebComponents']['flags']);\n}\n\n// Hack for type error under new type inference which doesn't like that\n// nativeCssVariables is updated in a function and assigns the type\n// `function(): ?` instead of `boolean`.\nexport const nativeCssVariables = /** @type {boolean} */(nativeCssVariables_);\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\nexport const VAR_ASSIGN = /(?:^|[;\\s{]\\s*)(--[\\w-]*?)\\s*:\\s*(?:((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};{])+)|\\{([^}]*)\\}(?:(?=[;\\s}])|$))/gi;\nexport const MIXIN_MATCH = /(?:^|\\W+)@apply\\s*\\(?([^);\\n]*)\\)?/gi;\nexport const VAR_CONSUMED = /(--[\\w-]+)\\s*([:,;)]|$)/gi;\nexport const ANIMATION_MATCH = /(animation\\s*:)|(animation-name\\s*:)/;\nexport const MEDIA_MATCH = /@media\\s(.*)/;\nexport const IS_VAR = /^--/;\nexport const BRACKETED = /\\{[^}]*\\}/g;\nexport const HOST_PREFIX = '(?:^|[^.#[:])';\nexport const HOST_SUFFIX = '($|[.:[\\\\s>+~])';\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/** @type {!Set<string>} */\nconst styleTextSet = new Set();\n\nexport const scopingAttribute = 'shady-unscoped';\n\n/**\n * Add a specifically-marked style to the document directly, and only one copy of that style.\n *\n * @param {!HTMLStyleElement} style\n * @return {undefined}\n */\nexport function processUnscopedStyle(style) {\n const text = style.textContent;\n if (!styleTextSet.has(text)) {\n styleTextSet.add(text);\n const newStyle = style.cloneNode(true);\n document.head.appendChild(newStyle);\n }\n}\n\n/**\n * Check if a style is supposed to be unscoped\n * @param {!HTMLStyleElement} style\n * @return {boolean} true if the style has the unscoping attribute\n */\nexport function isUnscopedStyle(style) {\n return style.hasAttribute(scopingAttribute);\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport {parse, stringify, types, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {MEDIA_MATCH} from './common-regex.js';\nimport {processUnscopedStyle, isUnscopedStyle} from './unscoped-style-handler.js';\n\n/**\n * @param {string|StyleNode} rules\n * @param {function(StyleNode)=} callback\n * @return {string}\n */\nexport function toCssText (rules, callback) {\n if (!rules) {\n return '';\n }\n if (typeof rules === 'string') {\n rules = parse(rules);\n }\n if (callback) {\n forEachRule(rules, callback);\n }\n return stringify(rules, nativeCssVariables);\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @return {StyleNode}\n */\nexport function rulesForStyle(style) {\n if (!style['__cssRules'] && style.textContent) {\n style['__cssRules'] = parse(style.textContent);\n }\n return style['__cssRules'] || null;\n}\n\n// Tests if a rule is a keyframes selector, which looks almost exactly\n// like a normal selector but is not (it has nothing to do with scoping\n// for example).\n/**\n * @param {StyleNode} rule\n * @return {boolean}\n */\nexport function isKeyframesSelector(rule) {\n return Boolean(rule['parent']) &&\n rule['parent']['type'] === types.KEYFRAMES_RULE;\n}\n\n/**\n * @param {StyleNode} node\n * @param {Function=} styleRuleCallback\n * @param {Function=} keyframesRuleCallback\n * @param {boolean=} onlyActiveRules\n */\nexport function forEachRule(node, styleRuleCallback, keyframesRuleCallback, onlyActiveRules) {\n if (!node) {\n return;\n }\n let skipRules = false;\n let type = node['type'];\n if (onlyActiveRules) {\n if (type === types.MEDIA_RULE) {\n let matchMedia = node['selector'].match(MEDIA_MATCH);\n if (matchMedia) {\n // if rule is a non matching @media rule, skip subrules\n if (!window.matchMedia(matchMedia[1]).matches) {\n skipRules = true;\n }\n }\n }\n }\n if (type === types.STYLE_RULE) {\n styleRuleCallback(node);\n } else if (keyframesRuleCallback &&\n type === types.KEYFRAMES_RULE) {\n keyframesRuleCallback(node);\n } else if (type === types.MIXIN_RULE) {\n skipRules = true;\n }\n let r$ = node['rules'];\n if (r$ && !skipRules) {\n for (let i=0, l=r$.length, r; (i<l) && (r=r$[i]); i++) {\n forEachRule(r, styleRuleCallback, keyframesRuleCallback, onlyActiveRules);\n }\n }\n}\n\n// add a string of cssText to the document.\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @param {Node} target\n * @param {Node} contextNode\n * @return {HTMLStyleElement}\n */\nexport function applyCss(cssText, moniker, target, contextNode) {\n let style = createScopeStyle(cssText, moniker);\n applyStyle(style, target, contextNode);\n return style;\n}\n\n/**\n * @param {string} cssText\n * @param {string} moniker\n * @return {HTMLStyleElement}\n */\nexport function createScopeStyle(cssText, moniker) {\n let style = /** @type {HTMLStyleElement} */(document.createElement('style'));\n if (moniker) {\n style.setAttribute('scope', moniker);\n }\n style.textContent = cssText;\n return style;\n}\n\n/**\n * Track the position of the last added style for placing placeholders\n * @type {Node}\n */\nlet lastHeadApplyNode = null;\n\n// insert a comment node as a styling position placeholder.\n/**\n * @param {string} moniker\n * @return {!Comment}\n */\nexport function applyStylePlaceHolder(moniker) {\n let placeHolder = document.createComment(' Shady DOM styles for ' +\n moniker + ' ');\n let after = lastHeadApplyNode ?\n lastHeadApplyNode['nextSibling'] : null;\n let scope = document.head;\n scope.insertBefore(placeHolder, after || scope.firstChild);\n lastHeadApplyNode = placeHolder;\n return placeHolder;\n}\n\n/**\n * @param {HTMLStyleElement} style\n * @param {?Node} target\n * @param {?Node} contextNode\n */\nexport function applyStyle(style, target, contextNode) {\n target = target || document.head;\n let after = (contextNode && contextNode.nextSibling) ||\n target.firstChild;\n target.insertBefore(style, after);\n if (!lastHeadApplyNode) {\n lastHeadApplyNode = style;\n } else {\n // only update lastHeadApplyNode if the new style is inserted after the old lastHeadApplyNode\n let position = style.compareDocumentPosition(lastHeadApplyNode);\n if (position === Node.DOCUMENT_POSITION_PRECEDING) {\n lastHeadApplyNode = style;\n }\n }\n}\n\n/**\n * @param {string} buildType\n * @return {boolean}\n */\nexport function isTargetedBuild(buildType) {\n return nativeShadow ? buildType === 'shadow' : buildType === 'shady';\n}\n\n/**\n * @param {Element} element\n * @return {?string}\n */\nexport function getCssBuildType(element) {\n return element.getAttribute('css-build');\n}\n\n/**\n * Walk from text[start] matching parens and\n * returns position of the outer end paren\n * @param {string} text\n * @param {number} start\n * @return {number}\n */\nexport function findMatchingParen(text, start) {\n let level = 0;\n for (let i=start, l=text.length; i < l; i++) {\n if (text[i] === '(') {\n level++;\n } else if (text[i] === ')') {\n if (--level === 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\n/**\n * @param {string} str\n * @param {function(string, string, string, string)} callback\n */\nexport function processVariableAndFallback(str, callback) {\n // find 'var('\n let start = str.indexOf('var(');\n if (start === -1) {\n // no var?, everything is prefix\n return callback(str, '', '', '');\n }\n //${prefix}var(${inner})${suffix}\n let end = findMatchingParen(str, start + 3);\n let inner = str.substring(start + 4, end);\n let prefix = str.substring(0, start);\n // suffix may have other variables\n let suffix = processVariableAndFallback(str.substring(end + 1), callback);\n let comma = inner.indexOf(',');\n // value and fallback args should be trimmed to match in property lookup\n if (comma === -1) {\n // variable, no fallback\n return callback(prefix, inner.trim(), '', suffix);\n }\n // var(${value},${fallback})\n let value = inner.substring(0, comma).trim();\n let fallback = inner.substring(comma + 1).trim();\n return callback(prefix, value, fallback, suffix);\n}\n\n/**\n * @param {Element} element\n * @param {string} value\n */\nexport function setElementClassRaw(element, value) {\n // use native setAttribute provided by ShadyDOM when setAttribute is patched\n if (nativeShadow) {\n element.setAttribute('class', value);\n } else {\n window['ShadyDOM']['nativeMethods']['setAttribute'].call(element, 'class', value);\n }\n}\n\n/**\n * @param {Element | {is: string, extends: string}} element\n * @return {{is: string, typeExtension: string}}\n */\nexport function getIsExtends(element) {\n let localName = element['localName'];\n let is = '', typeExtension = '';\n /*\n NOTE: technically, this can be wrong for certain svg elements\n with `-` in the name like `<font-face>`\n */\n if (localName) {\n if (localName.indexOf('-') > -1) {\n is = localName;\n } else {\n typeExtension = localName;\n is = (element.getAttribute && element.getAttribute('is')) || '';\n }\n } else {\n is = /** @type {?} */(element).is;\n typeExtension = /** @type {?} */(element).extends;\n }\n return {is, typeExtension};\n}\n\n/**\n * @param {Element|DocumentFragment} element\n * @return {string}\n */\nexport function gatherStyleText(element) {\n /** @type {!Array<string>} */\n const styleTextParts = [];\n const styles = /** @type {!NodeList<!HTMLStyleElement>} */(element.querySelectorAll('style'));\n for (let i = 0; i < styles.length; i++) {\n const style = styles[i];\n if (isUnscopedStyle(style)) {\n if (!nativeShadow) {\n processUnscopedStyle(style);\n style.parentNode.removeChild(style);\n }\n } else {\n styleTextParts.push(style.textContent);\n style.parentNode.removeChild(style);\n }\n }\n return styleTextParts.join('').trim();\n}\n\n/**\n * Split a selector separated by commas into an array in a smart way\n * @param {string} selector\n * @return {!Array<string>}\n */\nexport function splitSelectorList(selector) {\n const parts = [];\n let part = '';\n for (let i = 0; i >= 0 && i < selector.length; i++) {\n // A selector with parentheses will be one complete part\n if (selector[i] === '(') {\n // find the matching paren\n const end = findMatchingParen(selector, i);\n // push the paren block into the part\n part += selector.slice(i, end + 1);\n // move the index to after the paren block\n i = end;\n } else if (selector[i] === ',') {\n parts.push(part);\n part = '';\n } else {\n part += selector[i];\n }\n }\n // catch any pieces after the last comma\n if (part) {\n parts.push(part);\n }\n return parts;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport * as StyleUtil from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/* Transforms ShadowDOM styling into ShadyDOM styling\n\n* scoping:\n\n * elements in scope get scoping selector class=\"x-foo-scope\"\n * selectors re-written as follows:\n\n div button -> div.x-foo-scope button.x-foo-scope\n\n* :host -> scopeName\n\n* :host(...) -> scopeName...\n\n* ::slotted(...) -> scopeName > ...\n\n* ...:dir(ltr|rtl) -> [dir=\"ltr|rtl\"] ..., ...[dir=\"ltr|rtl\"]\n\n* :host(:dir[rtl]) -> scopeName:dir(rtl) -> [dir=\"rtl\"] scopeName, scopeName[dir=\"rtl\"]\n\n*/\nconst SCOPE_NAME = 'style-scope';\n\nclass StyleTransformer {\n get SCOPE_NAME() {\n return SCOPE_NAME;\n }\n /**\n * Given a node and scope name, add a scoping class to each node\n * in the tree. This facilitates transforming css into scoped rules.\n * @param {!Node} node\n * @param {string} scope\n * @param {boolean=} shouldRemoveScope\n * @deprecated\n */\n dom(node, scope, shouldRemoveScope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n const fn = (node) => {\n this.element(node, scope || '', shouldRemoveScope);\n };\n this._transformDom(node, fn);\n }\n }\n\n /**\n * Given a node and scope name, add a scoping class to each node in the tree.\n * @param {!Node} node\n * @param {string} scope\n */\n domAddScope(node, scope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n const fn = (node) => {\n this.element(node, scope || '');\n };\n this._transformDom(node, fn);\n }\n }\n\n /**\n * @param {!Node} startNode\n * @param {!function(!Node)} transformer\n */\n _transformDom(startNode, transformer) {\n if (startNode.nodeType === Node.ELEMENT_NODE) {\n transformer(startNode)\n }\n let c$ = (startNode.localName === 'template') ?\n // In case the template is in svg context, fall back to the node\n // since it won't be an HTMLTemplateElement with a .content property\n (startNode.content || startNode._content || startNode).childNodes :\n startNode.children || startNode.childNodes;\n if (c$) {\n for (let i=0; i<c$.length; i++) {\n this._transformDom(c$[i], transformer);\n }\n }\n }\n\n /**\n * @param {?} element\n * @param {?} scope\n * @param {?=} shouldRemoveScope\n */\n element(element, scope, shouldRemoveScope) {\n // note: if using classes, we add both the general 'style-scope' class\n // as well as the specific scope. This enables easy filtering of all\n // `style-scope` elements\n if (scope) {\n // note: svg on IE does not have classList so fallback to class\n if (element.classList) {\n if (shouldRemoveScope) {\n element.classList.remove(SCOPE_NAME);\n element.classList.remove(scope);\n } else {\n element.classList.add(SCOPE_NAME);\n element.classList.add(scope);\n }\n } else if (element.getAttribute) {\n let c = element.getAttribute(CLASS);\n if (shouldRemoveScope) {\n if (c) {\n let newValue = c.replace(SCOPE_NAME, '').replace(scope, '');\n StyleUtil.setElementClassRaw(element, newValue);\n }\n } else {\n let newValue = (c ? c + ' ' : '') + SCOPE_NAME + ' ' + scope;\n StyleUtil.setElementClassRaw(element, newValue);\n }\n }\n }\n }\n\n /**\n * Given a node, replace the scoping class to each subnode in the tree.\n * @param {!Node} node\n * @param {string} oldScope\n * @param {string} newScope\n */\n domReplaceScope(node, oldScope, newScope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n const fn = (node) => {\n this.element(node, oldScope, true);\n this.element(node, newScope);\n };\n this._transformDom(node, fn);\n }\n }\n /**\n * Given a node, remove the scoping class to each subnode in the tree.\n * @param {!Node} node\n * @param {string} oldScope\n */\n domRemoveScope(node, oldScope) {\n // one time optimization to skip scoping...\n if (node['__styleScoped']) {\n node['__styleScoped'] = null;\n } else {\n const fn = (node) => {\n this.element(node, oldScope || '', true);\n };\n this._transformDom(node, fn);\n }\n }\n\n /**\n * @param {?} element\n * @param {?} styleRules\n * @param {?=} callback\n */\n elementStyles(element, styleRules, callback) {\n let cssBuildType = element['__cssBuild'];\n // no need to shim selectors if settings.useNativeShadow, also\n // a shady css build will already have transformed selectors\n // NOTE: This method may be called as part of static or property shimming.\n // When there is a targeted build it will not be called for static shimming,\n // but when the property shim is used it is called and should opt out of\n // static shimming work when a proper build exists.\n let cssText = '';\n if (nativeShadow || cssBuildType === 'shady') {\n cssText = StyleUtil.toCssText(styleRules, callback);\n } else {\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n cssText = this.css(styleRules, is, typeExtension, callback) + '\\n\\n';\n }\n return cssText.trim();\n }\n\n // Given a string of cssText and a scoping string (scope), returns\n // a string of scoped css where each selector is transformed to include\n // a class created from the scope. ShadowDOM selectors are also transformed\n // (e.g. :host) to use the scoping selector.\n css(rules, scope, ext, callback) {\n let hostScope = this._calcHostScope(scope, ext);\n scope = this._calcElementScope(scope);\n let self = this;\n return StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n if (!rule.isScoped) {\n self.rule(rule, scope, hostScope);\n rule.isScoped = true;\n }\n if (callback) {\n callback(rule, scope, hostScope);\n }\n });\n }\n\n _calcElementScope(scope) {\n if (scope) {\n return CSS_CLASS_PREFIX + scope;\n } else {\n return '';\n }\n }\n\n _calcHostScope(scope, ext) {\n return ext ? `[is=${scope}]` : scope;\n }\n\n rule(rule, scope, hostScope) {\n this._transformRule(rule, this._transformComplexSelector,\n scope, hostScope);\n }\n\n /**\n * transforms a css rule to a scoped rule.\n *\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRule(rule, transformer, scope, hostScope) {\n // NOTE: save transformedSelector for subsequent matching of elements\n // against selectors (e.g. when calculating style properties)\n rule['selector'] = rule.transformedSelector =\n this._transformRuleCss(rule, transformer, scope, hostScope);\n }\n\n /**\n * @param {StyleNode} rule\n * @param {Function} transformer\n * @param {string=} scope\n * @param {string=} hostScope\n */\n _transformRuleCss(rule, transformer, scope, hostScope) {\n let p$ = StyleUtil.splitSelectorList(rule['selector']);\n // we want to skip transformation of rules that appear in keyframes,\n // because they are keyframe selectors, not element selectors.\n if (!StyleUtil.isKeyframesSelector(rule)) {\n for (let i=0, l=p$.length, p; (i<l) && (p=p$[i]); i++) {\n p$[i] = transformer.call(this, p, scope, hostScope);\n }\n }\n return p$.filter((part) => Boolean(part)).join(COMPLEX_SELECTOR_SEP);\n }\n\n /**\n * @param {string} selector\n * @return {string}\n */\n _twiddleNthPlus(selector) {\n return selector.replace(NTH, (m, type, inside) => {\n if (inside.indexOf('+') > -1) {\n inside = inside.replace(/\\+/g, '___');\n } else if (inside.indexOf('___') > -1) {\n inside = inside.replace(/___/g, '+');\n }\n return `:${type}(${inside})`;\n });\n }\n\n /**\n * Preserve `:matches()` selectors by replacing them with MATCHES_REPLACMENT\n * and returning an array of `:matches()` selectors.\n * Use `_replacesMatchesPseudo` to replace the `:matches()` parts\n *\n * @param {string} selector\n * @return {{selector: string, matches: !Array<string>}}\n */\n _preserveMatchesPseudo(selector) {\n /** @type {!Array<string>} */\n const matches = [];\n let match;\n while ((match = selector.match(MATCHES))) {\n const start = match.index;\n const end = StyleUtil.findMatchingParen(selector, start);\n if (end === -1) {\n throw new Error(`${match.input} selector missing ')'`)\n }\n const part = selector.slice(start, end + 1);\n selector = selector.replace(part, MATCHES_REPLACEMENT);\n matches.push(part);\n }\n return {selector, matches};\n }\n\n /**\n * Replace MATCHES_REPLACMENT character with the given set of `:matches()`\n * selectors.\n *\n * @param {string} selector\n * @param {!Array<string>} matches\n * @return {string}\n */\n _replaceMatchesPseudo(selector, matches) {\n const parts = selector.split(MATCHES_REPLACEMENT);\n return matches.reduce((acc, cur, idx) => acc + cur + parts[idx + 1], parts[0]);\n }\n\n/**\n * @param {string} selector\n * @param {string} scope\n * @param {string=} hostScope\n */\n _transformComplexSelector(selector, scope, hostScope) {\n let stop = false;\n selector = selector.trim();\n // Remove spaces inside of selectors like `:nth-of-type` because it confuses SIMPLE_SELECTOR_SEP\n let isNth = NTH.test(selector);\n if (isNth) {\n selector = selector.replace(NTH, (m, type, inner) => `:${type}(${inner.replace(/\\s/g, '')})`)\n selector = this._twiddleNthPlus(selector);\n }\n // Preserve selectors like `:-webkit-any` so that SIMPLE_SELECTOR_SEP does\n // not get confused by spaces inside the pseudo selector\n const isMatches = MATCHES.test(selector);\n /** @type {!Array<string>} */\n let matches;\n if (isMatches) {\n ({selector, matches} = this._preserveMatchesPseudo(selector));\n }\n selector = selector.replace(SLOTTED_START, `${HOST} $1`);\n selector = selector.replace(SIMPLE_SELECTOR_SEP, (m, c, s) => {\n if (!stop) {\n let info = this._transformCompoundSelector(s, c, scope, hostScope);\n stop = stop || info.stop;\n c = info.combinator;\n s = info.value;\n }\n return c + s;\n });\n // replace `:matches()` selectors\n if (isMatches) {\n selector = this._replaceMatchesPseudo(selector, matches);\n }\n if (isNth) {\n selector = this._twiddleNthPlus(selector);\n }\n return selector;\n }\n\n _transformCompoundSelector(selector, combinator, scope, hostScope) {\n // replace :host with host scoping class\n let slottedIndex = selector.indexOf(SLOTTED);\n if (selector.indexOf(HOST) >= 0) {\n selector = this._transformHostSelector(selector, hostScope);\n // replace other selectors with scoping class\n } else if (slottedIndex !== 0) {\n selector = scope ? this._transformSimpleSelector(selector, scope) :\n selector;\n }\n // mark ::slotted() scope jump to replace with descendant selector + arg\n // also ignore left-side combinator\n let slotted = false;\n if (slottedIndex >= 0) {\n combinator = '';\n slotted = true;\n }\n // process scope jumping selectors up to the scope jump and then stop\n let stop;\n if (slotted) {\n stop = true;\n if (slotted) {\n // .zonk ::slotted(.foo) -> .zonk.scope > .foo\n selector = selector.replace(SLOTTED_PAREN, (m, paren) => ` > ${paren}`);\n }\n }\n selector = selector.replace(DIR_PAREN, (m, before, dir) =>\n `[dir=\"${dir}\"] ${before}, ${before}[dir=\"${dir}\"]`);\n return {value: selector, combinator, stop};\n }\n\n _transformSimpleSelector(selector, scope) {\n let p$ = selector.split(PSEUDO_PREFIX);\n p$[0] += scope;\n return p$.join(PSEUDO_PREFIX);\n }\n\n // :host(...) -> scopeName...\n _transformHostSelector(selector, hostScope) {\n let m = selector.match(HOST_PAREN);\n let paren = m && m[2].trim() || '';\n if (paren) {\n if (!paren[0].match(SIMPLE_SELECTOR_PREFIX)) {\n // paren starts with a type selector\n let typeSelector = paren.split(SIMPLE_SELECTOR_PREFIX)[0];\n // if the type selector is our hostScope then avoid pre-pending it\n if (typeSelector === hostScope) {\n return paren;\n // otherwise, this selector should not match in this scope so\n // output a bogus selector.\n } else {\n return SELECTOR_NO_MATCH;\n }\n } else {\n // make sure to do a replace here to catch selectors like:\n // `:host(.foo)::before`\n return selector.replace(HOST_PAREN, function(m, host, paren) {\n return hostScope + paren;\n });\n }\n // if no paren, do a straight :host replacement.\n // TODO(sorvell): this should not strictly be necessary but\n // it's needed to maintain support for `:host[foo]` type selectors\n // which have been improperly used under Shady DOM. This should be\n // deprecated.\n } else {\n return selector.replace(HOST, hostScope);\n }\n }\n\n /**\n * @param {StyleNode} rule\n */\n documentRule(rule) {\n // reset selector in case this is redone.\n rule['selector'] = rule['parsedSelector'];\n this.normalizeRootSelector(rule);\n this._transformRule(rule, this._transformDocumentSelector);\n }\n\n /**\n * @param {StyleNode} rule\n */\n normalizeRootSelector(rule) {\n if (rule['selector'] === ROOT) {\n rule['selector'] = 'html';\n }\n }\n\n/**\n * @param {string} selector\n */\n _transformDocumentSelector(selector) {\n if (selector.match(HOST)) {\n // remove ':host' type selectors in document rules\n return '';\n } else if (selector.match(SLOTTED)) {\n return this._transformComplexSelector(selector, SCOPE_DOC_SELECTOR)\n } else {\n return this._transformSimpleSelector(selector.trim(), SCOPE_DOC_SELECTOR);\n }\n }\n}\n\nlet NTH = /:(nth[-\\w]+)\\(([^)]+)\\)/;\nlet SCOPE_DOC_SELECTOR = `:not(.${SCOPE_NAME})`;\nlet COMPLEX_SELECTOR_SEP = ',';\nlet SIMPLE_SELECTOR_SEP = /(^|[\\s>+~]+)((?:\\[.+?\\]|[^\\s>+~=[])+)/g;\nlet SIMPLE_SELECTOR_PREFIX = /[[.:#*]/;\nlet HOST = ':host';\nlet ROOT = ':root';\nlet SLOTTED = '::slotted';\nlet SLOTTED_START = new RegExp(`^(${SLOTTED})`);\n// NOTE: this supports 1 nested () pair for things like\n// :host(:not([selected]), more general support requires\n// parsing which seems like overkill\nlet HOST_PAREN = /(:host)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\n// similar to HOST_PAREN\nlet SLOTTED_PAREN = /(?:::slotted)(?:\\(((?:\\([^)(]*\\)|[^)(]*)+?)\\))/;\nlet DIR_PAREN = /(.*):dir\\((?:(ltr|rtl))\\)/;\nlet CSS_CLASS_PREFIX = '.';\nlet PSEUDO_PREFIX = ':';\nlet CLASS = 'class';\nlet SELECTOR_NO_MATCH = 'should_not_match';\nconst MATCHES = /:(?:matches|any|-(?:webkit|moz)-any)/;\nconst MATCHES_REPLACEMENT = '\\u{e000}';\n\nexport default new StyleTransformer()\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/** @const {string} */\nconst infoKey = '__styleInfo';\n\nexport default class StyleInfo {\n /**\n * @param {Element} node\n * @return {StyleInfo}\n */\n static get(node) {\n if (node) {\n return node[infoKey];\n } else {\n return null;\n }\n }\n /**\n * @param {!Element} node\n * @param {StyleInfo} styleInfo\n * @return {StyleInfo}\n */\n static set(node, styleInfo) {\n node[infoKey] = styleInfo;\n return styleInfo;\n }\n /**\n * @param {StyleNode} ast\n * @param {Node=} placeholder\n * @param {Array<string>=} ownStylePropertyNames\n * @param {string=} elementName\n * @param {string=} typeExtension\n * @param {string=} cssBuild\n */\n constructor(ast, placeholder, ownStylePropertyNames, elementName, typeExtension, cssBuild) {\n /** @type {StyleNode} */\n this.styleRules = ast || null;\n /** @type {Node} */\n this.placeholder = placeholder || null;\n /** @type {!Array<string>} */\n this.ownStylePropertyNames = ownStylePropertyNames || [];\n /** @type {Array<Object>} */\n this.overrideStyleProperties = null;\n /** @type {string} */\n this.elementName = elementName || '';\n /** @type {string} */\n this.cssBuild = cssBuild || '';\n /** @type {string} */\n this.typeExtension = typeExtension || '';\n /** @type {Object<string, string>} */\n this.styleProperties = null;\n /** @type {?string} */\n this.scopeSelector = null;\n /** @type {HTMLStyleElement} */\n this.customStyle = null;\n }\n _getStyleRules() {\n return this.styleRules;\n }\n}\n\nStyleInfo.prototype['_getStyleRules'] = StyleInfo.prototype._getStyleRules;","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {removeCustomPropAssignment, StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport * as RX from './common-regex.js';\nimport StyleInfo from './style-info.js';\n\n// TODO: dedupe with shady\n/**\n * @param {string} selector\n * @return {boolean}\n * @this {Element}\n */\nconst matchesSelector = function(selector) {\n const method = this.matches || this.matchesSelector ||\n this.mozMatchesSelector || this.msMatchesSelector ||\n this.oMatchesSelector || this.webkitMatchesSelector;\n return method && method.call(this, selector);\n};\n\nconst IS_IE = navigator.userAgent.match('Trident');\n\nconst XSCOPE_NAME = 'x-scope';\n\nclass StyleProperties {\n get XSCOPE_NAME() {\n return XSCOPE_NAME;\n }\n/**\n * decorates styles with rule info and returns an array of used style property names\n *\n * @param {StyleNode} rules\n * @return {Array<string>}\n */\n decorateStyles(rules) {\n let self = this, props = {}, keyframes = [], ruleIndex = 0;\n StyleUtil.forEachRule(rules, function(rule) {\n self.decorateRule(rule);\n // mark in-order position of ast rule in styles block, used for cache key\n rule.index = ruleIndex++;\n self.collectPropertiesInCssText(rule.propertyInfo.cssText, props);\n }, function onKeyframesRule(rule) {\n keyframes.push(rule);\n });\n // Cache all found keyframes rules for later reference:\n rules._keyframes = keyframes;\n // return this list of property names *consumes* in these styles.\n let names = [];\n for (let i in props) {\n names.push(i);\n }\n return names;\n }\n\n // decorate a single rule with property info\n decorateRule(rule) {\n if (rule.propertyInfo) {\n return rule.propertyInfo;\n }\n let info = {}, properties = {};\n let hasProperties = this.collectProperties(rule, properties);\n if (hasProperties) {\n info.properties = properties;\n // TODO(sorvell): workaround parser seeing mixins as additional rules\n rule['rules'] = null;\n }\n info.cssText = this.collectCssText(rule);\n rule.propertyInfo = info;\n return info;\n }\n\n // collects the custom properties from a rule's cssText\n collectProperties(rule, properties) {\n let info = rule.propertyInfo;\n if (info) {\n if (info.properties) {\n Object.assign(properties, info.properties);\n return true;\n }\n } else {\n let m, rx = RX.VAR_ASSIGN;\n let cssText = rule['parsedCssText'];\n let value;\n let any;\n while ((m = rx.exec(cssText))) {\n // note: group 2 is var, 3 is mixin\n value = (m[2] || m[3]).trim();\n // value of 'inherit' or 'unset' is equivalent to not setting the property here\n if (value !== 'inherit' || value !== 'unset') {\n properties[m[1].trim()] = value;\n }\n any = true;\n }\n return any;\n }\n\n }\n\n // returns cssText of properties that consume variables/mixins\n collectCssText(rule) {\n return this.collectConsumingCssText(rule['parsedCssText']);\n }\n\n // NOTE: we support consumption inside mixin assignment\n // but not production, so strip out {...}\n collectConsumingCssText(cssText) {\n return cssText.replace(RX.BRACKETED, '')\n .replace(RX.VAR_ASSIGN, '');\n }\n\n collectPropertiesInCssText(cssText, props) {\n let m;\n while ((m = RX.VAR_CONSUMED.exec(cssText))) {\n let name = m[1];\n // This regex catches all variable names, and following non-whitespace char\n // If next char is not ':', then variable is a consumer\n if (m[2] !== ':') {\n props[name] = true;\n }\n }\n }\n\n // turns custom properties into realized values.\n reify(props) {\n // big perf optimization here: reify only *own* properties\n // since this object has __proto__ of the element's scope properties\n let names = Object.getOwnPropertyNames(props);\n for (let i=0, n; i < names.length; i++) {\n n = names[i];\n props[n] = this.valueForProperty(props[n], props);\n }\n }\n\n // given a property value, returns the reified value\n // a property value may be:\n // (1) a literal value like: red or 5px;\n // (2) a variable value like: var(--a), var(--a, red), or var(--a, --b) or\n // var(--a, var(--b));\n // (3) a literal mixin value like { properties }. Each of these properties\n // can have values that are: (a) literal, (b) variables, (c) @apply mixins.\n valueForProperty(property, props) {\n // case (1) default\n // case (3) defines a mixin and we have to reify the internals\n if (property) {\n if (property.indexOf(';') >=0) {\n property = this.valueForProperties(property, props);\n } else {\n // case (2) variable\n let self = this;\n let fn = function(prefix, value, fallback, suffix) {\n if (!value) {\n return prefix + suffix;\n }\n let propertyValue = self.valueForProperty(props[value], props);\n // if value is \"initial\", then the variable should be treated as unset\n if (!propertyValue || propertyValue === 'initial') {\n // fallback may be --a or var(--a) or literal\n propertyValue = self.valueForProperty(props[fallback] || fallback, props) ||\n fallback;\n } else if (propertyValue === 'apply-shim-inherit') {\n // CSS build will replace `inherit` with `apply-shim-inherit`\n // for use with native css variables.\n // Since we have full control, we can use `inherit` directly.\n propertyValue = 'inherit';\n }\n return prefix + (propertyValue || '') + suffix;\n };\n property = StyleUtil.processVariableAndFallback(property, fn);\n }\n }\n return property && property.trim() || '';\n }\n\n // note: we do not yet support mixin within mixin\n valueForProperties(property, props) {\n let parts = property.split(';');\n for (let i=0, p, m; i<parts.length; i++) {\n if ((p = parts[i])) {\n RX.MIXIN_MATCH.lastIndex = 0;\n m = RX.MIXIN_MATCH.exec(p);\n if (m) {\n p = this.valueForProperty(props[m[1]], props);\n } else {\n let colon = p.indexOf(':');\n if (colon !== -1) {\n let pp = p.substring(colon);\n pp = pp.trim();\n pp = this.valueForProperty(pp, props) || pp;\n p = p.substring(0, colon) + pp;\n }\n }\n parts[i] = (p && p.lastIndexOf(';') === p.length - 1) ?\n // strip trailing ;\n p.slice(0, -1) :\n p || '';\n }\n }\n return parts.join(';');\n }\n\n applyProperties(rule, props) {\n let output = '';\n // dynamically added sheets may not be decorated so ensure they are.\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (rule.propertyInfo.cssText) {\n output = this.valueForProperties(rule.propertyInfo.cssText, props);\n }\n rule['cssText'] = output;\n }\n\n // Apply keyframe transformations to the cssText of a given rule. The\n // keyframeTransforms object is a map of keyframe names to transformer\n // functions which take in cssText and spit out transformed cssText.\n applyKeyframeTransforms(rule, keyframeTransforms) {\n let input = rule['cssText'];\n let output = rule['cssText'];\n if (rule.hasAnimations == null) {\n // Cache whether or not the rule has any animations to begin with:\n rule.hasAnimations = RX.ANIMATION_MATCH.test(input);\n }\n // If there are no animations referenced, we can skip transforms:\n if (rule.hasAnimations) {\n let transform;\n // If we haven't transformed this rule before, we iterate over all\n // transforms:\n if (rule.keyframeNamesToTransform == null) {\n rule.keyframeNamesToTransform = [];\n for (let keyframe in keyframeTransforms) {\n transform = keyframeTransforms[keyframe];\n output = transform(input);\n // If the transform actually changed the CSS text, we cache the\n // transform name for future use:\n if (input !== output) {\n input = output;\n rule.keyframeNamesToTransform.push(keyframe);\n }\n }\n } else {\n // If we already have a list of keyframe names that apply to this\n // rule, we apply only those keyframe name transforms:\n for (let i = 0; i < rule.keyframeNamesToTransform.length; ++i) {\n transform = keyframeTransforms[rule.keyframeNamesToTransform[i]];\n input = transform(input);\n }\n output = input;\n }\n }\n rule['cssText'] = output;\n }\n\n // Test if the rules in these styles matches the given `element` and if so,\n // collect any custom properties into `props`.\n /**\n * @param {StyleNode} rules\n * @param {Element} element\n */\n propertyDataFromStyles(rules, element) {\n let props = {}, self = this;\n // generates a unique key for these matches\n let o = [];\n // note: active rules excludes non-matching @media rules\n StyleUtil.forEachRule(rules, function(rule) {\n // TODO(sorvell): we could trim the set of rules at declaration\n // time to only include ones that have properties\n if (!rule.propertyInfo) {\n self.decorateRule(rule);\n }\n // match element against transformedSelector: selector may contain\n // unwanted uniquification and parsedSelector does not directly match\n // for :host selectors.\n let selectorToMatch = rule.transformedSelector || rule['parsedSelector'];\n if (element && rule.propertyInfo.properties && selectorToMatch) {\n if (matchesSelector.call(element, selectorToMatch)) {\n self.collectProperties(rule, props);\n // produce numeric key for these matches for lookup\n addToBitMask(rule.index, o);\n }\n }\n }, null, true);\n return {properties: props, key: o};\n }\n\n /**\n * @param {Element} scope\n * @param {StyleNode} rule\n * @param {string|undefined} cssBuild\n * @param {function(Object)} callback\n */\n whenHostOrRootRule(scope, rule, cssBuild, callback) {\n if (!rule.propertyInfo) {\n this.decorateRule(rule);\n }\n if (!rule.propertyInfo.properties) {\n return;\n }\n let {is, typeExtension} = StyleUtil.getIsExtends(scope);\n let hostScope = is ?\n StyleTransformer._calcHostScope(is, typeExtension) :\n 'html';\n let parsedSelector = rule['parsedSelector'];\n let isRoot = (parsedSelector === ':host > *' || parsedSelector === 'html');\n let isHost = parsedSelector.indexOf(':host') === 0 && !isRoot;\n // build info is either in scope (when scope is an element) or in the style\n // when scope is the default scope; note: this allows default scope to have\n // mixed mode built and unbuilt styles.\n if (cssBuild === 'shady') {\n // :root -> x-foo > *.x-foo for elements and html for custom-style\n isRoot = parsedSelector === (hostScope + ' > *.' + hostScope) || parsedSelector.indexOf('html') !== -1;\n // :host -> x-foo for elements, but sub-rules have .x-foo in them\n isHost = !isRoot && parsedSelector.indexOf(hostScope) === 0;\n }\n if (cssBuild === 'shadow') {\n isRoot = parsedSelector === ':host > *' || parsedSelector === 'html';\n isHost = isHost && !isRoot;\n }\n if (!isRoot && !isHost) {\n return;\n }\n let selectorToMatch = hostScope;\n if (isHost) {\n // need to transform :host because `:host` does not work with `matches`\n if (!rule.transformedSelector) {\n // transform :host into a matchable selector\n rule.transformedSelector =\n StyleTransformer._transformRuleCss(\n rule,\n StyleTransformer._transformComplexSelector,\n StyleTransformer._calcElementScope(is),\n hostScope\n );\n }\n selectorToMatch = rule.transformedSelector || hostScope;\n }\n callback({\n selector: selectorToMatch,\n isHost: isHost,\n isRoot: isRoot\n });\n }\n/**\n * @param {Element} scope\n * @param {StyleNode} rules\n * @return {Object}\n */\n hostAndRootPropertiesForScope(scope, rules) {\n let hostProps = {}, rootProps = {}, self = this;\n // note: active rules excludes non-matching @media rules\n let cssBuild = rules && rules['__cssBuild'];\n StyleUtil.forEachRule(rules, function(rule) {\n // if scope is StyleDefaults, use _element for matchesSelector\n self.whenHostOrRootRule(scope, rule, cssBuild, function(info) {\n let element = scope._element || scope;\n if (matchesSelector.call(element, info.selector)) {\n if (info.isHost) {\n self.collectProperties(rule, hostProps);\n } else {\n self.collectProperties(rule, rootProps);\n }\n }\n });\n }, null, true);\n return {rootProps: rootProps, hostProps: hostProps};\n }\n\n /**\n * @param {Element} element\n * @param {Object} properties\n * @param {string} scopeSelector\n */\n transformStyles(element, properties, scopeSelector) {\n let self = this;\n let {is, typeExtension} = StyleUtil.getIsExtends(element);\n let hostSelector = StyleTransformer\n ._calcHostScope(is, typeExtension);\n let rxHostSelector = element.extends ?\n '\\\\' + hostSelector.slice(0, -1) + '\\\\]' :\n hostSelector;\n let hostRx = new RegExp(RX.HOST_PREFIX + rxHostSelector +\n RX.HOST_SUFFIX);\n let rules = StyleInfo.get(element).styleRules;\n let keyframeTransforms =\n this._elementKeyframeTransforms(element, rules, scopeSelector);\n return StyleTransformer.elementStyles(element, rules, function(rule) {\n self.applyProperties(rule, properties);\n if (!nativeShadow &&\n !StyleUtil.isKeyframesSelector(rule) &&\n rule['cssText']) {\n // NOTE: keyframe transforms only scope munge animation names, so it\n // is not necessary to apply them in ShadowDOM.\n self.applyKeyframeTransforms(rule, keyframeTransforms);\n self._scopeSelector(rule, hostRx, hostSelector, scopeSelector);\n }\n });\n }\n\n /**\n * @param {Element} element\n * @param {StyleNode} rules\n * @param {string} scopeSelector\n * @return {Object}\n */\n _elementKeyframeTransforms(element, rules, scopeSelector) {\n let keyframesRules = rules._keyframes;\n let keyframeTransforms = {};\n if (!nativeShadow && keyframesRules) {\n // For non-ShadowDOM, we transform all known keyframes rules in\n // advance for the current scope. This allows us to catch keyframes\n // rules that appear anywhere in the stylesheet:\n for (let i = 0, keyframesRule = keyframesRules[i];\n i < keyframesRules.length;\n keyframesRule = keyframesRules[++i]) {\n this._scopeKeyframes(keyframesRule, scopeSelector);\n keyframeTransforms[keyframesRule['keyframesName']] =\n this._keyframesRuleTransformer(keyframesRule);\n }\n }\n return keyframeTransforms;\n }\n\n // Generate a factory for transforming a chunk of CSS text to handle a\n // particular scoped keyframes rule.\n /**\n * @param {StyleNode} keyframesRule\n * @return {function(string):string}\n */\n _keyframesRuleTransformer(keyframesRule) {\n return function(cssText) {\n return cssText.replace(\n keyframesRule.keyframesNameRx,\n keyframesRule.transformedKeyframesName);\n };\n }\n\n/**\n * Transforms `@keyframes` names to be unique for the current host.\n * Example: @keyframes foo-anim -> @keyframes foo-anim-x-foo-0\n *\n * @param {StyleNode} rule\n * @param {string} scopeId\n */\n _scopeKeyframes(rule, scopeId) {\n // Animation names are of the form [\\w-], so ensure that the name regex does not partially apply\n // to similarly named keyframe names by checking for a word boundary at the beginning and\n // a non-word boundary or `-` at the end.\n rule.keyframesNameRx = new RegExp(`\\\\b${rule['keyframesName']}(?!\\\\B|-)`, 'g');\n rule.transformedKeyframesName = rule['keyframesName'] + '-' + scopeId;\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n rule['selector'] = rule.transformedSelector.replace(\n rule['keyframesName'], rule.transformedKeyframesName);\n }\n\n // Strategy: x scope shim a selector e.g. to scope `.x-foo-42` (via classes):\n // non-host selector: .a.x-foo -> .x-foo-42 .a.x-foo\n // host selector: x-foo.wide -> .x-foo-42.wide\n // note: we use only the scope class (.x-foo-42) and not the hostSelector\n // (x-foo) to scope :host rules; this helps make property host rules\n // have low specificity. They are overrideable by class selectors but,\n // unfortunately, not by type selectors (e.g. overriding via\n // `.special` is ok, but not by `x-foo`).\n /**\n * @param {StyleNode} rule\n * @param {RegExp} hostRx\n * @param {string} hostSelector\n * @param {string} scopeId\n */\n _scopeSelector(rule, hostRx, hostSelector, scopeId) {\n rule.transformedSelector = rule.transformedSelector || rule['selector'];\n let selector = rule.transformedSelector;\n let scope = '.' + scopeId;\n let parts = StyleUtil.splitSelectorList(selector);\n for (let i=0, l=parts.length, p; (i<l) && (p=parts[i]); i++) {\n parts[i] = p.match(hostRx) ?\n p.replace(hostSelector, scope) :\n scope + ' ' + p;\n }\n rule['selector'] = parts.join(',');\n }\n\n /**\n * @param {Element} element\n * @param {string} selector\n * @param {string} old\n */\n applyElementScopeSelector(element, selector, old) {\n let c = element.getAttribute('class') || '';\n let v = c;\n if (old) {\n v = c.replace(\n new RegExp('\\\\s*' + XSCOPE_NAME + '\\\\s*' + old + '\\\\s*', 'g'), ' ');\n }\n v += (v ? ' ' : '') + XSCOPE_NAME + ' ' + selector;\n if (c !== v) {\n StyleUtil.setElementClassRaw(element, v);\n }\n }\n\n /**\n * @param {HTMLElement} element\n * @param {Object} properties\n * @param {string} selector\n * @param {HTMLStyleElement} style\n * @return {HTMLStyleElement}\n */\n applyElementStyle(element, properties, selector, style) {\n // calculate cssText to apply\n let cssText = style ? style.textContent || '' :\n this.transformStyles(element, properties, selector);\n // if shady and we have a cached style that is not style, decrement\n let styleInfo = StyleInfo.get(element);\n let s = styleInfo.customStyle;\n if (s && !nativeShadow && (s !== style)) {\n s['_useCount']--;\n if (s['_useCount'] <= 0 && s.parentNode) {\n s.parentNode.removeChild(s);\n }\n }\n // apply styling always under native or if we generated style\n // or the cached style is not in document(!)\n if (nativeShadow) {\n // update existing style only under native\n if (styleInfo.customStyle) {\n styleInfo.customStyle.textContent = cssText;\n style = styleInfo.customStyle;\n // otherwise, if we have css to apply, do so\n } else if (cssText) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n style = StyleUtil.applyCss(cssText, selector, element.shadowRoot,\n styleInfo.placeholder);\n }\n } else {\n // shady and no cache hit\n if (!style) {\n // apply css after the scope style of the element to help with\n // style precedence rules.\n if (cssText) {\n style = StyleUtil.applyCss(cssText, selector, null,\n styleInfo.placeholder);\n }\n // shady and cache hit but not in document\n } else if (!style.parentNode) {\n if (IS_IE && cssText.indexOf('@media') > -1) {\n // @media rules may be stale in IE 10 and 11\n // refresh the text content of the style to revalidate them.\n style.textContent = cssText;\n }\n StyleUtil.applyStyle(style, null, styleInfo.placeholder);\n }\n }\n // ensure this style is our custom style and increment its use count.\n if (style) {\n style['_useCount'] = style['_useCount'] || 0;\n // increment use count if we changed styles\n if (styleInfo.customStyle != style) {\n style['_useCount']++;\n }\n styleInfo.customStyle = style;\n }\n return style;\n }\n\n /**\n * @param {Element} style\n * @param {Object} properties\n */\n applyCustomStyle(style, properties) {\n let rules = StyleUtil.rulesForStyle(/** @type {HTMLStyleElement} */(style));\n let self = this;\n style.textContent = StyleUtil.toCssText(rules, function(/** StyleNode */rule) {\n let css = rule['cssText'] = rule['parsedCssText'];\n if (rule.propertyInfo && rule.propertyInfo.cssText) {\n // remove property assignments\n // so next function isn't confused\n // NOTE: we have 3 categories of css:\n // (1) normal properties,\n // (2) custom property assignments (--foo: red;),\n // (3) custom property usage: border: var(--foo); @apply(--foo);\n // In elements, 1 and 3 are separated for efficiency; here they\n // are not and this makes this case unique.\n css = removeCustomPropAssignment(/** @type {string} */(css));\n // replace with reified properties, scenario is same as mixin\n rule['cssText'] = self.valueForProperties(css, properties);\n }\n });\n }\n}\n\n/**\n * @param {number} n\n * @param {Array<number>} bits\n */\nfunction addToBitMask(n, bits) {\n let o = parseInt(n / 32, 10);\n let v = 1 << (n % 32);\n bits[o] = (bits[o] || 0) | v;\n}\n\nexport default new StyleProperties();","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {applyStylePlaceHolder} from './style-util.js';\nimport {nativeShadow} from './style-settings.js';\n\n/** @type {!Object<string, !Node>} */\nconst placeholderMap = {};\n\n/**\n * @param {string} elementName\n * @return {Node}\n */\nexport function getStylePlaceholder(elementName) {\n return placeholderMap[elementName] || null;\n}\n\n/**\n * @param {string} elementName\n */\nexport function ensureStylePlaceholder(elementName) {\n if (!placeholderMap[elementName]) {\n placeholderMap[elementName] = applyStylePlaceHolder(elementName);\n }\n}\n\n/**\n * @const {CustomElementRegistry}\n */\nconst ce = window['customElements'];\nif (ce && !nativeShadow) {\n /**\n * @const {function(this:CustomElementRegistry, string,function(new:HTMLElement),{extends: string}=)}\n */\n const origDefine = ce['define'];\n /**\n * @param {string} name\n * @param {function(new:HTMLElement)} clazz\n * @param {{extends: string}=} options\n */\n const wrappedDefine = (name, clazz, options) => {\n ensureStylePlaceholder(name);\n origDefine.call(/** @type {!CustomElementRegistry} */(ce), name, clazz, options);\n };\n ce['define'] = wrappedDefine;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\nexport default class StyleCache {\n constructor(typeMax = 100) {\n // map element name -> [{properties, styleElement, scopeSelector}]\n this.cache = {};\n this.typeMax = typeMax;\n }\n\n _validate(cacheEntry, properties, ownPropertyNames) {\n for (let idx = 0; idx < ownPropertyNames.length; idx++) {\n let pn = ownPropertyNames[idx];\n if (cacheEntry.properties[pn] !== properties[pn]) {\n return false;\n }\n }\n return true;\n }\n\n store(tagname, properties, styleElement, scopeSelector) {\n let list = this.cache[tagname] || [];\n list.push({properties, styleElement, scopeSelector});\n if (list.length > this.typeMax) {\n list.shift();\n }\n this.cache[tagname] = list;\n }\n\n fetch(tagname, properties, ownPropertyNames) {\n let list = this.cache[tagname];\n if (!list) {\n return;\n }\n // reverse list for most-recent lookups\n for (let idx = list.length - 1; idx >= 0; idx--) {\n let entry = list[idx];\n if (this._validate(entry, properties, ownPropertyNames)) {\n return entry;\n }\n }\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {nativeShadow} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport {getIsExtends} from './style-util.js';\n\nexport let flush = function() {};\n\n/**\n * @param {HTMLElement} element\n * @return {!Array<string>}\n */\nfunction getClasses(element) {\n let classes = [];\n if (element.classList) {\n classes = Array.from(element.classList);\n } else if (element instanceof window['SVGElement'] && element.hasAttribute('class')) {\n classes = element.getAttribute('class').split(/\\s+/);\n }\n return classes;\n}\n\n/**\n * @param {HTMLElement} element\n * @return {string}\n */\nfunction getCurrentScope(element) {\n let classes = getClasses(element);\n let idx = classes.indexOf(StyleTransformer.SCOPE_NAME);\n if (idx > -1) {\n return classes[idx + 1];\n }\n return '';\n}\n\n/**\n * @param {Array<MutationRecord|null>|null} mxns\n */\nfunction handler(mxns) {\n for (let x=0; x < mxns.length; x++) {\n let mxn = mxns[x];\n if (mxn.target === document.documentElement ||\n mxn.target === document.head) {\n continue;\n }\n for (let i=0; i < mxn.addedNodes.length; i++) {\n let n = mxn.addedNodes[i];\n if (n.nodeType !== Node.ELEMENT_NODE) {\n continue;\n }\n n = /** @type {HTMLElement} */(n); // eslint-disable-line no-self-assign\n let root = n.getRootNode();\n let currentScope = getCurrentScope(n);\n // node was scoped, but now is in document\n if (currentScope && root === n.ownerDocument) {\n StyleTransformer.domRemoveScope(n, currentScope);\n } else if (root.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n let newScope;\n let host = /** @type {ShadowRoot} */(root).host;\n // element may no longer be in a shadowroot\n if (!host) {\n continue;\n }\n newScope = getIsExtends(host).is;\n // rescope current node and subtree if necessary\n if (newScope !== currentScope) {\n StyleTransformer.domReplaceScope(n, currentScope, newScope);\n }\n // make sure all the subtree elements are scoped correctly\n let unscopedNodes = window['ShadyDOM']['nativeMethods']['querySelectorAll'].call(\n n, `:not(.${StyleTransformer.SCOPE_NAME})`);\n for (let j = 0; j < unscopedNodes.length; j++) {\n // it's possible, during large batch inserts, that nodes that aren't\n // scoped within the current scope were added.\n // To make sure that any unscoped nodes that were inserted in the current batch are correctly styled,\n // query all unscoped nodes and force their style-scope to be applied.\n // This could happen if a sub-element appended an unscoped node in its shadowroot and this function\n // runs on a parent element of the host of that unscoped node:\n // parent-element -> element -> unscoped node\n // Here unscoped node should have the style-scope element, not parent-element.\n const unscopedNode = unscopedNodes[j];\n const rootForUnscopedNode = unscopedNode.getRootNode();\n const hostForUnscopedNode = rootForUnscopedNode.host;\n if (!hostForUnscopedNode) {\n continue;\n }\n const scopeForPreviouslyUnscopedNode = getIsExtends(hostForUnscopedNode).is;\n StyleTransformer.element(unscopedNode, scopeForPreviouslyUnscopedNode);\n }\n }\n }\n }\n}\n\nif (!nativeShadow) {\n let observer = new MutationObserver(handler);\n let start = (node) => {\n observer.observe(node, {childList: true, subtree: true});\n }\n let nativeCustomElements = (window['customElements'] &&\n !window['customElements']['polyfillWrapFlushCallback']);\n // need to start immediately with native custom elements\n // TODO(dfreedm): with polyfilled HTMLImports and native custom elements\n // excessive mutations may be observed; this can be optimized via cooperation\n // with the HTMLImports polyfill.\n if (nativeCustomElements) {\n start(document);\n } else {\n let delayedStart = () => {\n start(document.body);\n }\n // use polyfill timing if it's available\n if (window['HTMLImports']) {\n window['HTMLImports']['whenReady'](delayedStart);\n // otherwise push beyond native imports being ready\n // which requires RAF + readystate interactive.\n } else {\n requestAnimationFrame(function() {\n if (document.readyState === 'loading') {\n let listener = function() {\n delayedStart();\n document.removeEventListener('readystatechange', listener);\n }\n document.addEventListener('readystatechange', listener);\n } else {\n delayedStart();\n }\n });\n }\n }\n\n flush = function() {\n handler(observer.takeRecords());\n }\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\n/**\n * @const {!Object<string, !HTMLTemplateElement>}\n */\nconst templateMap = {};\nexport default templateMap;\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\nimport templateMap from './template-map.js';\nimport {StyleNode} from './css-parse.js'; // eslint-disable-line no-unused-vars\n\n/*\n * Utilities for handling invalidating apply-shim mixins for a given template.\n *\n * The invalidation strategy involves keeping track of the \"current\" version of a template's mixins, and updating that count when a mixin is invalidated.\n * The template\n */\n\n/** @const {string} */\nconst CURRENT_VERSION = '_applyShimCurrentVersion';\n\n/** @const {string} */\nconst NEXT_VERSION = '_applyShimNextVersion';\n\n/** @const {string} */\nconst VALIDATING_VERSION = '_applyShimValidatingVersion';\n\n/**\n * @const {Promise<void>}\n */\nconst promise = Promise.resolve();\n\n/**\n * @param {string} elementName\n */\nexport function invalidate(elementName){\n let template = templateMap[elementName];\n if (template) {\n invalidateTemplate(template);\n }\n}\n\n/**\n * This function can be called multiple times to mark a template invalid\n * and signal that the style inside must be regenerated.\n *\n * Use `startValidatingTemplate` to begin an asynchronous validation cycle.\n * During that cycle, call `templateIsValidating` to see if the template must\n * be revalidated\n * @param {HTMLTemplateElement} template\n */\nexport function invalidateTemplate(template) {\n // default the current version to 0\n template[CURRENT_VERSION] = template[CURRENT_VERSION] || 0;\n // ensure the \"validating for\" flag exists\n template[VALIDATING_VERSION] = template[VALIDATING_VERSION] || 0;\n // increment the next version\n template[NEXT_VERSION] = (template[NEXT_VERSION] || 0) + 1;\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValid(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValid(template);\n }\n return true;\n}\n\n/**\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValid(template) {\n return template[CURRENT_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * @param {string} elementName\n * @return {boolean}\n */\nexport function isValidating(elementName) {\n let template = templateMap[elementName];\n if (template) {\n return templateIsValidating(template);\n }\n return false;\n}\n\n/**\n * Returns true if the template is currently invalid and `startValidating` has been called since the last invalidation.\n * If false, the template must be validated.\n * @param {HTMLTemplateElement} template\n * @return {boolean}\n */\nexport function templateIsValidating(template) {\n return !templateIsValid(template) && template[VALIDATING_VERSION] === template[NEXT_VERSION];\n}\n\n/**\n * the template is marked as `validating` for one microtask so that all instances\n * found in the tree crawl of `applyStyle` will update themselves,\n * but the template will only be updated once.\n * @param {string} elementName\n*/\nexport function startValidating(elementName) {\n let template = templateMap[elementName];\n startValidatingTemplate(template);\n}\n\n/**\n * Begin an asynchronous invalidation cycle.\n * This should be called after every validation of a template\n *\n * After one microtask, the template will be marked as valid until the next call to `invalidateTemplate`\n * @param {HTMLTemplateElement} template\n */\nexport function startValidatingTemplate(template) {\n // remember that the current \"next version\" is the reason for this validation cycle\n template[VALIDATING_VERSION] = template[NEXT_VERSION];\n // however, there only needs to be one async task to clear the counters\n if (!template._validating) {\n template._validating = true;\n promise.then(function() {\n // sync the current version to let future invalidations cause a refresh cycle\n template[CURRENT_VERSION] = template[NEXT_VERSION];\n template._validating = false;\n });\n }\n}\n\n/**\n * @return {boolean}\n */\nexport function elementsAreInvalid() {\n for (let elementName in templateMap) {\n let template = templateMap[elementName];\n if (!templateIsValid(template)) {\n return true;\n }\n }\n return false;\n}","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport {parse, StyleNode} from './css-parse.js';\nimport {nativeShadow, nativeCssVariables} from './style-settings.js';\nimport StyleTransformer from './style-transformer.js';\nimport * as StyleUtil from './style-util.js';\nimport StyleProperties from './style-properties.js';\nimport {ensureStylePlaceholder, getStylePlaceholder} from './style-placeholder.js';\nimport StyleInfo from './style-info.js';\nimport StyleCache from './style-cache.js';\nimport {flush as watcherFlush} from './document-watcher.js';\nimport templateMap from './template-map.js';\nimport * as ApplyShimUtils from './apply-shim-utils.js';\nimport {updateNativeProperties, detectMixin} from './common-utils.js';\nimport {CustomStyleInterfaceInterface} from './custom-style-interface.js'; // eslint-disable-line no-unused-vars\n\n/**\n * @const {StyleCache}\n */\nconst styleCache = new StyleCache();\n\nexport default class ScopingShim {\n constructor() {\n this._scopeCounter = {};\n this._documentOwner = /** @type {!HTMLElement} */(document.documentElement);\n let ast = new StyleNode();\n ast['rules'] = [];\n this._documentOwnerStyleInfo = StyleInfo.set(this._documentOwner, new StyleInfo(ast));\n this._elementsHaveApplied = false;\n this._applyShim = null;\n /** @type {?CustomStyleInterfaceInterface} */\n this._customStyleInterface = null;\n }\n flush() {\n watcherFlush();\n }\n _generateScopeSelector(name) {\n let id = this._scopeCounter[name] = (this._scopeCounter[name] || 0) + 1;\n return `${name}-${id}`;\n }\n getStyleAst(style) {\n return StyleUtil.rulesForStyle(style);\n }\n styleAstToString(ast) {\n return StyleUtil.toCssText(ast);\n }\n _gatherStyles(template) {\n return StyleUtil.gatherStyleText(template.content);\n }\n _getCssBuild(template) {\n let style = template.content.querySelector('style');\n if (!style) {\n return '';\n }\n return style.getAttribute('css-build') || '';\n }\n /**\n * Prepare the styling and template for the given element type\n *\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} typeExtension\n */\n prepareTemplate(template, elementName, typeExtension) {\n this.prepareTemplateDom(template, elementName);\n this.prepareTemplateStyles(template, elementName, typeExtension);\n }\n /**\n * Prepare styling for the given element type\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} typeExtension\n */\n prepareTemplateStyles(template, elementName, typeExtension) {\n if (template._prepared) {\n return;\n }\n // style placeholders are only used when ShadyDOM is active\n if (!nativeShadow) {\n ensureStylePlaceholder(elementName);\n }\n template._prepared = true;\n template.name = elementName;\n template.extends = typeExtension;\n templateMap[elementName] = template;\n let cssBuild = this._getCssBuild(template);\n let cssText = this._gatherStyles(template);\n let info = {\n is: elementName,\n extends: typeExtension,\n __cssBuild: cssBuild,\n };\n // check if the styling has mixin definitions or uses\n this._ensure();\n let hasMixins = detectMixin(cssText)\n let ast = parse(cssText);\n // only run the applyshim transforms if there is a mixin involved\n if (hasMixins && nativeCssVariables && this._applyShim) {\n this._applyShim['transformRules'](ast, elementName);\n }\n template['_styleAst'] = ast;\n template._cssBuild = cssBuild;\n\n let ownPropertyNames = [];\n if (!nativeCssVariables) {\n ownPropertyNames = StyleProperties.decorateStyles(template['_styleAst']);\n }\n if (!ownPropertyNames.length || nativeCssVariables) {\n let root = nativeShadow ? template.content : null;\n let placeholder = getStylePlaceholder(elementName);\n let style = this._generateStaticStyle(info, template['_styleAst'], root, placeholder);\n template._style = style;\n }\n template._ownPropertyNames = ownPropertyNames;\n }\n /**\n * Prepare template for the given element type\n * @param {HTMLTemplateElement} template\n * @param {string} elementName\n */\n prepareTemplateDom(template, elementName) {\n if (!nativeShadow && !template._domPrepared) {\n template._domPrepared = true;\n StyleTransformer.domAddScope(template.content, elementName);\n }\n }\n _generateStaticStyle(info, rules, shadowroot, placeholder) {\n let cssText = StyleTransformer.elementStyles(info, rules);\n if (cssText.length) {\n return StyleUtil.applyCss(cssText, info.is, shadowroot, placeholder);\n }\n }\n _prepareHost(host) {\n let {is, typeExtension} = StyleUtil.getIsExtends(host);\n let placeholder = getStylePlaceholder(is)\n let template = templateMap[is];\n let ast;\n let ownStylePropertyNames;\n let cssBuild;\n if (template) {\n ast = template['_styleAst'];\n ownStylePropertyNames = template._ownPropertyNames;\n cssBuild = template._cssBuild;\n }\n const styleInfo = new StyleInfo(\n ast,\n placeholder,\n ownStylePropertyNames,\n is,\n typeExtension,\n cssBuild\n );\n // only set the style info after this element has registered its template\n if (template) {\n StyleInfo.set(host, styleInfo);\n }\n return styleInfo;\n }\n _ensureApplyShim() {\n if (this._applyShim) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.ApplyShim) {\n this._applyShim = window.ShadyCSS.ApplyShim;\n this._applyShim['invalidCallback'] = ApplyShimUtils.invalidate;\n }\n }\n _ensureCustomStyleInterface() {\n if (this._customStyleInterface) {\n return;\n } else if (window.ShadyCSS && window.ShadyCSS.CustomStyleInterface) {\n this._customStyleInterface = /** @type {!CustomStyleInterfaceInterface} */(window.ShadyCSS.CustomStyleInterface);\n /** @type {function(!HTMLStyleElement)} */\n this._customStyleInterface['transformCallback'] = (style) => {this.transformCustomStyleForDocument(style)};\n this._customStyleInterface['validateCallback'] = () => {\n requestAnimationFrame(() => {\n if (this._customStyleInterface['enqueued'] || this._elementsHaveApplied) {\n this.flushCustomStyles();\n }\n })\n };\n }\n }\n _ensure() {\n this._ensureApplyShim();\n this._ensureCustomStyleInterface();\n }\n /**\n * Flush and apply custom styles to document\n */\n flushCustomStyles() {\n this._ensure();\n if (!this._customStyleInterface) {\n return;\n }\n let customStyles = this._customStyleInterface['processStyles']();\n // early return if custom-styles don't need validation\n if (!this._customStyleInterface['enqueued']) {\n return;\n }\n if (!nativeCssVariables) {\n this._updateProperties(this._documentOwner, this._documentOwnerStyleInfo);\n this._applyCustomStyles(customStyles);\n } else {\n this._revalidateCustomStyleApplyShim(customStyles);\n }\n this._customStyleInterface['enqueued'] = false;\n // if custom elements have upgraded and there are no native css variables, we must recalculate the whole tree\n if (this._elementsHaveApplied && !nativeCssVariables) {\n this.styleDocument();\n }\n }\n /**\n * Apply styles for the given element\n *\n * @param {!HTMLElement} host\n * @param {Object=} overrideProps\n */\n styleElement(host, overrideProps) {\n let {is} = StyleUtil.getIsExtends(host);\n let styleInfo = StyleInfo.get(host);\n if (!styleInfo) {\n styleInfo = this._prepareHost(host);\n }\n // Only trip the `elementsHaveApplied` flag if a node other that the root document has `applyStyle` called\n if (!this._isRootOwner(host)) {\n this._elementsHaveApplied = true;\n }\n if (overrideProps) {\n styleInfo.overrideStyleProperties =\n styleInfo.overrideStyleProperties || {};\n Object.assign(styleInfo.overrideStyleProperties, overrideProps);\n }\n if (!nativeCssVariables) {\n this.flush();\n this._updateProperties(host, styleInfo);\n if (styleInfo.ownStylePropertyNames && styleInfo.ownStylePropertyNames.length) {\n this._applyStyleProperties(host, styleInfo);\n }\n } else {\n if (styleInfo.overrideStyleProperties) {\n updateNativeProperties(host, styleInfo.overrideStyleProperties);\n }\n let template = templateMap[is];\n // bail early if there is no shadowroot for this element\n if (!template && !this._isRootOwner(host)) {\n return;\n }\n if (template && template._style && !ApplyShimUtils.templateIsValid(template)) {\n // update template\n if (!ApplyShimUtils.templateIsValidating(template)) {\n this._ensure();\n this._applyShim && this._applyShim['transformRules'](template['_styleAst'], is);\n template._style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n ApplyShimUtils.startValidatingTemplate(template);\n }\n // update instance if native shadowdom\n if (nativeShadow) {\n let root = host.shadowRoot;\n if (root) {\n let style = root.querySelector('style');\n style.textContent = StyleTransformer.elementStyles(host, styleInfo.styleRules);\n }\n }\n styleInfo.styleRules = template['_styleAst'];\n }\n }\n }\n _styleOwnerForNode(node) {\n let root = node.getRootNode();\n let host = root.host;\n if (host) {\n if (StyleInfo.get(host)) {\n return host;\n } else {\n return this._styleOwnerForNode(host);\n }\n }\n return this._documentOwner;\n }\n _isRootOwner(node) {\n return (node === this._documentOwner);\n }\n _applyStyleProperties(host, styleInfo) {\n let is = StyleUtil.getIsExtends(host).is;\n let cacheEntry = styleCache.fetch(is, styleInfo.styleProperties, styleInfo.ownStylePropertyNames);\n let cachedScopeSelector = cacheEntry && cacheEntry.scopeSelector;\n let cachedStyle = cacheEntry ? cacheEntry.styleElement : null;\n let oldScopeSelector = styleInfo.scopeSelector;\n // only generate new scope if cached style is not found\n styleInfo.scopeSelector = cachedScopeSelector || this._generateScopeSelector(is);\n let style = StyleProperties.applyElementStyle(host, styleInfo.styleProperties, styleInfo.scopeSelector, cachedStyle);\n if (!nativeShadow) {\n StyleProperties.applyElementScopeSelector(host, styleInfo.scopeSelector, oldScopeSelector);\n }\n if (!cacheEntry) {\n styleCache.store(is, styleInfo.styleProperties, style, styleInfo.scopeSelector);\n }\n return style;\n }\n _updateProperties(host, styleInfo) {\n let owner = this._styleOwnerForNode(host);\n let ownerStyleInfo = StyleInfo.get(owner);\n let ownerProperties = ownerStyleInfo.styleProperties;\n let props = Object.create(ownerProperties || null);\n let hostAndRootProps = StyleProperties.hostAndRootPropertiesForScope(host, styleInfo.styleRules);\n let propertyData = StyleProperties.propertyDataFromStyles(ownerStyleInfo.styleRules, host);\n let propertiesMatchingHost = propertyData.properties\n Object.assign(\n props,\n hostAndRootProps.hostProps,\n propertiesMatchingHost,\n hostAndRootProps.rootProps\n );\n this._mixinOverrideStyles(props, styleInfo.overrideStyleProperties);\n StyleProperties.reify(props);\n styleInfo.styleProperties = props;\n }\n _mixinOverrideStyles(props, overrides) {\n for (let p in overrides) {\n let v = overrides[p];\n // skip override props if they are not truthy or 0\n // in order to fall back to inherited values\n if (v || v === 0) {\n props[p] = v;\n }\n }\n }\n /**\n * Update styles of the whole document\n *\n * @param {Object=} properties\n */\n styleDocument(properties) {\n this.styleSubtree(this._documentOwner, properties);\n }\n /**\n * Update styles of a subtree\n *\n * @param {!HTMLElement} host\n * @param {Object=} properties\n */\n styleSubtree(host, properties) {\n let root = host.shadowRoot;\n if (root || this._isRootOwner(host)) {\n this.styleElement(host, properties);\n }\n // process the shadowdom children of `host`\n let shadowChildren = root && (root.children || root.childNodes);\n if (shadowChildren) {\n for (let i = 0; i < shadowChildren.length; i++) {\n let c = /** @type {!HTMLElement} */(shadowChildren[i]);\n this.styleSubtree(c);\n }\n } else {\n // process the lightdom children of `host`\n let children = host.children || host.childNodes;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n let c = /** @type {!HTMLElement} */(children[i]);\n this.styleSubtree(c);\n }\n }\n }\n }\n /* Custom Style operations */\n _revalidateCustomStyleApplyShim(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n this._revalidateApplyShim(s);\n }\n }\n }\n _applyCustomStyles(customStyles) {\n for (let i = 0; i < customStyles.length; i++) {\n let c = customStyles[i];\n let s = this._customStyleInterface['getStyleForCustomStyle'](c);\n if (s) {\n StyleProperties.applyCustomStyle(s, this._documentOwnerStyleInfo.styleProperties);\n }\n }\n }\n transformCustomStyleForDocument(style) {\n let ast = StyleUtil.rulesForStyle(style);\n StyleUtil.forEachRule(ast, (rule) => {\n if (nativeShadow) {\n StyleTransformer.normalizeRootSelector(rule);\n } else {\n StyleTransformer.documentRule(rule);\n }\n if (nativeCssVariables) {\n this._ensure();\n this._applyShim && this._applyShim['transformRule'](rule);\n }\n });\n if (nativeCssVariables) {\n style.textContent = StyleUtil.toCssText(ast);\n } else {\n this._documentOwnerStyleInfo.styleRules['rules'].push(ast);\n }\n }\n _revalidateApplyShim(style) {\n if (nativeCssVariables && this._applyShim) {\n let ast = StyleUtil.rulesForStyle(style);\n this._ensure();\n this._applyShim['transformRules'](ast);\n style.textContent = StyleUtil.toCssText(ast);\n }\n }\n getComputedStyleValue(element, property) {\n let value;\n if (!nativeCssVariables) {\n // element is either a style host, or an ancestor of a style host\n let styleInfo = StyleInfo.get(element) || StyleInfo.get(this._styleOwnerForNode(element));\n value = styleInfo.styleProperties[property];\n }\n // fall back to the property value from the computed styling\n value = value || window.getComputedStyle(element).getPropertyValue(property);\n // trim whitespace that can come after the `:` in css\n // example: padding: 2px -> \" 2px\"\n return value ? value.trim() : '';\n }\n // given an element and a classString, replaces\n // the element's class with the provided classString and adds\n // any necessary ShadyCSS static and property based scoping selectors\n setElementClass(element, classString) {\n let root = element.getRootNode();\n let classes = classString ? classString.split(/\\s/) : [];\n let scopeName = root.host && root.host.localName;\n // If no scope, try to discover scope name from existing class.\n // This can occur if, for example, a template stamped element that\n // has been scoped is manipulated when not in a root.\n if (!scopeName) {\n var classAttr = element.getAttribute('class');\n if (classAttr) {\n let k$ = classAttr.split(/\\s/);\n for (let i=0; i < k$.length; i++) {\n if (k$[i] === StyleTransformer.SCOPE_NAME) {\n scopeName = k$[i+1];\n break;\n }\n }\n }\n }\n if (scopeName) {\n classes.push(StyleTransformer.SCOPE_NAME, scopeName);\n }\n if (!nativeCssVariables) {\n let styleInfo = StyleInfo.get(element);\n if (styleInfo && styleInfo.scopeSelector) {\n classes.push(StyleProperties.XSCOPE_NAME, styleInfo.scopeSelector);\n }\n }\n StyleUtil.setElementClassRaw(element, classes.join(' '));\n }\n _styleInfoForNode(node) {\n return StyleInfo.get(node);\n }\n}\n\n/* exports */\nScopingShim.prototype['flush'] = ScopingShim.prototype.flush;\nScopingShim.prototype['prepareTemplate'] = ScopingShim.prototype.prepareTemplate;\nScopingShim.prototype['styleElement'] = ScopingShim.prototype.styleElement;\nScopingShim.prototype['styleDocument'] = ScopingShim.prototype.styleDocument;\nScopingShim.prototype['styleSubtree'] = ScopingShim.prototype.styleSubtree;\nScopingShim.prototype['getComputedStyleValue'] = ScopingShim.prototype.getComputedStyleValue;\nScopingShim.prototype['setElementClass'] = ScopingShim.prototype.setElementClass;\nScopingShim.prototype['_styleInfoForNode'] = ScopingShim.prototype._styleInfoForNode;\nScopingShim.prototype['transformCustomStyleForDocument'] = ScopingShim.prototype.transformCustomStyleForDocument;\nScopingShim.prototype['getStyleAst'] = ScopingShim.prototype.getStyleAst;\nScopingShim.prototype['styleAstToString'] = ScopingShim.prototype.styleAstToString;\nScopingShim.prototype['flushCustomStyles'] = ScopingShim.prototype.flushCustomStyles;\nObject.defineProperties(ScopingShim.prototype, {\n 'nativeShadow': {\n get() {\n return nativeShadow;\n }\n },\n 'nativeCss': {\n get() {\n return nativeCssVariables;\n }\n }\n});\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport { MIXIN_MATCH, VAR_ASSIGN } from './common-regex.js';\n\n/**\n * @param {Element} element\n * @param {Object=} properties\n */\nexport function updateNativeProperties(element, properties) {\n // remove previous properties\n for (let p in properties) {\n // NOTE: for bc with shim, don't apply null values.\n if (p === null) {\n element.style.removeProperty(p);\n } else {\n element.style.setProperty(p, properties[p]);\n }\n }\n}\n\n/**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\nexport function getComputedStyleValue(element, property) {\n /**\n * @const {string}\n */\n const value = window.getComputedStyle(element).getPropertyValue(property);\n if (!value) {\n return '';\n } else {\n return value.trim();\n }\n}\n\n/**\n * return true if `cssText` contains a mixin definition or consumption\n * @param {string} cssText\n * @return {boolean}\n */\nexport function detectMixin(cssText) {\n const has = MIXIN_MATCH.test(cssText) || VAR_ASSIGN.test(cssText);\n // reset state of the regexes\n MIXIN_MATCH.lastIndex = 0;\n VAR_ASSIGN.lastIndex = 0;\n return has;\n}\n","/**\n@license\nCopyright (c) 2017 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n\n'use strict';\n\nimport ScopingShim from '../src/scoping-shim.js';\nimport {nativeCssVariables, nativeShadow} from '../src/style-settings.js';\n\n/** @const {ScopingShim} */\nconst scopingShim = new ScopingShim();\n\nlet ApplyShim, CustomStyleInterface;\n\nif (window['ShadyCSS']) {\n ApplyShim = window['ShadyCSS']['ApplyShim'];\n CustomStyleInterface = window['ShadyCSS']['CustomStyleInterface'];\n}\n\nwindow.ShadyCSS = {\n ScopingShim: scopingShim,\n /**\n * @param {!HTMLTemplateElement} template\n * @param {string} elementName\n * @param {string=} elementExtends\n */\n prepareTemplate(template, elementName, elementExtends) {\n scopingShim.flushCustomStyles();\n scopingShim.prepareTemplate(template, elementName, elementExtends)\n },\n\n prepareTemplateDom(template, elementName) {\n scopingShim.prepareTemplateDom(template, elementName);\n },\n\n prepareTemplateStyles(template, elementName, elementExtends) {\n scopingShim.flushCustomStyles();\n scopingShim.prepareTemplateStyles(template, elementName, elementExtends)\n },\n /**\n * @param {!HTMLElement} element\n * @param {Object=} properties\n */\n styleSubtree(element, properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleSubtree(element, properties);\n },\n\n /**\n * @param {!HTMLElement} element\n */\n styleElement(element) {\n scopingShim.flushCustomStyles();\n scopingShim.styleElement(element);\n },\n\n /**\n * @param {Object=} properties\n */\n styleDocument(properties) {\n scopingShim.flushCustomStyles();\n scopingShim.styleDocument(properties);\n },\n\n flushCustomStyles() {\n scopingShim.flushCustomStyles();\n },\n\n /**\n * @param {Element} element\n * @param {string} property\n * @return {string}\n */\n getComputedStyleValue(element, property) {\n return scopingShim.getComputedStyleValue(element, property);\n },\n\n nativeCss: nativeCssVariables,\n\n nativeShadow: nativeShadow\n};\n\nif (ApplyShim) {\n window.ShadyCSS.ApplyShim = ApplyShim;\n}\n\nif (CustomStyleInterface) {\n window.ShadyCSS.CustomStyleInterface = CustomStyleInterface;\n}","/* Any copyright is dedicated to the Public Domain.\n * http://creativecommons.org/publicdomain/zero/1.0/ */\n\n(function(scope) {\n 'use strict';\n\n // feature detect for URL constructor\n var hasWorkingUrl = false;\n if (!scope.forceJURL) {\n try {\n var u = new URL('b', 'http://a');\n u.pathname = 'c%20d';\n hasWorkingUrl = u.href === 'http://a/c%20d';\n } catch(e) {}\n }\n\n if (hasWorkingUrl)\n return;\n\n var relative = Object.create(null);\n relative['ftp'] = 21;\n relative['file'] = 0;\n relative['gopher'] = 70;\n relative['http'] = 80;\n relative['https'] = 443;\n relative['ws'] = 80;\n relative['wss'] = 443;\n\n var relativePathDotMapping = Object.create(null);\n relativePathDotMapping['%2e'] = '.';\n relativePathDotMapping['.%2e'] = '..';\n relativePathDotMapping['%2e.'] = '..';\n relativePathDotMapping['%2e%2e'] = '..';\n\n function isRelativeScheme(scheme) {\n return relative[scheme] !== undefined;\n }\n\n function invalid() {\n clear.call(this);\n this._isInvalid = true;\n }\n\n function IDNAToASCII(h) {\n if ('' == h) {\n invalid.call(this)\n }\n // XXX\n return h.toLowerCase()\n }\n\n function percentEscape(c) {\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F &&\n // \" # < > ? `\n [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponent(c);\n }\n\n function percentEscapeQuery(c) {\n // XXX This actually needs to encode c using encoding and then\n // convert the bytes one-by-one.\n\n var unicode = c.charCodeAt(0);\n if (unicode > 0x20 &&\n unicode < 0x7F &&\n // \" # < > ` (do not escape '?')\n [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) == -1\n ) {\n return c;\n }\n return encodeURIComponent(c);\n }\n\n var EOF = undefined,\n ALPHA = /[a-zA-Z]/,\n ALPHANUMERIC = /[a-zA-Z0-9\\+\\-\\.]/;\n\n function parse(input, stateOverride, base) {\n function err(message) {\n errors.push(message)\n }\n\n var state = stateOverride || 'scheme start',\n cursor = 0,\n buffer = '',\n seenAt = false,\n seenBracket = false,\n errors = [];\n\n loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this._isInvalid) {\n var c = input[cursor];\n switch (state) {\n case 'scheme start':\n if (c && ALPHA.test(c)) {\n buffer += c.toLowerCase(); // ASCII-safe\n state = 'scheme';\n } else if (!stateOverride) {\n buffer = '';\n state = 'no scheme';\n continue;\n } else {\n err('Invalid scheme.');\n break loop;\n }\n break;\n\n case 'scheme':\n if (c && ALPHANUMERIC.test(c)) {\n buffer += c.toLowerCase(); // ASCII-safe\n } else if (':' == c) {\n this._scheme = buffer;\n buffer = '';\n if (stateOverride) {\n break loop;\n }\n if (isRelativeScheme(this._scheme)) {\n this._isRelative = true;\n }\n if ('file' == this._scheme) {\n state = 'relative';\n } else if (this._isRelative && base && base._scheme == this._scheme) {\n state = 'relative or authority';\n } else if (this._isRelative) {\n state = 'authority first slash';\n } else {\n state = 'scheme data';\n }\n } else if (!stateOverride) {\n buffer = '';\n cursor = 0;\n state = 'no scheme';\n continue;\n } else if (EOF == c) {\n break loop;\n } else {\n err('Code point not allowed in scheme: ' + c)\n break loop;\n }\n break;\n\n case 'scheme data':\n if ('?' == c) {\n this._query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#';\n state = 'fragment';\n } else {\n // XXX error handling\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._schemeData += percentEscape(c);\n }\n }\n break;\n\n case 'no scheme':\n if (!base || !(isRelativeScheme(base._scheme))) {\n err('Missing scheme.');\n invalid.call(this);\n } else {\n state = 'relative';\n continue;\n }\n break;\n\n case 'relative or authority':\n if ('/' == c && '/' == input[cursor+1]) {\n state = 'authority ignore slashes';\n } else {\n err('Expected /, got: ' + c);\n state = 'relative';\n continue\n }\n break;\n\n case 'relative':\n this._isRelative = true;\n if ('file' != this._scheme)\n this._scheme = base._scheme;\n if (EOF == c) {\n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._query;\n this._username = base._username;\n this._password = base._password;\n break loop;\n } else if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c)\n err('\\\\ is an invalid code point.');\n state = 'relative slash';\n } else if ('?' == c) {\n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = '?';\n this._username = base._username;\n this._password = base._password;\n state = 'query';\n } else if ('#' == c) {\n this._host = base._host;\n this._port = base._port;\n this._path = base._path.slice();\n this._query = base._query;\n this._fragment = '#';\n this._username = base._username;\n this._password = base._password;\n state = 'fragment';\n } else {\n var nextC = input[cursor+1]\n var nextNextC = input[cursor+2]\n if (\n 'file' != this._scheme || !ALPHA.test(c) ||\n (nextC != ':' && nextC != '|') ||\n (EOF != nextNextC && '/' != nextNextC && '\\\\' != nextNextC && '?' != nextNextC && '#' != nextNextC)) {\n this._host = base._host;\n this._port = base._port;\n this._username = base._username;\n this._password = base._password;\n this._path = base._path.slice();\n this._path.pop();\n }\n state = 'relative path';\n continue;\n }\n break;\n\n case 'relative slash':\n if ('/' == c || '\\\\' == c) {\n if ('\\\\' == c) {\n err('\\\\ is an invalid code point.');\n }\n if ('file' == this._scheme) {\n state = 'file host';\n } else {\n state = 'authority ignore slashes';\n }\n } else {\n if ('file' != this._scheme) {\n this._host = base._host;\n this._port = base._port;\n this._username = base._username;\n this._password = base._password;\n }\n state = 'relative path';\n continue;\n }\n break;\n\n case 'authority first slash':\n if ('/' == c) {\n state = 'authority second slash';\n } else {\n err(\"Expected '/', got: \" + c);\n state = 'authority ignore slashes';\n continue;\n }\n break;\n\n case 'authority second slash':\n state = 'authority ignore slashes';\n if ('/' != c) {\n err(\"Expected '/', got: \" + c);\n continue;\n }\n break;\n\n case 'authority ignore slashes':\n if ('/' != c && '\\\\' != c) {\n state = 'authority';\n continue;\n } else {\n err('Expected authority, got: ' + c);\n }\n break;\n\n case 'authority':\n if ('@' == c) {\n if (seenAt) {\n err('@ already seen.');\n buffer += '%40';\n }\n seenAt = true;\n for (var i = 0; i < buffer.length; i++) {\n var cp = buffer[i];\n if ('\\t' == cp || '\\n' == cp || '\\r' == cp) {\n err('Invalid whitespace in authority.');\n continue;\n }\n // XXX check URL code points\n if (':' == cp && null === this._password) {\n this._password = '';\n continue;\n }\n var tempC = percentEscape(cp);\n (null !== this._password) ? this._password += tempC : this._username += tempC;\n }\n buffer = '';\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n cursor -= buffer.length;\n buffer = '';\n state = 'host';\n continue;\n } else {\n buffer += c;\n }\n break;\n\n case 'file host':\n if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n if (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ':' || buffer[1] == '|')) {\n state = 'relative path';\n } else if (buffer.length == 0) {\n state = 'relative path start';\n } else {\n this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n state = 'relative path start';\n }\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid whitespace in file host.');\n } else {\n buffer += c;\n }\n break;\n\n case 'host':\n case 'hostname':\n if (':' == c && !seenBracket) {\n // XXX host parsing\n this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n state = 'port';\n if ('hostname' == stateOverride) {\n break loop;\n }\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c) {\n this._host = IDNAToASCII.call(this, buffer);\n buffer = '';\n state = 'relative path start';\n if (stateOverride) {\n break loop;\n }\n continue;\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n if ('[' == c) {\n seenBracket = true;\n } else if (']' == c) {\n seenBracket = false;\n }\n buffer += c;\n } else {\n err('Invalid code point in host/hostname: ' + c);\n }\n break;\n\n case 'port':\n if (/[0-9]/.test(c)) {\n buffer += c;\n } else if (EOF == c || '/' == c || '\\\\' == c || '?' == c || '#' == c || stateOverride) {\n if ('' != buffer) {\n var temp = parseInt(buffer, 10);\n if (temp != relative[this._scheme]) {\n this._port = temp + '';\n }\n buffer = '';\n }\n if (stateOverride) {\n break loop;\n }\n state = 'relative path start';\n continue;\n } else if ('\\t' == c || '\\n' == c || '\\r' == c) {\n err('Invalid code point in port: ' + c);\n } else {\n invalid.call(this);\n }\n break;\n\n case 'relative path start':\n if ('\\\\' == c)\n err(\"'\\\\' not allowed in path.\");\n state = 'relative path';\n if ('/' != c && '\\\\' != c) {\n continue;\n }\n break;\n\n case 'relative path':\n if (EOF == c || '/' == c || '\\\\' == c || (!stateOverride && ('?' == c || '#' == c))) {\n if ('\\\\' == c) {\n err('\\\\ not allowed in relative path.');\n }\n var tmp;\n if (tmp = relativePathDotMapping[buffer.toLowerCase()]) {\n buffer = tmp;\n }\n if ('..' == buffer) {\n this._path.pop();\n if ('/' != c && '\\\\' != c) {\n this._path.push('');\n }\n } else if ('.' == buffer && '/' != c && '\\\\' != c) {\n this._path.push('');\n } else if ('.' != buffer) {\n if ('file' == this._scheme && this._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == '|') {\n buffer = buffer[0] + ':';\n }\n this._path.push(buffer);\n }\n buffer = '';\n if ('?' == c) {\n this._query = '?';\n state = 'query';\n } else if ('#' == c) {\n this._fragment = '#';\n state = 'fragment';\n }\n } else if ('\\t' != c && '\\n' != c && '\\r' != c) {\n buffer += percentEscape(c);\n }\n break;\n\n case 'query':\n if (!stateOverride && '#' == c) {\n this._fragment = '#';\n state = 'fragment';\n } else if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._query += percentEscapeQuery(c);\n }\n break;\n\n case 'fragment':\n if (EOF != c && '\\t' != c && '\\n' != c && '\\r' != c) {\n this._fragment += c;\n }\n break;\n }\n\n cursor++;\n }\n }\n\n function clear() {\n this._scheme = '';\n this._schemeData = '';\n this._username = '';\n this._password = null;\n this._host = '';\n this._port = '';\n this._path = [];\n this._query = '';\n this._fragment = '';\n this._isInvalid = false;\n this._isRelative = false;\n }\n\n // Does not process domain names or IP addresses.\n // Does not handle encoding for the query parameter.\n /**\n * @constructor\n * @implements {URL}\n */\n function jURL(url, base /* , encoding */) {\n if (base !== undefined && !(base instanceof jURL))\n base = new jURL(String(base));\n\n this._url = url;\n clear.call(this);\n\n var input = url.replace(/^[ \\t\\r\\n\\f]+|[ \\t\\r\\n\\f]+$/g, '');\n // encoding = encoding || 'utf-8'\n\n parse.call(this, input, null, base);\n }\n\n jURL.prototype = {\n toString: function() {\n return this.href;\n },\n get href() {\n if (this._isInvalid)\n return this._url;\n\n var authority = '';\n if ('' != this._username || null != this._password) {\n authority = this._username +\n (null != this._password ? ':' + this._password : '') + '@';\n }\n\n return this.protocol +\n (this._isRelative ? '//' + authority + this.host : '') +\n this.pathname + this._query + this._fragment;\n },\n set href(href) {\n clear.call(this);\n parse.call(this, href);\n },\n\n get protocol() {\n return this._scheme + ':';\n },\n set protocol(protocol) {\n if (this._isInvalid)\n return;\n parse.call(this, protocol + ':', 'scheme start');\n },\n\n get host() {\n return this._isInvalid ? '' : this._port ?\n this._host + ':' + this._port : this._host;\n },\n set host(host) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, host, 'host');\n },\n\n get hostname() {\n return this._host;\n },\n set hostname(hostname) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, hostname, 'hostname');\n },\n\n get port() {\n return this._port;\n },\n set port(port) {\n if (this._isInvalid || !this._isRelative)\n return;\n parse.call(this, port, 'port');\n },\n\n get pathname() {\n return this._isInvalid ? '' : this._isRelative ?\n '/' + this._path.join('/') : this._schemeData;\n },\n set pathname(pathname) {\n if (this._isInvalid || !this._isRelative)\n return;\n this._path = [];\n parse.call(this, pathname, 'relative path start');\n },\n\n get search() {\n return this._isInvalid || !this._query || '?' == this._query ?\n '' : this._query;\n },\n set search(search) {\n if (this._isInvalid || !this._isRelative)\n return;\n this._query = '?';\n if ('?' == search[0])\n search = search.slice(1);\n parse.call(this, search, 'query');\n },\n\n get hash() {\n return this._isInvalid || !this._fragment || '#' == this._fragment ?\n '' : this._fragment;\n },\n set hash(hash) {\n if (this._isInvalid)\n return;\n this._fragment = '#';\n if ('#' == hash[0])\n hash = hash.slice(1);\n parse.call(this, hash, 'fragment');\n },\n\n get origin() {\n var host;\n if (this._isInvalid || !this._scheme) {\n return '';\n }\n // javascript: Gecko returns String(\"\"), WebKit/Blink String(\"null\")\n // Gecko throws error for \"data://\"\n // data: Gecko returns \"\", Blink returns \"data://\", WebKit returns \"null\"\n // Gecko returns String(\"\") for file: mailto:\n // WebKit/Blink returns String(\"SCHEME://\") for file: mailto:\n switch (this._scheme) {\n case 'data':\n case 'file':\n case 'javascript':\n case 'mailto':\n return 'null';\n }\n host = this.host;\n if (!host) {\n return '';\n }\n return this._scheme + '://' + host;\n }\n };\n\n // Copy over the static methods\n var OriginalURL = scope.URL;\n if (OriginalURL) {\n jURL.createObjectURL = function(blob) {\n // IE extension allows a second optional options argument.\n // http://msdn.microsoft.com/en-us/library/ie/hh772302(v=vs.85).aspx\n return OriginalURL.createObjectURL.apply(OriginalURL, arguments);\n };\n jURL.revokeObjectURL = function(url) {\n OriginalURL.revokeObjectURL(url);\n };\n }\n\n scope.URL = jURL;\n\n})(window);\n","/**\n@license\nCopyright (c) 2018 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n// Implement Node.baseURI for IE 11\n// adapted from\n// https://github.com/webcomponents/html-imports/blob/v1.2.0/src/html-imports.js\n\n/** @type {Object|undefined} */\nconst native_baseURI = Object.getOwnPropertyDescriptor(Node.prototype, 'baseURI');\nif (!native_baseURI) {\n Object.defineProperty(Node.prototype, 'baseURI', {\n /**\n * @this {Node}\n * @return {string}\n */\n get() {\n // this.ownerDocument is `null` for documents\n const doc = this.ownerDocument || this;\n const base = /** @type {HTMLBaseElement} */ (doc.querySelector('base[href]'));\n return base && base.href || window.location.href;\n },\n configurable: true,\n enumerable: true\n });\n}","/**\n * @license\n * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n */\n\n'use strict';\n// It's desireable to provide a default stylesheet\n// that's convenient for styling unresolved elements, but\n// it's cumbersome to have to include this manually in every page.\n// It would make sense to put inside some HTMLImport but\n// the HTMLImports polyfill does not allow loading of stylesheets\n// that block rendering. Therefore this injection is tolerated here.\n//\n// NOTE: position: relative fixes IE's failure to inherit opacity\n// when a child is not statically positioned.\nlet style = document.createElement('style');\nstyle.textContent = ''\n + 'body {'\n + 'transition: opacity ease-in 0.2s;'\n + ' } \\n'\n + 'body[unresolved] {'\n + 'opacity: 0; display: block; overflow: hidden; position: relative;'\n + ' } \\n'\n ;\nlet head = document.querySelector('head');\nhead.insertBefore(style, head.firstChild);","/**\n@license\nCopyright (c) 2018 The Polymer Project Authors. All rights reserved.\nThis code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\nThe complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\nThe complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\nCode distributed by Google as part of the polymer project is also\nsubject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n*/\n'use strict';\n\n/*\n * Polyfills loaded: HTML Imports, Custom Elements, Shady DOM/Shady CSS, platform polyfills, template\n * Used in: webcomponents bundle to load ALL the things\n */\n\nimport './webcomponents-sd-ce-pf-index.js';\n\nconst customElements = window.customElements;\n\nlet shouldFlush = false;\n/** @type {?function()} */\nlet flusher = null;\n\nif (customElements['polyfillWrapFlushCallback']) {\n customElements['polyfillWrapFlushCallback']((flush) => {\n flusher = flush;\n if (shouldFlush) {\n flush();\n }\n });\n}\n\nfunction flushAndFire() {\n if (window.HTMLTemplateElement.bootstrap) {\n window.HTMLTemplateElement.bootstrap(window.document);\n }\n flusher && flusher();\n shouldFlush = true;\n window.WebComponents.ready = true;\n document.dispatchEvent(new CustomEvent('WebComponentsReady', { bubbles: true }));\n}\n\nif (document.readyState !== 'complete') {\n // this script may come between DCL and load, so listen for both, and cancel load listener if DCL fires\n window.addEventListener('load', flushAndFire)\n window.addEventListener('DOMContentLoaded', () => {\n window.removeEventListener('load', flushAndFire);\n flushAndFire();\n });\n} else {\n flushAndFire();\n}","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","// this method was added to unscopables after implementation\n// in popular engines, so it's moved to a separate module\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\naddToUnscopables('flatMap');\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {Part} from './part.js';\n\nconst directives = new WeakMap<object, true>();\n\n// tslint:disable-next-line:no-any\nexport type DirectiveFactory = (...args: any[]) => object;\n\nexport type DirectiveFn = (part: Part) => void;\n\n/**\n * Brands a function as a directive factory function so that lit-html will call\n * the function during template rendering, rather than passing as a value.\n *\n * A _directive_ is a function that takes a Part as an argument. It has the\n * signature: `(part: Part) => void`.\n *\n * A directive _factory_ is a function that takes arguments for data and\n * configuration and returns a directive. Users of directive usually refer to\n * the directive factory as the directive. For example, \"The repeat directive\".\n *\n * Usually a template author will invoke a directive factory in their template\n * with relevant arguments, which will then return a directive function.\n *\n * Here's an example of using the `repeat()` directive factory that takes an\n * array and a function to render an item:\n *\n * ```js\n * html`<ul><${repeat(items, (item) => html`<li>${item}</li>`)}</ul>`\n * ```\n *\n * When `repeat` is invoked, it returns a directive function that closes over\n * `items` and the template function. When the outer template is rendered, the\n * return directive function is called with the Part for the expression.\n * `repeat` then performs it's custom logic to render multiple items.\n *\n * @param f The directive factory function. Must be a function that returns a\n * function of the signature `(part: Part) => void`. The returned function will\n * be called with the part object.\n *\n * @example\n *\n * import {directive, html} from 'lit-html';\n *\n * const immutable = directive((v) => (part) => {\n * if (part.value !== v) {\n * part.setValue(v)\n * }\n * });\n */\nexport const directive = <F extends DirectiveFactory>(f: F): F =>\n ((...args: unknown[]) => {\n const d = f(...args);\n directives.set(d, true);\n return d;\n }) as F;\n\nexport const isDirective = (o: unknown): o is DirectiveFn => {\n return typeof o === 'function' && directives.has(o);\n};\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\ninterface MaybePolyfilledCe extends CustomElementRegistry {\n readonly polyfillWrapFlushCallback?: object;\n}\n\n/**\n * True if the custom elements polyfill is in use.\n */\nexport const isCEPolyfill = window.customElements !== undefined &&\n (window.customElements as MaybePolyfilledCe).polyfillWrapFlushCallback !==\n undefined;\n\n/**\n * Reparents nodes, starting from `start` (inclusive) to `end` (exclusive),\n * into another container (could be the same container), before `before`. If\n * `before` is null, it appends the nodes to the container.\n */\nexport const reparentNodes =\n (container: Node,\n start: Node|null,\n end: Node|null = null,\n before: Node|null = null): void => {\n while (start !== end) {\n const n = start!.nextSibling;\n container.insertBefore(start!, before);\n start = n;\n }\n };\n\n/**\n * Removes nodes, starting from `start` (inclusive) to `end` (exclusive), from\n * `container`.\n */\nexport const removeNodes =\n (container: Node, start: Node|null, end: Node|null = null): void => {\n while (start !== end) {\n const n = start!.nextSibling;\n container.removeChild(start!);\n start = n;\n }\n };\n","/**\n * @license\n * Copyright (c) 2018 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\n/**\n * The Part interface represents a dynamic part of a template instance rendered\n * by lit-html.\n */\nexport interface Part {\n readonly value: unknown;\n\n /**\n * Sets the current part value, but does not write it to the DOM.\n * @param value The value that will be committed.\n */\n setValue(value: unknown): void;\n\n /**\n * Commits the current part value, causing it to actually be written to the\n * DOM.\n *\n * Directives are run at the start of `commit`, so that if they call\n * `part.setValue(...)` synchronously that value will be used in the current\n * commit, and there's no need to call `part.commit()` within the directive.\n * If directives set a part value asynchronously, then they must call\n * `part.commit()` manually.\n */\n commit(): void;\n}\n\n/**\n * A sentinel value that signals that a value was handled by a directive and\n * should not be written to the DOM.\n */\nexport const noChange = {};\n\n/**\n * A sentinel value that signals a NodePart to fully clear its content.\n */\nexport const nothing = {};\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {TemplateResult} from './template-result.js';\n\n/**\n * An expression marker with embedded unique key to avoid collision with\n * possible text in templates.\n */\nexport const marker = `{{lit-${String(Math.random()).slice(2)}}}`;\n\n/**\n * An expression marker used text-positions, multi-binding attributes, and\n * attributes with markup-like text values.\n */\nexport const nodeMarker = `<!--${marker}-->`;\n\nexport const markerRegex = new RegExp(`${marker}|${nodeMarker}`);\n\n/**\n * Suffix appended to all bound attribute names.\n */\nexport const boundAttributeSuffix = '$lit$';\n\n/**\n * An updateable Template that tracks the location of dynamic parts.\n */\nexport class Template {\n readonly parts: TemplatePart[] = [];\n readonly element: HTMLTemplateElement;\n\n constructor(result: TemplateResult, element: HTMLTemplateElement) {\n this.element = element;\n\n const nodesToRemove: Node[] = [];\n const stack: Node[] = [];\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(\n element.content,\n 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n null,\n false);\n // Keeps track of the last index associated with a part. We try to delete\n // unnecessary nodes, but we never want to associate two different parts\n // to the same index. They must have a constant node between.\n let lastPartIndex = 0;\n let index = -1;\n let partIndex = 0;\n const {strings, values: {length}} = result;\n while (partIndex < length) {\n const node = walker.nextNode() as Element | Comment | Text | null;\n if (node === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop()!;\n continue;\n }\n index++;\n\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n if ((node as Element).hasAttributes()) {\n const attributes = (node as Element).attributes;\n const {length} = attributes;\n // Per\n // https://developer.mozilla.org/en-US/docs/Web/API/NamedNodeMap,\n // attributes are not guaranteed to be returned in document order.\n // In particular, Edge/IE can return them out of order, so we cannot\n // assume a correspondence between part index and attribute index.\n let count = 0;\n for (let i = 0; i < length; i++) {\n if (endsWith(attributes[i].name, boundAttributeSuffix)) {\n count++;\n }\n }\n while (count-- > 0) {\n // Get the template literal section leading up to the first\n // expression in this attribute\n const stringForPart = strings[partIndex];\n // Find the attribute name\n const name = lastAttributeNameRegex.exec(stringForPart)![2];\n // Find the corresponding attribute\n // All bound attributes have had a suffix added in\n // TemplateResult#getHTML to opt out of special attribute\n // handling. To look up the attribute value we also need to add\n // the suffix.\n const attributeLookupName =\n name.toLowerCase() + boundAttributeSuffix;\n const attributeValue =\n (node as Element).getAttribute(attributeLookupName)!;\n (node as Element).removeAttribute(attributeLookupName);\n const statics = attributeValue.split(markerRegex);\n this.parts.push({type: 'attribute', index, name, strings: statics});\n partIndex += statics.length - 1;\n }\n }\n if ((node as Element).tagName === 'TEMPLATE') {\n stack.push(node);\n walker.currentNode = (node as HTMLTemplateElement).content;\n }\n } else if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n const data = (node as Text).data;\n if (data.indexOf(marker) >= 0) {\n const parent = node.parentNode!;\n const strings = data.split(markerRegex);\n const lastIndex = strings.length - 1;\n // Generate a new text node for each literal section\n // These nodes are also used as the markers for node parts\n for (let i = 0; i < lastIndex; i++) {\n let insert: Node;\n let s = strings[i];\n if (s === '') {\n insert = createMarker();\n } else {\n const match = lastAttributeNameRegex.exec(s);\n if (match !== null && endsWith(match[2], boundAttributeSuffix)) {\n s = s.slice(0, match.index) + match[1] +\n match[2].slice(0, -boundAttributeSuffix.length) + match[3];\n }\n insert = document.createTextNode(s);\n }\n parent.insertBefore(insert, node);\n this.parts.push({type: 'node', index: ++index});\n }\n // If there's no text, we must insert a comment to mark our place.\n // Else, we can trust it will stick around after cloning.\n if (strings[lastIndex] === '') {\n parent.insertBefore(createMarker(), node);\n nodesToRemove.push(node);\n } else {\n (node as Text).data = strings[lastIndex];\n }\n // We have a part for each match found\n partIndex += lastIndex;\n }\n } else if (node.nodeType === 8 /* Node.COMMENT_NODE */) {\n if ((node as Comment).data === marker) {\n const parent = node.parentNode!;\n // Add a new marker node to be the startNode of the Part if any of\n // the following are true:\n // * We don't have a previousSibling\n // * The previousSibling is already the start of a previous part\n if (node.previousSibling === null || index === lastPartIndex) {\n index++;\n parent.insertBefore(createMarker(), node);\n }\n lastPartIndex = index;\n this.parts.push({type: 'node', index});\n // If we don't have a nextSibling, keep this node so we have an end.\n // Else, we can remove it to save future costs.\n if (node.nextSibling === null) {\n (node as Comment).data = '';\n } else {\n nodesToRemove.push(node);\n index--;\n }\n partIndex++;\n } else {\n let i = -1;\n while ((i = (node as Comment).data.indexOf(marker, i + 1)) !== -1) {\n // Comment node has a binding marker inside, make an inactive part\n // The binding won't work, but subsequent bindings will\n // TODO (justinfagnani): consider whether it's even worth it to\n // make bindings in comments work\n this.parts.push({type: 'node', index: -1});\n partIndex++;\n }\n }\n }\n }\n\n // Remove text binding nodes after the walk to not disturb the TreeWalker\n for (const n of nodesToRemove) {\n n.parentNode!.removeChild(n);\n }\n }\n}\n\nconst endsWith = (str: string, suffix: string): boolean => {\n const index = str.length - suffix.length;\n return index >= 0 && str.slice(index) === suffix;\n};\n\n/**\n * A placeholder for a dynamic expression in an HTML template.\n *\n * There are two built-in part types: AttributePart and NodePart. NodeParts\n * always represent a single dynamic expression, while AttributeParts may\n * represent as many expressions are contained in the attribute.\n *\n * A Template's parts are mutable, so parts can be replaced or modified\n * (possibly to implement different template semantics). The contract is that\n * parts can only be replaced, not removed, added or reordered, and parts must\n * always consume the correct number of values in their `update()` method.\n *\n * TODO(justinfagnani): That requirement is a little fragile. A\n * TemplateInstance could instead be more careful about which values it gives\n * to Part.update().\n */\nexport type TemplatePart = {\n readonly type: 'node',\n index: number\n}|{readonly type: 'attribute', index: number, readonly name: string, readonly strings: ReadonlyArray<string>};\n\nexport const isTemplatePartActive = (part: TemplatePart) => part.index !== -1;\n\n// Allows `document.createComment('')` to be renamed for a\n// small manual size-savings.\nexport const createMarker = () => document.createComment('');\n\n/**\n * This regex extracts the attribute name preceding an attribute-position\n * expression. It does this by matching the syntax allowed for attributes\n * against the string literal directly preceding the expression, assuming that\n * the expression is in an attribute-value position.\n *\n * See attributes in the HTML spec:\n * https://www.w3.org/TR/html5/syntax.html#elements-attributes\n *\n * \" \\x09\\x0a\\x0c\\x0d\" are HTML space characters:\n * https://www.w3.org/TR/html5/infrastructure.html#space-characters\n *\n * \"\\0-\\x1F\\x7F-\\x9F\" are Unicode control characters, which includes every\n * space character except \" \".\n *\n * So an attribute is:\n * * The name: any character except a control character, space character, ('),\n * (\"), \">\", \"=\", or \"/\"\n * * Followed by zero or more space characters\n * * Followed by \"=\"\n * * Followed by zero or more space characters\n * * Followed by:\n * * Any character except space, ('), (\"), \"<\", \">\", \"=\", (`), or\n * * (\") then any non-(\"), or\n * * (') then any non-(')\n */\nexport const lastAttributeNameRegex =\n /([ \\x09\\x0a\\x0c\\x0d])([^\\0-\\x1F\\x7F-\\x9F \"'>=/]+)([ \\x09\\x0a\\x0c\\x0d]*=[ \\x09\\x0a\\x0c\\x0d]*(?:[^ \\x09\\x0a\\x0c\\x0d\"'`<>=]*|\"[^\"]*|'[^']*))$/;\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {isCEPolyfill} from './dom.js';\nimport {Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {isTemplatePartActive, Template, TemplatePart} from './template.js';\n\n/**\n * An instance of a `Template` that can be attached to the DOM and updated\n * with new values.\n */\nexport class TemplateInstance {\n private readonly __parts: Array<Part|undefined> = [];\n readonly processor: TemplateProcessor;\n readonly options: RenderOptions;\n readonly template: Template;\n\n constructor(\n template: Template, processor: TemplateProcessor,\n options: RenderOptions) {\n this.template = template;\n this.processor = processor;\n this.options = options;\n }\n\n update(values: ReadonlyArray<unknown>) {\n let i = 0;\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.setValue(values[i]);\n }\n i++;\n }\n for (const part of this.__parts) {\n if (part !== undefined) {\n part.commit();\n }\n }\n }\n\n _clone(): DocumentFragment {\n // There are a number of steps in the lifecycle of a template instance's\n // DOM fragment:\n // 1. Clone - create the instance fragment\n // 2. Adopt - adopt into the main document\n // 3. Process - find part markers and create parts\n // 4. Upgrade - upgrade custom elements\n // 5. Update - set node, attribute, property, etc., values\n // 6. Connect - connect to the document. Optional and outside of this\n // method.\n //\n // We have a few constraints on the ordering of these steps:\n // * We need to upgrade before updating, so that property values will pass\n // through any property setters.\n // * We would like to process before upgrading so that we're sure that the\n // cloned fragment is inert and not disturbed by self-modifying DOM.\n // * We want custom elements to upgrade even in disconnected fragments.\n //\n // Given these constraints, with full custom elements support we would\n // prefer the order: Clone, Process, Adopt, Upgrade, Update, Connect\n //\n // But Safari dooes not implement CustomElementRegistry#upgrade, so we\n // can not implement that order and still have upgrade-before-update and\n // upgrade disconnected fragments. So we instead sacrifice the\n // process-before-upgrade constraint, since in Custom Elements v1 elements\n // must not modify their light DOM in the constructor. We still have issues\n // when co-existing with CEv0 elements like Polymer 1, and with polyfills\n // that don't strictly adhere to the no-modification rule because shadow\n // DOM, which may be created in the constructor, is emulated by being placed\n // in the light DOM.\n //\n // The resulting order is on native is: Clone, Adopt, Upgrade, Process,\n // Update, Connect. document.importNode() performs Clone, Adopt, and Upgrade\n // in one step.\n //\n // The Custom Elements v1 polyfill supports upgrade(), so the order when\n // polyfilled is the more ideal: Clone, Process, Adopt, Upgrade, Update,\n // Connect.\n\n const fragment = isCEPolyfill ?\n this.template.element.content.cloneNode(true) as DocumentFragment :\n document.importNode(this.template.element.content, true);\n\n const stack: Node[] = [];\n const parts = this.template.parts;\n // Edge needs all 4 parameters present; IE11 needs 3rd parameter to be null\n const walker = document.createTreeWalker(\n fragment,\n 133 /* NodeFilter.SHOW_{ELEMENT|COMMENT|TEXT} */,\n null,\n false);\n let partIndex = 0;\n let nodeIndex = 0;\n let part: TemplatePart;\n let node = walker.nextNode();\n // Loop through all the nodes and parts of a template\n while (partIndex < parts.length) {\n part = parts[partIndex];\n if (!isTemplatePartActive(part)) {\n this.__parts.push(undefined);\n partIndex++;\n continue;\n }\n\n // Progress the tree walker until we find our next part's node.\n // Note that multiple parts may share the same node (attribute parts\n // on a single element), so this loop may not run at all.\n while (nodeIndex < part.index) {\n nodeIndex++;\n if (node!.nodeName === 'TEMPLATE') {\n stack.push(node!);\n walker.currentNode = (node as HTMLTemplateElement).content;\n }\n if ((node = walker.nextNode()) === null) {\n // We've exhausted the content inside a nested template element.\n // Because we still have parts (the outer for-loop), we know:\n // - There is a template in the stack\n // - The walker will find a nextNode outside the template\n walker.currentNode = stack.pop()!;\n node = walker.nextNode();\n }\n }\n\n // We've arrived at our part's node.\n if (part.type === 'node') {\n const part = this.processor.handleTextExpression(this.options);\n part.insertAfterNode(node!.previousSibling!);\n this.__parts.push(part);\n } else {\n this.__parts.push(...this.processor.handleAttributeExpressions(\n node as Element, part.name, part.strings, this.options));\n }\n partIndex++;\n }\n\n if (isCEPolyfill) {\n document.adoptNode(fragment);\n customElements.upgrade(fragment);\n }\n return fragment;\n }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {reparentNodes} from './dom.js';\nimport {TemplateProcessor} from './template-processor.js';\nimport {boundAttributeSuffix, lastAttributeNameRegex, marker, nodeMarker} from './template.js';\n\nconst commentMarker = ` ${marker} `;\n\n/**\n * The return type of `html`, which holds a Template and the values from\n * interpolated expressions.\n */\nexport class TemplateResult {\n readonly strings: TemplateStringsArray;\n readonly values: ReadonlyArray<unknown>;\n readonly type: string;\n readonly processor: TemplateProcessor;\n\n constructor(\n strings: TemplateStringsArray, values: ReadonlyArray<unknown>,\n type: string, processor: TemplateProcessor) {\n this.strings = strings;\n this.values = values;\n this.type = type;\n this.processor = processor;\n }\n\n /**\n * Returns a string of HTML used to create a `<template>` element.\n */\n getHTML(): string {\n const l = this.strings.length - 1;\n let html = '';\n let isCommentBinding = false;\n\n for (let i = 0; i < l; i++) {\n const s = this.strings[i];\n // For each binding we want to determine the kind of marker to insert\n // into the template source before it's parsed by the browser's HTML\n // parser. The marker type is based on whether the expression is in an\n // attribute, text, or comment poisition.\n // * For node-position bindings we insert a comment with the marker\n // sentinel as its text content, like <!--{{lit-guid}}-->.\n // * For attribute bindings we insert just the marker sentinel for the\n // first binding, so that we support unquoted attribute bindings.\n // Subsequent bindings can use a comment marker because multi-binding\n // attributes must be quoted.\n // * For comment bindings we insert just the marker sentinel so we don't\n // close the comment.\n //\n // The following code scans the template source, but is *not* an HTML\n // parser. We don't need to track the tree structure of the HTML, only\n // whether a binding is inside a comment, and if not, if it appears to be\n // the first binding in an attribute.\n const commentOpen = s.lastIndexOf('<!--');\n // We're in comment position if we have a comment open with no following\n // comment close. Because <-- can appear in an attribute value there can\n // be false positives.\n isCommentBinding = (commentOpen > -1 || isCommentBinding) &&\n s.indexOf('-->', commentOpen + 1) === -1;\n // Check to see if we have an attribute-like sequence preceeding the\n // expression. This can match \"name=value\" like structures in text,\n // comments, and attribute values, so there can be false-positives.\n const attributeMatch = lastAttributeNameRegex.exec(s);\n if (attributeMatch === null) {\n // We're only in this branch if we don't have a attribute-like\n // preceeding sequence. For comments, this guards against unusual\n // attribute values like <div foo=\"<!--${'bar'}\">. Cases like\n // <!-- foo=${'bar'}--> are handled correctly in the attribute branch\n // below.\n html += s + (isCommentBinding ? commentMarker : nodeMarker);\n } else {\n // For attributes we use just a marker sentinel, and also append a\n // $lit$ suffix to the name to opt-out of attribute-specific parsing\n // that IE and Edge do for style and certain SVG attributes.\n html += s.substr(0, attributeMatch.index) + attributeMatch[1] +\n attributeMatch[2] + boundAttributeSuffix + attributeMatch[3] +\n marker;\n }\n }\n html += this.strings[l];\n return html;\n }\n\n getTemplateElement(): HTMLTemplateElement {\n const template = document.createElement('template');\n template.innerHTML = this.getHTML();\n return template;\n }\n}\n\n/**\n * A TemplateResult for SVG fragments.\n *\n * This class wraps HTML in an `<svg>` tag in order to parse its contents in the\n * SVG namespace, then modifies the template to remove the `<svg>` tag so that\n * clones only container the original fragment.\n */\nexport class SVGTemplateResult extends TemplateResult {\n getHTML(): string {\n return `<svg>${super.getHTML()}</svg>`;\n }\n\n getTemplateElement(): HTMLTemplateElement {\n const template = super.getTemplateElement();\n const content = template.content;\n const svgElement = content.firstChild!;\n content.removeChild(svgElement);\n reparentNodes(content, svgElement.firstChild);\n return template;\n }\n}\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {isDirective} from './directive.js';\nimport {removeNodes} from './dom.js';\nimport {noChange, nothing, Part} from './part.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateInstance} from './template-instance.js';\nimport {TemplateResult} from './template-result.js';\nimport {createMarker} from './template.js';\n\n// https://tc39.github.io/ecma262/#sec-typeof-operator\nexport type Primitive = null|undefined|boolean|number|string|Symbol|bigint;\nexport const isPrimitive = (value: unknown): value is Primitive => {\n return (\n value === null ||\n !(typeof value === 'object' || typeof value === 'function'));\n};\nexport const isIterable = (value: unknown): value is Iterable<unknown> => {\n return Array.isArray(value) ||\n // tslint:disable-next-line:no-any\n !!(value && (value as any)[Symbol.iterator]);\n};\n\n/**\n * Writes attribute values to the DOM for a group of AttributeParts bound to a\n * single attibute. The value is only set once even if there are multiple parts\n * for an attribute.\n */\nexport class AttributeCommitter {\n readonly element: Element;\n readonly name: string;\n readonly strings: ReadonlyArray<string>;\n readonly parts: ReadonlyArray<AttributePart>;\n dirty = true;\n\n constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n this.element = element;\n this.name = name;\n this.strings = strings;\n this.parts = [];\n for (let i = 0; i < strings.length - 1; i++) {\n (this.parts as AttributePart[])[i] = this._createPart();\n }\n }\n\n /**\n * Creates a single part. Override this to create a differnt type of part.\n */\n protected _createPart(): AttributePart {\n return new AttributePart(this);\n }\n\n protected _getValue(): unknown {\n const strings = this.strings;\n const l = strings.length - 1;\n let text = '';\n\n for (let i = 0; i < l; i++) {\n text += strings[i];\n const part = this.parts[i];\n if (part !== undefined) {\n const v = part.value;\n if (isPrimitive(v) || !isIterable(v)) {\n text += typeof v === 'string' ? v : String(v);\n } else {\n for (const t of v) {\n text += typeof t === 'string' ? t : String(t);\n }\n }\n }\n }\n\n text += strings[l];\n return text;\n }\n\n commit(): void {\n if (this.dirty) {\n this.dirty = false;\n this.element.setAttribute(this.name, this._getValue() as string);\n }\n }\n}\n\n/**\n * A Part that controls all or part of an attribute value.\n */\nexport class AttributePart implements Part {\n readonly committer: AttributeCommitter;\n value: unknown = undefined;\n\n constructor(committer: AttributeCommitter) {\n this.committer = committer;\n }\n\n setValue(value: unknown): void {\n if (value !== noChange && (!isPrimitive(value) || value !== this.value)) {\n this.value = value;\n // If the value is a not a directive, dirty the committer so that it'll\n // call setAttribute. If the value is a directive, it'll dirty the\n // committer if it calls setValue().\n if (!isDirective(value)) {\n this.committer.dirty = true;\n }\n }\n }\n\n commit() {\n while (isDirective(this.value)) {\n const directive = this.value;\n this.value = noChange;\n directive(this);\n }\n if (this.value === noChange) {\n return;\n }\n this.committer.commit();\n }\n}\n\n/**\n * A Part that controls a location within a Node tree. Like a Range, NodePart\n * has start and end locations and can set and update the Nodes between those\n * locations.\n *\n * NodeParts support several value types: primitives, Nodes, TemplateResults,\n * as well as arrays and iterables of those types.\n */\nexport class NodePart implements Part {\n readonly options: RenderOptions;\n startNode!: Node;\n endNode!: Node;\n value: unknown = undefined;\n private __pendingValue: unknown = undefined;\n\n constructor(options: RenderOptions) {\n this.options = options;\n }\n\n /**\n * Appends this part into a container.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendInto(container: Node) {\n this.startNode = container.appendChild(createMarker());\n this.endNode = container.appendChild(createMarker());\n }\n\n /**\n * Inserts this part after the `ref` node (between `ref` and `ref`'s next\n * sibling). Both `ref` and its next sibling must be static, unchanging nodes\n * such as those that appear in a literal section of a template.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterNode(ref: Node) {\n this.startNode = ref;\n this.endNode = ref.nextSibling!;\n }\n\n /**\n * Appends this part into a parent part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n appendIntoPart(part: NodePart) {\n part.__insert(this.startNode = createMarker());\n part.__insert(this.endNode = createMarker());\n }\n\n /**\n * Inserts this part after the `ref` part.\n *\n * This part must be empty, as its contents are not automatically moved.\n */\n insertAfterPart(ref: NodePart) {\n ref.__insert(this.startNode = createMarker());\n this.endNode = ref.endNode;\n ref.endNode = this.startNode;\n }\n\n setValue(value: unknown): void {\n this.__pendingValue = value;\n }\n\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n const value = this.__pendingValue;\n if (value === noChange) {\n return;\n }\n if (isPrimitive(value)) {\n if (value !== this.value) {\n this.__commitText(value);\n }\n } else if (value instanceof TemplateResult) {\n this.__commitTemplateResult(value);\n } else if (value instanceof Node) {\n this.__commitNode(value);\n } else if (isIterable(value)) {\n this.__commitIterable(value);\n } else if (value === nothing) {\n this.value = nothing;\n this.clear();\n } else {\n // Fallback, will render the string representation\n this.__commitText(value);\n }\n }\n\n private __insert(node: Node) {\n this.endNode.parentNode!.insertBefore(node, this.endNode);\n }\n\n private __commitNode(value: Node): void {\n if (this.value === value) {\n return;\n }\n this.clear();\n this.__insert(value);\n this.value = value;\n }\n\n private __commitText(value: unknown): void {\n const node = this.startNode.nextSibling!;\n value = value == null ? '' : value;\n // If `value` isn't already a string, we explicitly convert it here in case\n // it can't be implicitly converted - i.e. it's a symbol.\n const valueAsString: string =\n typeof value === 'string' ? value : String(value);\n if (node === this.endNode.previousSibling &&\n node.nodeType === 3 /* Node.TEXT_NODE */) {\n // If we only have a single text node between the markers, we can just\n // set its value, rather than replacing it.\n // TODO(justinfagnani): Can we just check if this.value is primitive?\n (node as Text).data = valueAsString;\n } else {\n this.__commitNode(document.createTextNode(valueAsString));\n }\n this.value = value;\n }\n\n private __commitTemplateResult(value: TemplateResult): void {\n const template = this.options.templateFactory(value);\n if (this.value instanceof TemplateInstance &&\n this.value.template === template) {\n this.value.update(value.values);\n } else {\n // Make sure we propagate the template processor from the TemplateResult\n // so that we use its syntax extension, etc. The template factory comes\n // from the render function options so that it can control template\n // caching and preprocessing.\n const instance =\n new TemplateInstance(template, value.processor, this.options);\n const fragment = instance._clone();\n instance.update(value.values);\n this.__commitNode(fragment);\n this.value = instance;\n }\n }\n\n private __commitIterable(value: Iterable<unknown>): void {\n // For an Iterable, we create a new InstancePart per item, then set its\n // value to the item. This is a little bit of overhead for every item in\n // an Iterable, but it lets us recurse easily and efficiently update Arrays\n // of TemplateResults that will be commonly returned from expressions like:\n // array.map((i) => html`${i}`), by reusing existing TemplateInstances.\n\n // If _value is an array, then the previous render was of an\n // iterable and _value will contain the NodeParts from the previous\n // render. If _value is not an array, clear this part and make a new\n // array for NodeParts.\n if (!Array.isArray(this.value)) {\n this.value = [];\n this.clear();\n }\n\n // Lets us keep track of how many items we stamped so we can clear leftover\n // items from a previous render\n const itemParts = this.value as NodePart[];\n let partIndex = 0;\n let itemPart: NodePart|undefined;\n\n for (const item of value) {\n // Try to reuse an existing part\n itemPart = itemParts[partIndex];\n\n // If no existing part, create a new one\n if (itemPart === undefined) {\n itemPart = new NodePart(this.options);\n itemParts.push(itemPart);\n if (partIndex === 0) {\n itemPart.appendIntoPart(this);\n } else {\n itemPart.insertAfterPart(itemParts[partIndex - 1]);\n }\n }\n itemPart.setValue(item);\n itemPart.commit();\n partIndex++;\n }\n\n if (partIndex < itemParts.length) {\n // Truncate the parts array so _value reflects the current state\n itemParts.length = partIndex;\n this.clear(itemPart && itemPart.endNode);\n }\n }\n\n clear(startNode: Node = this.startNode) {\n removeNodes(\n this.startNode.parentNode!, startNode.nextSibling!, this.endNode);\n }\n}\n\n/**\n * Implements a boolean attribute, roughly as defined in the HTML\n * specification.\n *\n * If the value is truthy, then the attribute is present with a value of\n * ''. If the value is falsey, the attribute is removed.\n */\nexport class BooleanAttributePart implements Part {\n readonly element: Element;\n readonly name: string;\n readonly strings: ReadonlyArray<string>;\n value: unknown = undefined;\n private __pendingValue: unknown = undefined;\n\n constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n if (strings.length !== 2 || strings[0] !== '' || strings[1] !== '') {\n throw new Error(\n 'Boolean attributes can only contain a single expression');\n }\n this.element = element;\n this.name = name;\n this.strings = strings;\n }\n\n setValue(value: unknown): void {\n this.__pendingValue = value;\n }\n\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n const value = !!this.__pendingValue;\n if (this.value !== value) {\n if (value) {\n this.element.setAttribute(this.name, '');\n } else {\n this.element.removeAttribute(this.name);\n }\n this.value = value;\n }\n this.__pendingValue = noChange;\n }\n}\n\n/**\n * Sets attribute values for PropertyParts, so that the value is only set once\n * even if there are multiple parts for a property.\n *\n * If an expression controls the whole property value, then the value is simply\n * assigned to the property under control. If there are string literals or\n * multiple expressions, then the strings are expressions are interpolated into\n * a string first.\n */\nexport class PropertyCommitter extends AttributeCommitter {\n readonly single: boolean;\n\n constructor(element: Element, name: string, strings: ReadonlyArray<string>) {\n super(element, name, strings);\n this.single =\n (strings.length === 2 && strings[0] === '' && strings[1] === '');\n }\n\n protected _createPart(): PropertyPart {\n return new PropertyPart(this);\n }\n\n protected _getValue() {\n if (this.single) {\n return this.parts[0].value;\n }\n return super._getValue();\n }\n\n commit(): void {\n if (this.dirty) {\n this.dirty = false;\n // tslint:disable-next-line:no-any\n (this.element as any)[this.name] = this._getValue();\n }\n }\n}\n\nexport class PropertyPart extends AttributePart {}\n\n// Detect event listener options support. If the `capture` property is read\n// from the options object, then options are supported. If not, then the thrid\n// argument to add/removeEventListener is interpreted as the boolean capture\n// value so we should only pass the `capture` property.\nlet eventOptionsSupported = false;\n\ntry {\n const options = {\n get capture() {\n eventOptionsSupported = true;\n return false;\n }\n };\n // tslint:disable-next-line:no-any\n window.addEventListener('test', options as any, options);\n // tslint:disable-next-line:no-any\n window.removeEventListener('test', options as any, options);\n} catch (_e) {\n}\n\n\ntype EventHandlerWithOptions =\n EventListenerOrEventListenerObject&Partial<AddEventListenerOptions>;\nexport class EventPart implements Part {\n readonly element: Element;\n readonly eventName: string;\n readonly eventContext?: EventTarget;\n value: undefined|EventHandlerWithOptions = undefined;\n private __options?: AddEventListenerOptions;\n private __pendingValue: undefined|EventHandlerWithOptions = undefined;\n private readonly __boundHandleEvent: (event: Event) => void;\n\n constructor(element: Element, eventName: string, eventContext?: EventTarget) {\n this.element = element;\n this.eventName = eventName;\n this.eventContext = eventContext;\n this.__boundHandleEvent = (e) => this.handleEvent(e);\n }\n\n setValue(value: undefined|EventHandlerWithOptions): void {\n this.__pendingValue = value;\n }\n\n commit() {\n while (isDirective(this.__pendingValue)) {\n const directive = this.__pendingValue;\n this.__pendingValue = noChange as EventHandlerWithOptions;\n directive(this);\n }\n if (this.__pendingValue === noChange) {\n return;\n }\n\n const newListener = this.__pendingValue;\n const oldListener = this.value;\n const shouldRemoveListener = newListener == null ||\n oldListener != null &&\n (newListener.capture !== oldListener.capture ||\n newListener.once !== oldListener.once ||\n newListener.passive !== oldListener.passive);\n const shouldAddListener =\n newListener != null && (oldListener == null || shouldRemoveListener);\n\n if (shouldRemoveListener) {\n this.element.removeEventListener(\n this.eventName, this.__boundHandleEvent, this.__options);\n }\n if (shouldAddListener) {\n this.__options = getOptions(newListener);\n this.element.addEventListener(\n this.eventName, this.__boundHandleEvent, this.__options);\n }\n this.value = newListener;\n this.__pendingValue = noChange as EventHandlerWithOptions;\n }\n\n handleEvent(event: Event) {\n if (typeof this.value === 'function') {\n this.value.call(this.eventContext || this.element, event);\n } else {\n (this.value as EventListenerObject).handleEvent(event);\n }\n }\n}\n\n// We copy options because of the inconsistent behavior of browsers when reading\n// the third argument of add/removeEventListener. IE11 doesn't support options\n// at all. Chrome 41 only reads `capture` if the argument is an object.\nconst getOptions = (o: AddEventListenerOptions|undefined) => o &&\n (eventOptionsSupported ?\n {capture: o.capture, passive: o.passive, once: o.once} :\n o.capture as AddEventListenerOptions);\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {Part} from './part.js';\nimport {AttributeCommitter, BooleanAttributePart, EventPart, NodePart, PropertyCommitter} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {TemplateProcessor} from './template-processor.js';\n\n/**\n * Creates Parts when a template is instantiated.\n */\nexport class DefaultTemplateProcessor implements TemplateProcessor {\n /**\n * Create parts for an attribute-position binding, given the event, attribute\n * name, and string literals.\n *\n * @param element The element containing the binding\n * @param name The attribute name\n * @param strings The string literals. There are always at least two strings,\n * event for fully-controlled bindings with a single expression.\n */\n handleAttributeExpressions(\n element: Element, name: string, strings: string[],\n options: RenderOptions): ReadonlyArray<Part> {\n const prefix = name[0];\n if (prefix === '.') {\n const committer = new PropertyCommitter(element, name.slice(1), strings);\n return committer.parts;\n }\n if (prefix === '@') {\n return [new EventPart(element, name.slice(1), options.eventContext)];\n }\n if (prefix === '?') {\n return [new BooleanAttributePart(element, name.slice(1), strings)];\n }\n const committer = new AttributeCommitter(element, name, strings);\n return committer.parts;\n }\n /**\n * Create parts for a text-position binding.\n * @param templateFactory\n */\n handleTextExpression(options: RenderOptions) {\n return new NodePart(options);\n }\n}\n\nexport const defaultTemplateProcessor = new DefaultTemplateProcessor();\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {TemplateResult} from './template-result.js';\nimport {marker, Template} from './template.js';\n\n/**\n * A function type that creates a Template from a TemplateResult.\n *\n * This is a hook into the template-creation process for rendering that\n * requires some modification of templates before they're used, like ShadyCSS,\n * which must add classes to elements and remove styles.\n *\n * Templates should be cached as aggressively as possible, so that many\n * TemplateResults produced from the same expression only do the work of\n * creating the Template the first time.\n *\n * Templates are usually cached by TemplateResult.strings and\n * TemplateResult.type, but may be cached by other keys if this function\n * modifies the template.\n *\n * Note that currently TemplateFactories must not add, remove, or reorder\n * expressions, because there is no way to describe such a modification\n * to render() so that values are interpolated to the correct place in the\n * template instances.\n */\nexport type TemplateFactory = (result: TemplateResult) => Template;\n\n/**\n * The default TemplateFactory which caches Templates keyed on\n * result.type and result.strings.\n */\nexport function templateFactory(result: TemplateResult) {\n let templateCache = templateCaches.get(result.type);\n if (templateCache === undefined) {\n templateCache = {\n stringsArray: new WeakMap<TemplateStringsArray, Template>(),\n keyString: new Map<string, Template>()\n };\n templateCaches.set(result.type, templateCache);\n }\n\n let template = templateCache.stringsArray.get(result.strings);\n if (template !== undefined) {\n return template;\n }\n\n // If the TemplateStringsArray is new, generate a key from the strings\n // This key is shared between all templates with identical content\n const key = result.strings.join(marker);\n\n // Check if we already have a Template for this key\n template = templateCache.keyString.get(key);\n if (template === undefined) {\n // If we have not seen this key before, create a new Template\n template = new Template(result, result.getTemplateElement());\n // Cache the Template for this key\n templateCache.keyString.set(key, template);\n }\n\n // Cache all future queries for this TemplateStringsArray\n templateCache.stringsArray.set(result.strings, template);\n return template;\n}\n\n/**\n * The first argument to JS template tags retain identity across multiple\n * calls to a tag for the same literal, so we can cache work done per literal\n * in a Map.\n *\n * Safari currently has a bug which occasionally breaks this behaviour, so we\n * need to cache the Template at two levels. We first cache the\n * TemplateStringsArray, and if that fails, we cache a key constructed by\n * joining the strings array.\n */\nexport type templateCache = {\n readonly stringsArray: WeakMap<TemplateStringsArray, Template>; //\n readonly keyString: Map<string, Template>;\n};\n\nexport const templateCaches = new Map<string, templateCache>();\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n * @module lit-html\n */\n\nimport {removeNodes} from './dom.js';\nimport {NodePart} from './parts.js';\nimport {RenderOptions} from './render-options.js';\nimport {templateFactory} from './template-factory.js';\n\nexport const parts = new WeakMap<Node, NodePart>();\n\n/**\n * Renders a template result or other value to a container.\n *\n * To update a container with new values, reevaluate the template literal and\n * call `render` with the new result.\n *\n * @param result Any value renderable by NodePart - typically a TemplateResult\n * created by evaluating a template tag like `html` or `svg`.\n * @param container A DOM parent to render to. The entire contents are either\n * replaced, or efficiently updated if the same result type was previous\n * rendered there.\n * @param options RenderOptions for the entire render tree rendered to this\n * container. Render options must *not* change between renders to the same\n * container, as those changes will not effect previously rendered DOM.\n */\nexport const render =\n (result: unknown,\n container: Element|DocumentFragment,\n options?: Partial<RenderOptions>) => {\n let part = parts.get(container);\n if (part === undefined) {\n removeNodes(container, container.firstChild);\n parts.set(container, part = new NodePart({\n templateFactory,\n ...options,\n }));\n part.appendInto(container);\n }\n part.setValue(result);\n part.commit();\n };\n","/**\n * @license\n * Copyright (c) 2017 The Polymer Project Authors. All rights reserved.\n * This code may only be used under the BSD style license found at\n * http://polymer.github.io/LICENSE.txt\n * The complete set of authors may be found at\n * http://polymer.github.io/AUTHORS.txt\n * The complete set of contributors may be found at\n * http://polymer.github.io/CONTRIBUTORS.txt\n * Code distributed by Google as part of the polymer project is also\n * subject to an additional IP rights grant found at\n * http://polymer.github.io/PATENTS.txt\n */\n\n/**\n *\n * Main lit-html module.\n *\n * Main exports:\n *\n * - [[html]]\n * - [[svg]]\n * - [[render]]\n *\n * @module lit-html\n * @preferred\n */\n\n/**\n * Do not remove this comment; it keeps typedoc from misplacing the module\n * docs.\n */\nimport {defaultTemplateProcessor} from './lib/default-template-processor.js';\nimport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\n\nexport {DefaultTemplateProcessor, defaultTemplateProcessor} from './lib/default-template-processor.js';\nexport {directive, DirectiveFn, isDirective} from './lib/directive.js';\n// TODO(justinfagnani): remove line when we get NodePart moving methods\nexport {removeNodes, reparentNodes} from './lib/dom.js';\nexport {noChange, nothing, Part} from './lib/part.js';\nexport {AttributeCommitter, AttributePart, BooleanAttributePart, EventPart, isIterable, isPrimitive, NodePart, PropertyCommitter, PropertyPart} from './lib/parts.js';\nexport {RenderOptions} from './lib/render-options.js';\nexport {parts, render} from './lib/render.js';\nexport {templateCaches, templateFactory} from './lib/template-factory.js';\nexport {TemplateInstance} from './lib/template-instance.js';\nexport {TemplateProcessor} from './lib/template-processor.js';\nexport {SVGTemplateResult, TemplateResult} from './lib/template-result.js';\nexport {createMarker, isTemplatePartActive, Template} from './lib/template.js';\n\ndeclare global {\n interface Window {\n litHtmlVersions: string[];\n }\n}\n\n// IMPORTANT: do not change the property name or the assignment expression.\n// This line will be used in regexes to search for lit-html usage.\n// TODO(justinfagnani): inject version number at build time\n(window['litHtmlVersions'] || (window['litHtmlVersions'] = [])).push('1.1.2');\n\n/**\n * Interprets a template literal as an HTML template that can efficiently\n * render to and update a container.\n */\nexport const html = (strings: TemplateStringsArray, ...values: unknown[]) =>\n new TemplateResult(strings, values, 'html', defaultTemplateProcessor);\n\n/**\n * Interprets a template literal as an SVG template that can efficiently\n * render to and update a container.\n */\nexport const svg = (strings: TemplateStringsArray, ...values: unknown[]) =>\n new SVGTemplateResult(strings, values, 'svg', defaultTemplateProcessor);\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nexport const CONFIG_ALIASES = {\n row_pivot: \"row_pivots\",\n \"row-pivot\": \"row_pivots\",\n \"row-pivots\": \"row_pivots\",\n col_pivot: \"column_pivots\",\n col_pivots: \"column_pivots\",\n column_pivot: \"column_pivots\",\n \"column-pivot\": \"column_pivots\",\n \"column-pivots\": \"column_pivots\",\n filters: \"filter\",\n sorts: \"sort\"\n};\n\nexport const CONFIG_VALID_KEYS = [\"viewport\", \"row_pivots\", \"column_pivots\", \"aggregates\", \"columns\", \"filter\", \"sort\", \"computed_columns\", \"row_pivot_depth\", \"filter_op\"];\n\nconst NUMBER_AGGREGATES = [\n \"any\",\n \"avg\",\n \"count\",\n \"distinct count\",\n \"dominant\",\n \"first by index\",\n \"last by index\",\n \"last\",\n \"high\",\n \"low\",\n \"mean\",\n \"median\",\n \"pct sum parent\",\n \"pct sum grand total\",\n \"sum\",\n \"sum abs\",\n \"sum not null\",\n \"unique\"\n];\n\nconst STRING_AGGREGATES = [\"any\", \"count\", \"distinct count\", \"distinct leaf\", \"dominant\", \"first by index\", \"last by index\", \"last\", \"unique\"];\n\nconst BOOLEAN_AGGREGATES = [\"any\", \"count\", \"distinct count\", \"distinct leaf\", \"dominant\", \"first by index\", \"last by index\", \"last\", \"unique\", \"and\", \"or\"];\n\nexport const SORT_ORDERS = [\"none\", \"asc\", \"desc\", \"col asc\", \"col desc\", \"asc abs\", \"desc abs\", \"col asc abs\", \"col desc abs\"];\n\nexport const SORT_ORDER_IDS = [2, 0, 1, 0, 1, 3, 4, 3, 4];\n\nexport const TYPE_AGGREGATES = {\n string: STRING_AGGREGATES,\n float: NUMBER_AGGREGATES,\n integer: NUMBER_AGGREGATES,\n boolean: BOOLEAN_AGGREGATES,\n datetime: STRING_AGGREGATES,\n date: STRING_AGGREGATES\n};\n\nexport const FILTER_OPERATORS = {\n lessThan: \"<\",\n greaterThan: \">\",\n equals: \"==\",\n lessThanOrEquals: \"<=\",\n greaterThanOrEquals: \">=\",\n doesNotEqual: \"!=\",\n isNull: \"is null\",\n isNotNull: \"is not null\",\n isIn: \"in\",\n isNotIn: \"not in\",\n contains: \"contains\",\n bitwiseAnd: \"&\",\n bitwiseOr: \"|\",\n and: \"and\",\n or: \"or\",\n beginsWith: \"begins with\",\n endsWith: \"ends with\"\n};\n\nconst BOOLEAN_FILTERS = [\n FILTER_OPERATORS.bitwiseAnd,\n FILTER_OPERATORS.bitwiseOr,\n FILTER_OPERATORS.equals,\n FILTER_OPERATORS.doesNotEqual,\n FILTER_OPERATORS.or,\n FILTER_OPERATORS.and,\n FILTER_OPERATORS.isNull,\n FILTER_OPERATORS.isNotNull\n];\n\nconst NUMBER_FILTERS = [\n FILTER_OPERATORS.lessThan,\n FILTER_OPERATORS.greaterThan,\n FILTER_OPERATORS.equals,\n FILTER_OPERATORS.lessThanOrEquals,\n FILTER_OPERATORS.greaterThanOrEquals,\n FILTER_OPERATORS.doesNotEqual,\n FILTER_OPERATORS.isNull,\n FILTER_OPERATORS.isNotNull\n];\n\nconst STRING_FILTERS = [\n FILTER_OPERATORS.equals,\n FILTER_OPERATORS.contains,\n FILTER_OPERATORS.doesNotEqual,\n FILTER_OPERATORS.isIn,\n FILTER_OPERATORS.isNotIn,\n FILTER_OPERATORS.beginsWith,\n FILTER_OPERATORS.endsWith,\n FILTER_OPERATORS.isNull,\n FILTER_OPERATORS.isNotNull\n];\n\nconst DATETIME_FILTERS = [\n FILTER_OPERATORS.lessThan,\n FILTER_OPERATORS.greaterThan,\n FILTER_OPERATORS.equals,\n FILTER_OPERATORS.lessThanOrEquals,\n FILTER_OPERATORS.greaterThanOrEquals,\n FILTER_OPERATORS.doesNotEqual,\n FILTER_OPERATORS.isNull,\n FILTER_OPERATORS.isNotNull\n];\n\nexport const COLUMN_SEPARATOR_STRING = \"|\";\n\nexport const TYPE_FILTERS = {\n string: STRING_FILTERS,\n float: NUMBER_FILTERS,\n integer: NUMBER_FILTERS,\n boolean: BOOLEAN_FILTERS,\n datetime: DATETIME_FILTERS,\n date: DATETIME_FILTERS\n};\n","/******************************************************************************\n *\n * Copyright (c) 2017, the Perspective Authors.\n *\n * This file is part of the Perspective library, distributed under the terms of\n * the Apache License 2.0. The full license can be found in the LICENSE file.\n *\n */\n\nimport * as defaults from \"./config/constants.js\";\nimport {get_config} from \"./config\";\nimport {Client} from \"./api/client.js\";\nconst {WebSocketClient} = require(\"./websocket\");\n\nimport wasm_worker from \"./perspective.wasm.js\";\nimport wasm from \"./psp.async.wasm.js\";\nimport {override_config} from \"../../dist/esm/config/index.js\";\n\n// eslint-disable-next-line max-len\nconst INLINE_WARNING = `Perspective has been compiled in INLINE mode. While Perspective's runtime performance is not affected, you may see smaller assets size and faster engine initial load time using \"@finos/perspective-webpack-plugin\" to build your application.\n\nhttps://perspective.finos.org/docs/md/installation.html#-an-important-note-about-hosting`;\n\n/**\n * Singleton WASM file download cache.\n */\nconst override = new (class {\n _fetch(url) {\n return new Promise(resolve => {\n let wasmXHR = new XMLHttpRequest();\n wasmXHR.open(\"GET\", url, true);\n wasmXHR.responseType = \"arraybuffer\";\n wasmXHR.onload = () => {\n resolve(wasmXHR.response);\n };\n wasmXHR.send(null);\n });\n }\n\n worker() {\n return wasm_worker();\n }\n\n async wasm() {\n if (wasm instanceof ArrayBuffer) {\n console.warn(INLINE_WARNING);\n this._wasm = wasm;\n } else {\n this._wasm = await this._fetch(wasm);\n }\n return this._wasm;\n }\n})();\n\n/**\n * WebWorker extends Perspective's `worker` class and defines interactions using\n * the WebWorker API.\n *\n * This class serves as the client API for transporting messages to/from Web\n * Workers.\n */\nclass WebWorkerClient extends Client {\n constructor(config) {\n if (config) {\n override_config(config);\n }\n super();\n this.register();\n }\n\n /**\n * When the worker is created, load either the ASM or WASM bundle depending\n * on WebAssembly compatibility. Don't use transferrable so multiple\n * workers can be instantiated.\n */\n async register() {\n let _worker;\n const msg = {cmd: \"init\", config: get_config()};\n if (typeof WebAssembly === \"undefined\") {\n throw new Error(\"WebAssembly not supported. Support for ASM.JS has been removed as of 0.3.1.\");\n } else {\n [_worker, msg.buffer] = await Promise.all([override.worker(), override.wasm()]);\n }\n for (var key in this._worker) {\n _worker[key] = this._worker[key];\n }\n this._worker = _worker;\n this._worker.addEventListener(\"message\", this._handle.bind(this));\n this._worker.postMessage(msg);\n this._detect_transferable();\n }\n\n /**\n * Send a message from the worker, using transferables if necessary.\n *\n * @param {*} msg\n */\n send(msg) {\n if (this._worker.transferable && msg.args && msg.args[0] instanceof ArrayBuffer) {\n this._worker.postMessage(msg, [msg.args[0]]);\n } else {\n this._worker.postMessage(msg);\n }\n }\n\n terminate() {\n this._worker.terminate();\n this._worker = undefined;\n }\n\n _detect_transferable() {\n var ab = new ArrayBuffer(1);\n this._worker.postMessage(ab, [ab]);\n this._worker.transferable = ab.byteLength === 0;\n if (!this._worker.transferable) {\n console.warn(\"Transferable support not detected\");\n } else {\n console.log(\"Transferable support detected\");\n }\n }\n}\n\n/******************************************************************************\n *\n * Web Worker Singleton\n *\n */\n\nconst WORKER_SINGLETON = (function() {\n let __WORKER__, __CONFIG__;\n return {\n getInstance: function(config) {\n if (__WORKER__ === undefined) {\n __WORKER__ = new WebWorkerClient(config);\n }\n const config_str = JSON.stringify(config);\n if (__CONFIG__ && config_str !== __CONFIG__) {\n throw new Error(`Confiuration object for shared_worker() has changed - this is probably a bug in your application.`);\n }\n __CONFIG__ = config_str;\n return __WORKER__;\n }\n };\n})();\n\n/**\n * If Perspective is loaded with the `preload` attribute, pre-initialize the\n * worker so it is available at page render.\n */\nif (document.currentScript && document.currentScript.hasAttribute(\"preload\")) {\n WORKER_SINGLETON.getInstance();\n}\n\nconst mod = {\n override: x => override.set(x),\n\n /**\n * Create a new WebWorkerClient instance. s\n * @param {*} [config] An optional perspective config object override\n */\n worker(config) {\n return new WebWorkerClient(config);\n },\n\n /**\n * Create a new WebSocketClient instance. The `url` parameter is provided,\n * load the worker at `url` using a WebSocket. s\n * @param {*} url Defaults to `window.location.origin`\n * @param {*} [config] An optional perspective config object override\n */\n websocket(url = window.location.origin.replace(\"http\", \"ws\")) {\n return new WebSocketClient(new WebSocket(url));\n },\n\n shared_worker(config) {\n return WORKER_SINGLETON.getInstance(config);\n }\n};\n\nfor (let prop of Object.keys(defaults)) {\n mod[prop] = defaults[prop];\n}\n\nexport default mod;\n"],"sourceRoot":""}
\No newline at end of file