UNPKG

365 kBSource Map (JSON)View Raw
1{"version":3,"file":"_hyperscript_w9y.min.js","sources":["../src/lib/utils.js","../src/lib/core.js","../src/lib/plugin/socket.js","../src/lib/plugin/template.js","../src/lib/web.js","../src/web/_hyperscript_w9y.js","../src/lib/plugin/worker.js","../src/lib/plugin/eventsource.js","../src/lib/plugin/hdb.js"],"sourcesContent":["\n/**\n * mergeObjects combines the keys from obj2 into obj2, then returns obj1\n *\n * @param {object} obj1\n * @param {object} obj2\n * @returns object\n */\nexport function mergeObjects(obj1, obj2) {\n\tfor (var key in obj2) {\n\t\tif (obj2.hasOwnProperty(key)) {\n\t\t\tobj1[key] = obj2[key];\n\t\t}\n\t}\n\treturn obj1;\n}\n\nexport function getOrInitObject(root, prop) {\n\tvar value = root[prop];\n\tif (value) {\n\t\treturn value;\n\t} else {\n\t\tvar newObj = {};\n\t\troot[prop] = newObj;\n\t\treturn newObj;\n\t}\n}\n\n/**\n * parseJSON parses a JSON string into a corresponding value. If the\n * value passed in is not valid JSON, then it logs an error and returns `null`.\n *\n * @param {string} jString\n * @returns any\n */\nexport function parseJSON(jString) {\n\ttry {\n\t\treturn JSON.parse(jString);\n\t} catch (error) {\n\t\tlogError(error);\n\t\treturn null;\n\t}\n}\n\n/**\n * logError writes an error message to the Javascript console. It can take any\n * value, but msg should commonly be a simple string.\n * @param {*} msg\n */\nexport function logError(msg) {\n\tif (console.error) {\n\t\tconsole.error(msg);\n\t} else if (console.log) {\n\t\tconsole.log(\"ERROR: \", msg);\n\t}\n}\n\n// TODO: JSDoc description of what's happening here\nexport function varargConstructor(Cls, args) {\n\treturn new (Cls.bind.apply(Cls, [Cls].concat(args)))();\n}\n","///=========================================================================\n/// This module provides the core runtime and grammar for hyperscript\n///=========================================================================\n\nimport {getOrInitObject, mergeObjects, parseJSON, varargConstructor} from \"./utils.js\";\n\n\n/**\n * @type {HyperscriptObject}\n */\nlet _hyperscript\n\nvar globalScope = globalThis;\n\n//====================================================================\n// Standard library\n//====================================================================\n\nclass ElementCollection {\n\tconstructor(css, relativeToElement, escape) {\n\t\tthis._css = css;\n\t\tthis.relativeToElement = relativeToElement;\n\t\tthis.escape = escape;\n\t}\n\n\tget css() {\n\t\tif (this.escape) {\n\t\t\treturn _runtime.escapeSelector(this._css);\n\t\t} else {\n\t\t\treturn this._css;\n\t\t}\n\t}\n\n\tget className() {\n\t\treturn this._css.substr(1);\n\t}\n\n\tget id() {\n\t\treturn this.className();\n\t}\n\n\tcontains(elt) {\n\t\tfor (let element of this) {\n\t\t\tif (element.contains(elt)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tget length() {\n\t\treturn this.selectMatches().length;\n\t}\n\n\t[Symbol.iterator]() {\n\t\tlet query = this.selectMatches();\n\t\treturn query [Symbol.iterator]();\n\t}\n\n\tselectMatches() {\n\t\tlet query = _runtime.getRootNode(this.relativeToElement).querySelectorAll(this.css);\n\t\treturn query;\n\t}\n}\n\n//====================================================================\n// Lexer\n//====================================================================\n\n/** @type LexerObject */\nvar _lexer = (function () {\n\tvar OP_TABLE = {\n\t\t\"+\": \"PLUS\",\n\t\t\"-\": \"MINUS\",\n\t\t\"*\": \"MULTIPLY\",\n\t\t\"/\": \"DIVIDE\",\n\t\t\".\": \"PERIOD\",\n\t\t\"..\": \"ELLIPSIS\",\n\t\t\"\\\\\": \"BACKSLASH\",\n\t\t\":\": \"COLON\",\n\t\t\"%\": \"PERCENT\",\n\t\t\"|\": \"PIPE\",\n\t\t\"!\": \"EXCLAMATION\",\n\t\t\"?\": \"QUESTION\",\n\t\t\"#\": \"POUND\",\n\t\t\"&\": \"AMPERSAND\",\n\t\t$: \"DOLLAR\",\n\t\t\";\": \"SEMI\",\n\t\t\",\": \"COMMA\",\n\t\t\"(\": \"L_PAREN\",\n\t\t\")\": \"R_PAREN\",\n\t\t\"<\": \"L_ANG\",\n\t\t\">\": \"R_ANG\",\n\t\t\"<=\": \"LTE_ANG\",\n\t\t\">=\": \"GTE_ANG\",\n\t\t\"==\": \"EQ\",\n\t\t\"===\": \"EQQ\",\n\t\t\"!=\": \"NEQ\",\n\t\t\"!==\": \"NEQQ\",\n\t\t\"{\": \"L_BRACE\",\n\t\t\"}\": \"R_BRACE\",\n\t\t\"[\": \"L_BRACKET\",\n\t\t\"]\": \"R_BRACKET\",\n\t\t\"=\": \"EQUALS\",\n\t};\n\n\t/**\n\t * isValidCSSClassChar returns `true` if the provided character is valid in a CSS class.\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isValidCSSClassChar(c) {\n\t\treturn isAlpha(c) || isNumeric(c) || c === \"-\" || c === \"_\" || c === \":\";\n\t}\n\n\t/**\n\t * isValidCSSIDChar returns `true` if the provided character is valid in a CSS ID\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isValidCSSIDChar(c) {\n\t\treturn isAlpha(c) || isNumeric(c) || c === \"-\" || c === \"_\" || c === \":\";\n\t}\n\n\t/**\n\t * isWhitespace returns `true` if the provided character is whitespace.\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isWhitespace(c) {\n\t\treturn c === \" \" || c === \"\\t\" || isNewline(c);\n\t}\n\n\t/**\n\t * positionString returns a string representation of a Token's line and column details.\n\t * @param {Token} token\n\t * @returns string\n\t */\n\tfunction positionString(token) {\n\t\treturn \"[Line: \" + token.line + \", Column: \" + token.column + \"]\";\n\t}\n\n\t/**\n\t * isNewline returns `true` if the provided character is a carrage return or newline\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isNewline(c) {\n\t\treturn c === \"\\r\" || c === \"\\n\";\n\t}\n\n\t/**\n\t * isNumeric returns `true` if the provided character is a number (0-9)\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isNumeric(c) {\n\t\treturn c >= \"0\" && c <= \"9\";\n\t}\n\n\t/**\n\t * isAlpha returns `true` if the provided character is a letter in the alphabet\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isAlpha(c) {\n\t\treturn (c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\");\n\t}\n\n\t/**\n\t * @param {string} c\n\t * @param {boolean} [dollarIsOp]\n\t * @returns boolean\n\t */\n\tfunction isIdentifierChar(c, dollarIsOp) {\n\t\treturn c === \"_\" || c === \"$\";\n\t}\n\n\t/**\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isReservedChar(c) {\n\t\treturn c === \"`\" || c === \"^\";\n\t}\n\n\t/**\n\t * @param {Token[]} tokens\n\t * @param {Token[]} consumed\n\t * @param {string} source\n\t * @returns {TokensObject}\n\t */\n\tfunction makeTokensObject(tokens, consumed, source) {\n\t\tconsumeWhitespace(); // consume initial whitespace\n\n\t\t/** @type Token | null */\n\t\tvar _lastConsumed = null;\n\n\t\tfunction consumeWhitespace() {\n\t\t\twhile (token(0, true).type === \"WHITESPACE\") {\n\t\t\t\tconsumed.push(tokens.shift());\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {TokensObject} tokens\n\t\t * @param {*} error\n\t\t */\n\t\tfunction raiseError(tokens, error) {\n\t\t\t_parser.raiseParseError(tokens, error);\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction requireOpToken(value) {\n\t\t\tvar token = matchOpToken(value);\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\traiseError(this, \"Expected '\" + value + \"' but found '\" + currentToken().value + \"'\");\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} op1\n\t\t * @param {string} [op2]\n\t\t * @param {string} [op3]\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchAnyOpToken(op1, op2, op3) {\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar opToken = arguments[i];\n\t\t\t\tvar match = matchOpToken(opToken);\n\t\t\t\tif (match) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} op1\n\t\t * @param {string} [op2]\n\t\t * @param {string} [op3]\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchAnyToken(op1, op2, op3) {\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar opToken = arguments[i];\n\t\t\t\tvar match = matchToken(opToken);\n\t\t\t\tif (match) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchOpToken(value) {\n\t\t\tif (currentToken() && currentToken().op && currentToken().value === value) {\n\t\t\t\treturn consumeToken();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type1\n\t\t * @param {string} [type2]\n\t\t * @param {string} [type3]\n\t\t * @param {string} [type4]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction requireTokenType(type1, type2, type3, type4) {\n\t\t\tvar token = matchTokenType(type1, type2, type3, type4);\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\traiseError(this, \"Expected one of \" + JSON.stringify([type1, type2, type3]));\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type1\n\t\t * @param {string} [type2]\n\t\t * @param {string} [type3]\n\t\t * @param {string} [type4]\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchTokenType(type1, type2, type3, type4) {\n\t\t\tif (\n\t\t\t\tcurrentToken() &&\n\t\t\t\tcurrentToken().type &&\n\t\t\t\t[type1, type2, type3, type4].indexOf(currentToken().type) >= 0\n\t\t\t) {\n\t\t\t\treturn consumeToken();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @param {string} [type]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction requireToken(value, type) {\n\t\t\tvar token = matchToken(value, type);\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\traiseError(this, \"Expected '\" + value + \"' but found '\" + currentToken().value + \"'\");\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @param {string} [type]\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchToken(value, type) {\n\t\t\tif (follows.indexOf(value) !== -1) {\n\t\t\t\treturn; // disallowed token here\n\t\t\t}\n\t\t\tvar type = type || \"IDENTIFIER\";\n\t\t\tif (currentToken() && currentToken().value === value && currentToken().type === type) {\n\t\t\t\treturn consumeToken();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction consumeToken() {\n\t\t\tvar match = tokens.shift();\n\t\t\tconsumed.push(match);\n\t\t\t_lastConsumed = match;\n\t\t\tconsumeWhitespace(); // consume any whitespace\n\t\t\treturn match;\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @param {string} [type]\n\t\t * @returns {Token[]}\n\t\t */\n\t\tfunction consumeUntil(value, type) {\n\t\t\t/** @type Token[] */\n\t\t\tvar tokenList = [];\n\t\t\tvar currentToken = token(0, true);\n\n\t\t\twhile (\n\t\t\t\t(type == null || currentToken.type !== type) &&\n\t\t\t\t(value == null || currentToken.value !== value) &&\n\t\t\t\tcurrentToken.type !== \"EOF\"\n\t\t\t) {\n\t\t\t\tvar match = tokens.shift();\n\t\t\t\tconsumed.push(match);\n\t\t\t\ttokenList.push(currentToken);\n\t\t\t\tcurrentToken = token(0, true);\n\t\t\t}\n\t\t\tconsumeWhitespace(); // consume any whitespace\n\t\t\treturn tokenList;\n\t\t}\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tfunction lastWhitespace() {\n\t\t\tif (consumed[consumed.length - 1] && consumed[consumed.length - 1].type === \"WHITESPACE\") {\n\t\t\t\treturn consumed[consumed.length - 1].value;\n\t\t\t} else {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t}\n\n\t\tfunction consumeUntilWhitespace() {\n\t\t\treturn consumeUntil(null, \"WHITESPACE\");\n\t\t}\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tfunction hasMore() {\n\t\t\treturn tokens.length > 0;\n\t\t}\n\n\t\t/**\n\t\t * @param {number} n\n\t\t * @param {boolean} [dontIgnoreWhitespace]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction token(n, dontIgnoreWhitespace) {\n\t\t\tvar /**@type {Token}*/ token;\n\t\t\tvar i = 0;\n\t\t\tdo {\n\t\t\t\tif (!dontIgnoreWhitespace) {\n\t\t\t\t\twhile (tokens[i] && tokens[i].type === \"WHITESPACE\") {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoken = tokens[i];\n\t\t\t\tn--;\n\t\t\t\ti++;\n\t\t\t} while (n > -1);\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"EOF\",\n\t\t\t\t\tvalue: \"<<<EOF>>>\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction currentToken() {\n\t\t\treturn token(0);\n\t\t}\n\n\t\t/**\n\t\t * @returns {Token | null}\n\t\t */\n\t\tfunction lastMatch() {\n\t\t\treturn _lastConsumed;\n\t\t}\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tfunction sourceFor() {\n\t\t\treturn source.substring(this.startToken.start, this.endToken.end);\n\t\t}\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tfunction lineFor() {\n\t\t\treturn source.split(\"\\n\")[this.startToken.line - 1];\n\t\t}\n\n\t\tvar follows = [];\n\n\t\tfunction pushFollow(str) {\n\t\t\tfollows.push(str);\n\t\t}\n\n\t\tfunction popFollow() {\n\t\t\tfollows.pop();\n\t\t}\n\n\t\tfunction clearFollows() {\n\t\t\tvar tmp = follows;\n\t\t\tfollows = [];\n\t\t\treturn tmp;\n\t\t}\n\n\t\tfunction restoreFollows(f) {\n\t\t\tfollows = f;\n\t\t}\n\n\t\t/** @type {TokensObject} */\n\t\treturn {\n\t\t\tpushFollow: pushFollow,\n\t\t\tpopFollow: popFollow,\n\t\t\tclearFollow: clearFollows,\n\t\t\trestoreFollow: restoreFollows,\n\t\t\tmatchAnyToken: matchAnyToken,\n\t\t\tmatchAnyOpToken: matchAnyOpToken,\n\t\t\tmatchOpToken: matchOpToken,\n\t\t\trequireOpToken: requireOpToken,\n\t\t\tmatchTokenType: matchTokenType,\n\t\t\trequireTokenType: requireTokenType,\n\t\t\tconsumeToken: consumeToken,\n\t\t\tmatchToken: matchToken,\n\t\t\trequireToken: requireToken,\n\t\t\tlist: tokens,\n\t\t\tconsumed: consumed,\n\t\t\tsource: source,\n\t\t\thasMore: hasMore,\n\t\t\tcurrentToken: currentToken,\n\t\t\tlastMatch: lastMatch,\n\t\t\ttoken: token,\n\t\t\tconsumeUntil: consumeUntil,\n\t\t\tconsumeUntilWhitespace: consumeUntilWhitespace,\n\t\t\tlastWhitespace: lastWhitespace,\n\t\t\tsourceFor: sourceFor,\n\t\t\tlineFor: lineFor,\n\t\t};\n\t}\n\n\t/**\n\t * @param {Token[]} tokens\n\t * @returns {boolean}\n\t */\n\tfunction isValidSingleQuoteStringStart(tokens) {\n\t\tif (tokens.length > 0) {\n\t\t\tvar previousToken = tokens[tokens.length - 1];\n\t\t\tif (\n\t\t\t\tpreviousToken.type === \"IDENTIFIER\" ||\n\t\t\t\tpreviousToken.type === \"CLASS_REF\" ||\n\t\t\t\tpreviousToken.type === \"ID_REF\"\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (previousToken.op && (previousToken.value === \">\" || previousToken.value === \")\")) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param {string} string\n\t * @param {boolean} [template]\n\t * @returns {TokensObject}\n\t */\n\tfunction tokenize(string, template) {\n\t\tvar tokens = /** @type {Token[]}*/ [];\n\t\tvar source = string;\n\t\tvar position = 0;\n\t\tvar column = 0;\n\t\tvar line = 1;\n\t\tvar lastToken = \"<START>\";\n\t\tvar templateBraceCount = 0;\n\n\t\tfunction inTemplate() {\n\t\t\treturn template && templateBraceCount === 0;\n\t\t}\n\n\t\twhile (position < source.length) {\n\t\t\tif (currentChar() === \"-\" && nextChar() === \"-\" && (isWhitespace(charAfterThat()) || charAfterThat() === \"\")) {\n\t\t\t\tconsumeComment();\n\t\t\t} else {\n\t\t\t\tif (isWhitespace(currentChar())) {\n\t\t\t\t\ttokens.push(consumeWhitespace());\n\t\t\t\t} else if (\n\t\t\t\t\t!possiblePrecedingSymbol() &&\n\t\t\t\t\tcurrentChar() === \".\" &&\n\t\t\t\t\t(isAlpha(nextChar()) || nextChar() === \"{\")\n\t\t\t\t) {\n\t\t\t\t\ttokens.push(consumeClassReference());\n\t\t\t\t} else if (\n\t\t\t\t\t!possiblePrecedingSymbol() &&\n\t\t\t\t\tcurrentChar() === \"#\" &&\n\t\t\t\t\t(isAlpha(nextChar()) || nextChar() === \"{\")\n\t\t\t\t) {\n\t\t\t\t\ttokens.push(consumeIdReference());\n\t\t\t\t} else if (currentChar() === \"[\" && nextChar() === \"@\") {\n\t\t\t\t\ttokens.push(consumeAttributeReference());\n\t\t\t\t} else if (currentChar() === \"@\") {\n\t\t\t\t\ttokens.push(consumeShortAttributeReference());\n\t\t\t\t} else if (isAlpha(currentChar()) || (!inTemplate() && isIdentifierChar(currentChar()))) {\n\t\t\t\t\ttokens.push(consumeIdentifier());\n\t\t\t\t} else if (isNumeric(currentChar())) {\n\t\t\t\t\ttokens.push(consumeNumber());\n\t\t\t\t} else if (!inTemplate() && (currentChar() === '\"' || currentChar() === \"`\")) {\n\t\t\t\t\ttokens.push(consumeString());\n\t\t\t\t} else if (!inTemplate() && currentChar() === \"'\") {\n\t\t\t\t\tif (isValidSingleQuoteStringStart(tokens)) {\n\t\t\t\t\t\ttokens.push(consumeString());\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttokens.push(consumeOp());\n\t\t\t\t\t}\n\t\t\t\t} else if (OP_TABLE[currentChar()]) {\n\t\t\t\t\tif (lastToken === \"$\" && currentChar() === \"{\") {\n\t\t\t\t\t\ttemplateBraceCount++;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentChar() === \"}\") {\n\t\t\t\t\t\ttemplateBraceCount--;\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push(consumeOp());\n\t\t\t\t} else if (inTemplate() || isReservedChar(currentChar())) {\n\t\t\t\t\ttokens.push(makeToken(\"RESERVED\", consumeChar()));\n\t\t\t\t} else {\n\t\t\t\t\tif (position < source.length) {\n\t\t\t\t\t\tthrow Error(\"Unknown token: \" + currentChar() + \" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn makeTokensObject(tokens, [], source);\n\n\t\t/**\n\t\t * @param {string} [type]\n\t\t * @param {string} [value]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction makeOpToken(type, value) {\n\t\t\tvar token = makeToken(type, value);\n\t\t\ttoken.op = true;\n\t\t\treturn token;\n\t\t}\n\n\t\t/**\n\t\t * @param {string} [type]\n\t\t * @param {string} [value]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction makeToken(type, value) {\n\t\t\treturn {\n\t\t\t\ttype: type,\n\t\t\t\tvalue: value,\n\t\t\t\tstart: position,\n\t\t\t\tend: position + 1,\n\t\t\t\tcolumn: column,\n\t\t\t\tline: line,\n\t\t\t};\n\t\t}\n\n\t\tfunction consumeComment() {\n\t\t\twhile (currentChar() && !isNewline(currentChar())) {\n\t\t\t\tconsumeChar();\n\t\t\t}\n\t\t\tconsumeChar();\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeClassReference() {\n\t\t\tvar classRef = makeToken(\"CLASS_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\tif (currentChar() === \"{\") {\n\t\t\t\tclassRef.template = true;\n\t\t\t\tvalue += consumeChar();\n\t\t\t\twhile (currentChar() && currentChar() !== \"}\") {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t\tif (currentChar() !== \"}\") {\n\t\t\t\t\tthrow Error(\"Unterminated class reference\");\n\t\t\t\t} else {\n\t\t\t\t\tvalue += consumeChar(); // consume final curly\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile (isValidCSSClassChar(currentChar())) {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t}\n\t\t\tclassRef.value = value;\n\t\t\tclassRef.end = position;\n\t\t\treturn classRef;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeAttributeReference() {\n\t\t\tvar attributeRef = makeToken(\"ATTRIBUTE_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (position < source.length && currentChar() !== \"]\") {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tif (currentChar() === \"]\") {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tattributeRef.value = value;\n\t\t\tattributeRef.end = position;\n\t\t\treturn attributeRef;\n\t\t}\n\n\t\tfunction consumeShortAttributeReference() {\n\t\t\tvar attributeRef = makeToken(\"ATTRIBUTE_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (isValidCSSIDChar(currentChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tattributeRef.value = value;\n\t\t\tattributeRef.end = position;\n\t\t\treturn attributeRef;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeIdReference() {\n\t\t\tvar idRef = makeToken(\"ID_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\tif (currentChar() === \"{\") {\n\t\t\t\tidRef.template = true;\n\t\t\t\tvalue += consumeChar();\n\t\t\t\twhile (currentChar() && currentChar() !== \"}\") {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t\tif (currentChar() !== \"}\") {\n\t\t\t\t\tthrow Error(\"Unterminated id reference\");\n\t\t\t\t} else {\n\t\t\t\t\tconsumeChar(); // consume final quote\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile (isValidCSSIDChar(currentChar())) {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t}\n\t\t\tidRef.value = value;\n\t\t\tidRef.end = position;\n\t\t\treturn idRef;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeIdentifier() {\n\t\t\tvar identifier = makeToken(\"IDENTIFIER\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (isAlpha(currentChar()) || isIdentifierChar(currentChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tidentifier.value = value;\n\t\t\tidentifier.end = position;\n\t\t\treturn identifier;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeNumber() {\n\t\t\tvar number = makeToken(\"NUMBER\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (isNumeric(currentChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tif (currentChar() === \".\" && isNumeric(nextChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\twhile (isNumeric(currentChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tnumber.value = value;\n\t\t\tnumber.end = position;\n\t\t\treturn number;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeOp() {\n\t\t\tvar op = makeOpToken();\n\t\t\tvar value = consumeChar(); // consume leading char\n\t\t\twhile (currentChar() && OP_TABLE[value + currentChar()]) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\top.type = OP_TABLE[value];\n\t\t\top.value = value;\n\t\t\top.end = position;\n\t\t\treturn op;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeString() {\n\t\t\tvar string = makeToken(\"STRING\");\n\t\t\tvar startChar = consumeChar(); // consume leading quote\n\t\t\tvar value = \"\";\n\t\t\twhile (currentChar() && currentChar() !== startChar) {\n\t\t\t\tif (currentChar() === \"\\\\\") {\n\t\t\t\t\tconsumeChar(); // consume escape char and move on\n\t\t\t\t}\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tif (currentChar() !== startChar) {\n\t\t\t\tthrow Error(\"Unterminated string at \" + positionString(string));\n\t\t\t} else {\n\t\t\t\tconsumeChar(); // consume final quote\n\t\t\t}\n\t\t\tstring.value = value;\n\t\t\tstring.end = position;\n\t\t\tstring.template = startChar === \"`\";\n\t\t\treturn string;\n\t\t}\n\n\t\t/**\n\t\t * @returns string\n\t\t */\n\t\tfunction currentChar() {\n\t\t\treturn source.charAt(position);\n\t\t}\n\n\t\t/**\n\t\t * @returns string\n\t\t */\n\t\tfunction nextChar() {\n\t\t\treturn source.charAt(position + 1);\n\t\t}\n\n\t\tfunction charAfterThat() {\n\t\t\treturn source.charAt(position + 2);\n\t\t}\n\n\t\t/**\n\t\t * @returns string\n\t\t */\n\t\tfunction consumeChar() {\n\t\t\tlastToken = currentChar();\n\t\t\tposition++;\n\t\t\tcolumn++;\n\t\t\treturn lastToken;\n\t\t}\n\n\t\t/**\n\t\t * @returns boolean\n\t\t */\n\t\tfunction possiblePrecedingSymbol() {\n\t\t\treturn (\n\t\t\t\tisAlpha(lastToken) ||\n\t\t\t\tisNumeric(lastToken) ||\n\t\t\t\tlastToken === \")\" ||\n\t\t\t\tlastToken === \"\\\"\" ||\n\t\t\t\tlastToken === \"'\" ||\n\t\t\t\tlastToken === \"`\" ||\n\t\t\t\tlastToken === \"}\" ||\n\t\t\t\tlastToken === \"]\"\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeWhitespace() {\n\t\t\tvar whitespace = makeToken(\"WHITESPACE\");\n\t\t\tvar value = \"\";\n\t\t\twhile (currentChar() && isWhitespace(currentChar())) {\n\t\t\t\tif (isNewline(currentChar())) {\n\t\t\t\t\tcolumn = 0;\n\t\t\t\t\tline++;\n\t\t\t\t}\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\twhitespace.value = value;\n\t\t\twhitespace.end = position;\n\t\t\treturn whitespace;\n\t\t}\n\t}\n\n\treturn {\n\t\ttokenize: tokenize,\n\t\tmakeTokensObject: makeTokensObject,\n\t};\n})();\n\n//====================================================================\n// Parser\n//====================================================================\n\n/** @type ParserObject */\nvar _parser = (function () {\n\t/** @type {Object<string,GrammarDefinition>} */\n\tvar GRAMMAR = {};\n\n\t/** @type {Object<string,GrammarDefinition>} */\n\tvar COMMANDS = {};\n\n\t/** @type {Object<string,GrammarDefinition>} */\n\tvar FEATURES = {};\n\n\tvar LEAF_EXPRESSIONS = [];\n\tvar INDIRECT_EXPRESSIONS = [];\n\n\t/**\n\t * @param {*} parseElement\n\t * @param {*} start\n\t * @param {TokensObject} tokens\n\t */\n\tfunction initElt(parseElement, start, tokens) {\n\t\tparseElement.startToken = start;\n\t\tparseElement.sourceFor = tokens.sourceFor;\n\t\tparseElement.lineFor = tokens.lineFor;\n\t\tparseElement.programSource = tokens.source;\n\t}\n\n\t/**\n\t * @param {string} type\n\t * @param {TokensObject} tokens\n\t * @param {GrammarElement?} root\n\t * @returns GrammarElement\n\t */\n\tfunction parseElement(type, tokens, root = undefined) {\n\t\tvar elementDefinition = GRAMMAR[type];\n\t\tif (elementDefinition) {\n\t\t\tvar start = tokens.currentToken();\n\t\t\tvar parseElement = elementDefinition(_parser, _runtime, tokens, root);\n\t\t\tif (parseElement) {\n\t\t\t\tinitElt(parseElement, start, tokens);\n\t\t\t\tparseElement.endToken = parseElement.endToken || tokens.lastMatch();\n\t\t\t\tvar root = parseElement.root;\n\t\t\t\twhile (root != null) {\n\t\t\t\t\tinitElt(root, start, tokens);\n\t\t\t\t\troot = root.root;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parseElement;\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} type\n\t * @param {TokensObject} tokens\n\t * @param {string} [message]\n\t * @param {*} [root]\n\t * @returns {GrammarElement}\n\t */\n\tfunction requireElement(type, tokens, message, root) {\n\t\tvar result = parseElement(type, tokens, root);\n\t\tif (!result) raiseParseError(tokens, message || \"Expected \" + type);\n\t\t// @ts-ignore\n\t\treturn result;\n\t}\n\n\t/**\n\t * @param {string[]} types\n\t * @param {TokensObject} tokens\n\t * @returns {GrammarElement}\n\t */\n\tfunction parseAnyOf(types, tokens) {\n\t\tfor (var i = 0; i < types.length; i++) {\n\t\t\tvar type = types[i];\n\t\t\tvar expression = parseElement(type, tokens);\n\t\t\tif (expression) {\n\t\t\t\treturn expression;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addGrammarElement(name, definition) {\n\t\tGRAMMAR[name] = definition;\n\t}\n\n\t/**\n\t * @param {string} keyword\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addCommand(keyword, definition) {\n\t\tvar commandGrammarType = keyword + \"Command\";\n\t\tvar commandDefinitionWrapper = function (parser, runtime, tokens) {\n\t\t\tconst commandElement = definition(parser, runtime, tokens);\n\t\t\tif (commandElement) {\n\t\t\t\tcommandElement.type = commandGrammarType;\n\t\t\t\tcommandElement.execute = function (context) {\n\t\t\t\t\tcontext.meta.command = commandElement;\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t};\n\t\t\t\treturn commandElement;\n\t\t\t}\n\t\t};\n\t\tGRAMMAR[commandGrammarType] = commandDefinitionWrapper;\n\t\tCOMMANDS[keyword] = commandDefinitionWrapper;\n\t}\n\n\t/**\n\t * @param {string} keyword\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addFeature(keyword, definition) {\n\t\tvar featureGrammarType = keyword + \"Feature\";\n\n\t\t/** @type {GrammarDefinition} */\n\t\tvar featureDefinitionWrapper = function (parser, runtime, tokens) {\n\t\t\tvar featureElement = definition(parser, runtime, tokens);\n\t\t\tif (featureElement) {\n\t\t\t\tfeatureElement.isFeature = true;\n\t\t\t\tfeatureElement.keyword = keyword;\n\t\t\t\tfeatureElement.type = featureGrammarType;\n\t\t\t\treturn featureElement;\n\t\t\t}\n\t\t};\n\t\tGRAMMAR[featureGrammarType] = featureDefinitionWrapper;\n\t\tFEATURES[keyword] = featureDefinitionWrapper;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addLeafExpression(name, definition) {\n\t\tLEAF_EXPRESSIONS.push(name);\n\t\taddGrammarElement(name, definition);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addIndirectExpression(name, definition) {\n\t\tINDIRECT_EXPRESSIONS.push(name);\n\t\taddGrammarElement(name, definition);\n\t}\n\n\t/* ============================================================================================ */\n\t/* Core hyperscript Grammar Elements */\n\t/* ============================================================================================ */\n\taddGrammarElement(\"feature\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tvar featureElement = parser.requireElement(\"feature\", tokens);\n\t\t\ttokens.requireOpToken(\")\");\n\t\t\treturn featureElement;\n\t\t}\n\n\t\tvar featureDefinition = FEATURES[tokens.currentToken().value];\n\t\tif (featureDefinition) {\n\t\t\treturn featureDefinition(parser, runtime, tokens);\n\t\t}\n\t});\n\n\taddGrammarElement(\"command\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tconst commandElement = parser.requireElement(\"command\", tokens);\n\t\t\ttokens.requireOpToken(\")\");\n\t\t\treturn commandElement;\n\t\t}\n\n\t\tvar commandDefinition = COMMANDS[tokens.currentToken().value];\n\t\tlet commandElement;\n\t\tif (commandDefinition) {\n\t\t\tcommandElement = commandDefinition(parser, runtime, tokens);\n\t\t} else if (tokens.currentToken().type === \"IDENTIFIER\" && tokens.token(1).value === \"(\") {\n\t\t\tcommandElement = parser.requireElement(\"pseudoCommand\", tokens);\n\t\t}\n\t\tif (commandElement) {\n\t\t\treturn parser.parseElement(\"indirectStatement\", tokens, commandElement);\n\t\t}\n\n\t\treturn commandElement;\n\t});\n\n\taddGrammarElement(\"commandList\", function (parser, runtime, tokens) {\n\t\tvar cmd = parser.parseElement(\"command\", tokens);\n\t\tif (cmd) {\n\t\t\ttokens.matchToken(\"then\");\n\t\t\tconst next = parser.parseElement(\"commandList\", tokens);\n\t\t\tif (next) cmd.next = next;\n\t\t\treturn cmd;\n\t\t}\n\t});\n\n\taddGrammarElement(\"leaf\", function (parser, runtime, tokens) {\n\t\tvar result = parseAnyOf(LEAF_EXPRESSIONS, tokens);\n\t\t// symbol is last so it doesn't consume any constants\n\t\tif (result == null) {\n\t\t\treturn parseElement(\"symbol\", tokens);\n\t\t}\n\n\t\treturn result;\n\t});\n\n\taddGrammarElement(\"indirectExpression\", function (parser, runtime, tokens, root) {\n\t\tfor (var i = 0; i < INDIRECT_EXPRESSIONS.length; i++) {\n\t\t\tvar indirect = INDIRECT_EXPRESSIONS[i];\n\t\t\troot.endToken = tokens.lastMatch();\n\t\t\tvar result = parser.parseElement(indirect, tokens, root);\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn root;\n\t});\n\n\taddGrammarElement(\"indirectStatement\", function (parser, runtime, tokens, root) {\n\t\tif (tokens.matchToken(\"unless\")) {\n\t\t\troot.endToken = tokens.lastMatch();\n\t\t\tvar conditional = parser.requireElement(\"expression\", tokens);\n\t\t\tvar unless = {\n\t\t\t\ttype: \"unlessStatementModifier\",\n\t\t\t\targs: [conditional],\n\t\t\t\top: function (context, conditional) {\n\t\t\t\t\tif (conditional) {\n\t\t\t\t\t\treturn this.next;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn root;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texecute: function (context) {\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\troot.parent = unless;\n\t\t\treturn unless;\n\t\t}\n\t\treturn root;\n\t});\n\n\taddGrammarElement(\"primaryExpression\", function (parser, runtime, tokens) {\n\t\tvar leaf = parser.parseElement(\"leaf\", tokens);\n\t\tif (leaf) {\n\t\t\treturn parser.parseElement(\"indirectExpression\", tokens, leaf);\n\t\t}\n\t\tparser.raiseParseError(tokens, \"Unexpected value: \" + tokens.currentToken().value);\n\t});\n\n\t/* ============================================================================================ */\n\t/* END Core hyperscript Grammar Elements */\n\n\t/* ============================================================================================ */\n\n\t/**\n\t *\n\t * @param {TokensObject} tokens\n\t * @returns string\n\t */\n\tfunction createParserContext(tokens) {\n\t\tvar currentToken = tokens.currentToken();\n\t\tvar source = tokens.source;\n\t\tvar lines = source.split(\"\\n\");\n\t\tvar line = currentToken && currentToken.line ? currentToken.line - 1 : lines.length - 1;\n\t\tvar contextLine = lines[line];\n\t\tvar offset = currentToken && currentToken.line ? currentToken.column : contextLine.length - 1;\n\t\treturn contextLine + \"\\n\" + \" \".repeat(offset) + \"^^\\n\\n\";\n\t}\n\n\t/**\n\t * @param {TokensObject} tokens\n\t * @param {string} [message]\n\t */\n\tfunction raiseParseError(tokens, message) {\n\t\tmessage =\n\t\t\t(message || \"Unexpected Token : \" + tokens.currentToken().value) + \"\\n\\n\" + createParserContext(tokens);\n\t\tvar error = new Error(message);\n\t\terror[\"tokens\"] = tokens;\n\t\tthrow error;\n\t}\n\n\t/**\n\t * @param {TokensObject} tokens\n\t * @returns {GrammarElement}\n\t */\n\tfunction parseHyperScript(tokens) {\n\t\tvar result = parseElement(\"hyperscript\", tokens);\n\t\tif (tokens.hasMore()) raiseParseError(tokens);\n\t\tif (result) return result;\n\t}\n\n\t/**\n\t * @param {GrammarElement} elt\n\t * @param {GrammarElement} parent\n\t */\n\tfunction setParent(elt, parent) {\n\t\tif (typeof elt === 'object') {\n\t\t\telt.parent = parent;\n\t\t\tif (typeof parent === 'object') {\n\t\t\t\tparent.children = (parent.children || new Set());\n\t\t\t\tparent.children.add(elt)\n\t\t\t}\n\t\t\tsetParent(elt.next, parent);\n\t\t}\n\t}\n\n\t/**\n\t * @param {Token} token\n\t * @returns {GrammarDefinition}\n\t */\n\tfunction commandStart(token) {\n\t\treturn COMMANDS[token.value];\n\t}\n\n\t/**\n\t * @param {Token} token\n\t * @returns {GrammarDefinition}\n\t */\n\tfunction featureStart(token) {\n\t\treturn FEATURES[token.value];\n\t}\n\n\t/**\n\t * @param {Token} token\n\t * @returns {boolean}\n\t */\n\tfunction commandBoundary(token) {\n\t\tif (\n\t\t\ttoken.value == \"end\" ||\n\t\t\ttoken.value == \"then\" ||\n\t\t\ttoken.value == \"else\" ||\n\t\t\ttoken.value == \"otherwise\" ||\n\t\t\ttoken.value == \")\" ||\n\t\t\tcommandStart(token) ||\n\t\t\tfeatureStart(token) ||\n\t\t\ttoken.type == \"EOF\"\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @param {TokensObject} tokens\n\t * @returns {(string | GrammarElement)[]}\n\t */\n\tfunction parseStringTemplate(tokens) {\n\t\t/** @type {(string | GrammarElement)[]} */\n\t\tvar returnArr = [\"\"];\n\t\tdo {\n\t\t\treturnArr.push(tokens.lastWhitespace());\n\t\t\tif (tokens.currentToken().value === \"$\") {\n\t\t\t\ttokens.consumeToken();\n\t\t\t\tvar startingBrace = tokens.matchOpToken(\"{\");\n\t\t\t\treturnArr.push(requireElement(\"expression\", tokens));\n\t\t\t\tif (startingBrace) {\n\t\t\t\t\ttokens.requireOpToken(\"}\");\n\t\t\t\t}\n\t\t\t\treturnArr.push(\"\");\n\t\t\t} else if (tokens.currentToken().value === \"\\\\\") {\n\t\t\t\ttokens.consumeToken(); // skip next\n\t\t\t\ttokens.consumeToken();\n\t\t\t} else {\n\t\t\t\tvar token = tokens.consumeToken();\n\t\t\t\treturnArr[returnArr.length - 1] += token ? token.value : \"\";\n\t\t\t}\n\t\t} while (tokens.hasMore());\n\t\treturnArr.push(tokens.lastWhitespace());\n\t\treturn returnArr;\n\t}\n\n\tfunction ensureTerminated(commandList) {\n\t\tvar implicitReturn = {\n\t\t\ttype: \"implicitReturn\",\n\t\t\top: function (context) {\n\t\t\t\tcontext.meta.returned = true;\n\t\t\t\tif (context.meta.resolve) {\n\t\t\t\t\tcontext.meta.resolve();\n\t\t\t\t}\n\t\t\t\treturn _runtime.HALT;\n\t\t\t},\n\t\t\texecute: function (ctx) {\n\t\t\t\t// do nothing\n\t\t\t},\n\t\t};\n\n\t\tvar end = commandList;\n\t\twhile (end.next) {\n\t\t\tend = end.next;\n\t\t}\n\t\tend.next = implicitReturn;\n\t}\n\n\n\t// parser API\n\treturn {\n\t\tsetParent,\n\t\trequireElement,\n\t\tparseElement,\n\t\tfeatureStart,\n\t\tcommandStart,\n\t\tcommandBoundary,\n\t\tparseAnyOf,\n\t\tparseHyperScript,\n\t\traiseParseError,\n\t\taddGrammarElement,\n\t\taddCommand,\n\t\taddFeature,\n\t\taddLeafExpression,\n\t\taddIndirectExpression,\n\t\tparseStringTemplate,\n\t\tensureTerminated,\n\t};\n})();\n\n//====================================================================\n// Runtime\n//====================================================================\n\nvar CONVERSIONS = {\n\tdynamicResolvers: /** @type DynamicConversionFunction[] */ [\n\t\tfunction(str, value){\n\t\t\tif (str === \"Fixed\") {\n\t\t\t\treturn Number(value).toFixed();\n\t\t\t} else if (str.indexOf(\"Fixed:\") === 0) {\n\t\t\t\tlet num = str.split(\":\")[1];\n\t\t\t\treturn Number(value).toFixed(parseInt(num));\n\t\t\t}\n\t\t}\n\t],\n\tString: function (val) {\n\t\tif (val.toString) {\n\t\t\treturn val.toString();\n\t\t} else {\n\t\t\treturn \"\" + val;\n\t\t}\n\t},\n\tInt: function (val) {\n\t\treturn parseInt(val);\n\t},\n\tFloat: function (val) {\n\t\treturn parseFloat(val);\n\t},\n\tNumber: function (val) {\n\t\treturn Number(val);\n\t},\n\tDate: function (val) {\n\t\treturn new Date(val);\n\t},\n\tArray: function (val) {\n\t\treturn Array.from(val);\n\t},\n\tJSON: function (val) {\n\t\treturn JSON.stringify(val);\n\t},\n\tObject: function (val) {\n\t\tif (val instanceof String) {\n\t\t\tval = val.toString();\n\t\t}\n\t\tif (typeof val === \"string\") {\n\t\t\treturn JSON.parse(val);\n\t\t} else {\n\t\t\treturn mergeObjects({}, val);\n\t\t}\n\t},\n};\n\n/********************************************\n * RUNTIME OBJECT\n ********************************************/\n\n/** @type {RuntimeObject} */\nvar _runtime = (function () {\n\t/**\n\t * @param {HTMLElement} elt\n\t * @param {string} selector\n\t * @returns boolean\n\t */\n\tfunction matchesSelector(elt, selector) {\n\t\t// noinspection JSUnresolvedVariable\n\t\tvar matchesFunction =\n\t\t\t// @ts-ignore\n\t\t\telt.matches || elt.matchesSelector || elt.msMatchesSelector || elt.mozMatchesSelector || elt.webkitMatchesSelector || elt.oMatchesSelector;\n\t\treturn matchesFunction && matchesFunction.call(elt, selector);\n\t}\n\n\t/**\n\t * @param {string} eventName\n\t * @param {Object} [detail]\n\t * @returns {Event}\n\t */\n\tfunction makeEvent(eventName, detail) {\n\t\tvar evt;\n\t\tif (globalScope.Event && typeof globalScope.Event === \"function\") {\n\t\t\tevt = new Event(eventName, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t});\n\t\t\tevt['detail'] = detail;\n\t\t} else {\n\t\t\tevt = document.createEvent(\"CustomEvent\");\n\t\t\tevt.initCustomEvent(eventName, true, true, detail);\n\t\t}\n\t\treturn evt;\n\t}\n\n\t/**\n\t * @param {Element} elt\n\t * @param {string} eventName\n\t * @param {Object} [detail]\n\t * @returns {boolean}\n\t */\n\tfunction triggerEvent(elt, eventName, detail) {\n\t\tdetail = detail || {};\n\t\tdetail[\"sentBy\"] = elt;\n\t\tvar event = makeEvent(eventName, detail);\n\t\tvar eventResult = elt.dispatchEvent(event);\n\t\treturn eventResult;\n\t}\n\n\t/**\n\t * isArrayLike returns `true` if the provided value is an array or\n\t * a NodeList (which is close enough to being an array for our purposes).\n\t *\n\t * @param {any} value\n\t * @returns {value is Array | NodeList}\n\t */\n\tfunction isArrayLike(value) {\n\t\treturn Array.isArray(value) ||\n\t\t\t(typeof NodeList !== 'undefined' && (value instanceof NodeList || value instanceof HTMLCollection));\n\t}\n\n\t/**\n\t * isIterable returns `true` if the provided value supports the\n\t * iterator protocol.\n\t *\n\t * @param {any} value\n\t * @returns {value is Iterable}\n\t */\n\tfunction isIterable(value) {\n\t\treturn typeof value === 'object'\n\t\t\t&& Symbol.iterator in value\n\t\t\t&& typeof value[Symbol.iterator] === 'function';\n\t}\n\n\t/**\n\t * shouldAutoIterate returns `true` if the provided value\n\t * should be implicitly iterated over when accessing properties,\n\t * and as the target of some commands.\n\t *\n\t * Currently, this is when the value is an {ElementCollection}\n\t * or {isArrayLike} returns true.\n\t *\n\t * @param {any} value\n\t * @returns {value is any[] | NodeList | ElementCollection}\n\t */\n\tfunction shouldAutoIterate(value) {\n\t\treturn value instanceof ElementCollection ||\n\t\t\t isArrayLike(value);\n\t}\n\n\t/**\n\t * forEach executes the provided `func` on every item in the `value` array.\n\t * if `value` is a single item (and not an array) then `func` is simply called\n\t * once. If `value` is null, then no further actions are taken.\n\t *\n\t * @template T\n\t * @param {T | Iterable<T>} value\n\t * @param {(item: T) => void} func\n\t */\n\tfunction forEach(value, func) {\n\t\tif (value == null) {\n\t\t\t// do nothing\n\t\t} else if (isIterable(value)) {\n\t\t\tfor (const nth of value) {\n\t\t\t\tfunc(nth);\n\t\t\t}\n\t\t} else if (isArrayLike(value)) {\n\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\tfunc(value[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tfunc(value);\n\t\t}\n\t}\n\n\t/**\n\t * implicitLoop executes the provided `func` on:\n\t * - every item of {value}, if {value} should be auto-iterated\n\t * (see {shouldAutoIterate})\n\t * - {value} otherwise\n\t *\n\t * @template T\n\t * @param {NodeList | T | T[]} value\n\t * @param {(item:Node | T) => void} func\n\t */\n\tfunction implicitLoop(value, func) {\n\t\tif (shouldAutoIterate(value)) {\n\t\t\tfor (const x of value) func(x);\n\t\t} else {\n\t\t\tfunc(value);\n\t\t}\n\t}\n\n\tvar ARRAY_SENTINEL = { array_sentinel: true };\n\n\tfunction linearize(args) {\n\t\tvar arr = [];\n\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\tvar arg = args[i];\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\tarr.push(ARRAY_SENTINEL);\n\t\t\t\tfor (var j = 0; j < arg.length; j++) {\n\t\t\t\t\tarr.push(arg[j]);\n\t\t\t\t}\n\t\t\t\tarr.push(ARRAY_SENTINEL);\n\t\t\t} else {\n\t\t\t\tarr.push(arg);\n\t\t\t}\n\t\t}\n\t\treturn arr;\n\t}\n\n\tfunction delinearize(values) {\n\t\tvar arr = [];\n\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\tvar value = values[i];\n\t\t\tif (value === ARRAY_SENTINEL) {\n\t\t\t\tvalue = values[++i];\n\t\t\t\tvar valueArray = [];\n\t\t\t\tarr.push(valueArray);\n\t\t\t\twhile (value !== ARRAY_SENTINEL) {\n\t\t\t\t\tvalueArray.push(value);\n\t\t\t\t\tvalue = values[++i];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tarr.push(value);\n\t\t\t}\n\t\t}\n\t\treturn arr;\n\t}\n\n\tfunction unwrapAsyncs(values) {\n\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\tvar value = values[i];\n\t\t\tif (value.asyncWrapper) {\n\t\t\t\tvalues[i] = value.value;\n\t\t\t}\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (var j = 0; j < value.length; j++) {\n\t\t\t\t\tvar valueElement = value[j];\n\t\t\t\t\tif (valueElement.asyncWrapper) {\n\t\t\t\t\t\tvalue[j] = valueElement.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar HALT = {};\n\n\t/**\n\t * @param {GrammarElement} command\n\t * @param {Context} ctx\n\t */\n\tfunction unifiedExec(command, ctx) {\n\t\twhile (true) {\n\t\t\ttry {\n\t\t\t\tvar next = unifiedEval(command, ctx);\n\t\t\t} catch (e) {\n\t\t\t\tif (ctx.meta.handlingFinally) {\n\t\t\t\t\tconsole.error(\" Exception in finally block: \", e);\n\t\t\t\t\tnext = HALT;\n\t\t\t\t} else {\n\t\t\t\t\t_runtime.registerHyperTrace(ctx, e);\n\t\t\t\t\tif (ctx.meta.errorHandler && !ctx.meta.handlingError) {\n\t\t\t\t\t\tctx.meta.handlingError = true;\n\t\t\t\t\t\tctx[ctx.meta.errorSymbol] = e;\n\t\t\t\t\t\tcommand = ctx.meta.errorHandler;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.meta.currentException = e;\n\t\t\t\t\t\tnext = HALT;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (next == null) {\n\t\t\t\tconsole.error(command, \" did not return a next element to execute! context: \", ctx);\n\t\t\t\treturn;\n\t\t\t} else if (next.then) {\n\t\t\t\tnext.then(function (resolvedNext) {\n\t\t\t\t\tunifiedExec(resolvedNext, ctx);\n\t\t\t\t}).catch(function (reason) {\n\t\t\t\t\tunifiedExec({ // Anonymous command to simply throw the exception\n\t\t\t\t\t\top: function(){\n\t\t\t\t\t\t\tthrow reason;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, ctx);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t} else if (next === HALT) {\n\t\t\t\tif (ctx.meta.finallyHandler && !ctx.meta.handlingFinally) {\n\t\t\t\t\tctx.meta.handlingFinally = true;\n\t\t\t\t\tcommand = ctx.meta.finallyHandler;\n\t\t\t\t} else {\n\t\t\t\t\tif (ctx.meta.onHalt) {\n\t\t\t\t\t\tctx.meta.onHalt();\n\t\t\t\t\t}\n\t\t\t\t\tif (ctx.meta.currentException) {\n\t\t\t\t\t\tif (ctx.meta.reject) {\n\t\t\t\t\t\t\tctx.meta.reject(ctx.meta.currentException);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow ctx.meta.currentException;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcommand = next; // move to the next command\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* @param {*} parseElement\n\t* @param {Context} ctx\n\t* @returns {*}\n\t*/\n\tfunction unifiedEval(parseElement, ctx) {\n\t\t/** @type any[] */\n\t\tvar args = [ctx];\n\t\tvar async = false;\n\t\tvar wrappedAsyncs = false;\n\n\t\tif (parseElement.args) {\n\t\t\tfor (var i = 0; i < parseElement.args.length; i++) {\n\t\t\t\tvar argument = parseElement.args[i];\n\t\t\t\tif (argument == null) {\n\t\t\t\t\targs.push(null);\n\t\t\t\t} else if (Array.isArray(argument)) {\n\t\t\t\t\tvar arr = [];\n\t\t\t\t\tfor (var j = 0; j < argument.length; j++) {\n\t\t\t\t\t\tvar element = argument[j];\n\t\t\t\t\t\tvar value = element ? element.evaluate(ctx) : null; // OK\n\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\tif (value.then) {\n\t\t\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\t\t} else if (value.asyncWrapper) {\n\t\t\t\t\t\t\t\twrappedAsyncs = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tarr.push(value);\n\t\t\t\t\t}\n\t\t\t\t\targs.push(arr);\n\t\t\t\t} else if (argument.evaluate) {\n\t\t\t\t\tvar value = argument.evaluate(ctx); // OK\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tif (value.then) {\n\t\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\t} else if (value.asyncWrapper) {\n\t\t\t\t\t\t\twrappedAsyncs = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\targs.push(value);\n\t\t\t\t} else {\n\t\t\t\t\targs.push(argument);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (async) {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\tvar linearized = linearize(args);\n\t\t\t\tPromise.all(linearized)\n\t\t\t\t\t.then(function (values) {\n\t\t\t\t\t\tvalues = delinearize(values);\n\t\t\t\t\t\tif (wrappedAsyncs) {\n\t\t\t\t\t\t\tunwrapAsyncs(values);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvar apply = parseElement.op.apply(parseElement, values);\n\t\t\t\t\t\t\tresolve(apply);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(function (reason) {\n\t\t\t\t\t\treject(reason);\n\t\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tif (wrappedAsyncs) {\n\t\t\t\tunwrapAsyncs(args);\n\t\t\t}\n\t\t\treturn parseElement.op.apply(parseElement, args);\n\t\t}\n\t}\n\n\tlet _scriptAttrs = null;\n\n\t/**\n\t* getAttributes returns the attribute name(s) to use when\n\t* locating hyperscript scripts in a DOM element. If no value\n\t* has been configured, it defaults to _hyperscript.config.attributes\n\t* @returns string[]\n\t*/\n\tfunction getScriptAttributes() {\n\t\tif (_scriptAttrs == null) {\n\t\t\t_scriptAttrs = _hyperscript.config.attributes.replace(/ /g, \"\").split(\",\");\n\t\t}\n\t\treturn _scriptAttrs;\n\t}\n\n\t/**\n\t* @param {Element} elt\n\t* @returns {string | null}\n\t*/\n\tfunction getScript(elt) {\n\t\tfor (var i = 0; i < getScriptAttributes().length; i++) {\n\t\t\tvar scriptAttribute = getScriptAttributes()[i];\n\t\t\tif (elt.hasAttribute && elt.hasAttribute(scriptAttribute)) {\n\t\t\t\treturn elt.getAttribute(scriptAttribute);\n\t\t\t}\n\t\t}\n\t\tif (elt instanceof HTMLScriptElement && elt.type === \"text/hyperscript\") {\n\t\t\treturn elt.innerText;\n\t\t}\n\t\treturn null;\n\t}\n\n\tvar hyperscriptFeaturesMap = new WeakMap\n\n\t/**\n\t* @param {*} elt\n\t* @returns {Object}\n\t*/\n\tfunction getHyperscriptFeatures(elt) {\n\t\tvar hyperscriptFeatures = hyperscriptFeaturesMap.get(elt);\n\t\tif (typeof hyperscriptFeatures === 'undefined') {\n\t\t\thyperscriptFeaturesMap.set(elt, hyperscriptFeatures = {});\n\t\t}\n\t\treturn hyperscriptFeatures;\n\t}\n\n\t/**\n\t* @param {Object} owner\n\t* @param {Context} ctx\n\t*/\n\tfunction addFeatures(owner, ctx) {\n\t\tif (owner) {\n\t\t\tmergeObjects(ctx, getHyperscriptFeatures(owner));\n\t\t\taddFeatures(owner.parentElement, ctx);\n\t\t}\n\t}\n\n\t/**\n\t* @param {*} owner\n\t* @param {*} feature\n\t* @param {*} hyperscriptTarget\n\t* @param {*} event\n\t* @returns {Context}\n\t*/\n\tfunction makeContext(owner, feature, hyperscriptTarget, event) {\n\t\t/** @type {Context} */\n\t\tvar ctx = {\n\t\t\tmeta: {\n\t\t\t\tparser: _parser,\n\t\t\t\tlexer: _lexer,\n\t\t\t\truntime: _runtime,\n\t\t\t\towner: owner,\n\t\t\t\tfeature: feature,\n\t\t\t\titerators: {},\n\t\t\t},\n\t\t\tme: hyperscriptTarget,\n\t\t\tevent: event,\n\t\t\ttarget: event ? event.target : null,\n\t\t\tdetail: event ? event.detail : null,\n\t\t\tbody: \"document\" in globalScope ? document.body : null,\n\t\t};\n\t\tctx.meta.ctx = ctx;\n\t\taddFeatures(owner, ctx);\n\t\treturn ctx;\n\t}\n\n\t/**\n\t* @returns string\n\t*/\n\tfunction getScriptSelector() {\n\t\treturn getScriptAttributes()\n\t\t\t.map(function (attribute) {\n\t\t\t\treturn \"[\" + attribute + \"]\";\n\t\t\t})\n\t\t\t.join(\", \");\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @param {string} type\n\t* @returns {any}\n\t*/\n\tfunction convertValue(value, type) {\n\t\tvar dynamicResolvers = CONVERSIONS.dynamicResolvers;\n\t\tfor (var i = 0; i < dynamicResolvers.length; i++) {\n\t\t\tvar dynamicResolver = dynamicResolvers[i];\n\t\t\tvar converted = dynamicResolver(type, value);\n\t\t\tif (converted !== undefined) {\n\t\t\t\treturn converted;\n\t\t\t}\n\t\t}\n\n\t\tif (value == null) {\n\t\t\treturn null;\n\t\t}\n\t\tvar converter = CONVERSIONS[type];\n\t\tif (converter) {\n\t\t\treturn converter(value);\n\t\t}\n\n\t\tthrow \"Unknown conversion : \" + type;\n\t}\n\n\t// TODO: There do not seem to be any references to this function.\n\t// Is it still in use, or can it be removed?\n\tfunction isType(o, type) {\n\t\treturn Object.prototype.toString.call(o) === \"[object \" + type + \"]\";\n\t}\n\n\t/**\n\t* @param {string} src\n\t* @returns {GrammarElement}\n\t*/\n\tfunction parse(src) {\n\t\tvar tokens = _lexer.tokenize(src);\n\t\tif (_parser.commandStart(tokens.currentToken())) {\n\t\t\tvar commandList = _parser.requireElement(\"commandList\", tokens);\n\t\t\tvar last = commandList;\n\t\t\twhile (last.next) {\n\t\t\t\tlast = last.next;\n\t\t\t}\n\t\t\tlast.next = {\n\t\t\t\top: function () {\n\t\t\t\t\treturn HALT;\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn commandList;\n\t\t} else if (_parser.featureStart(tokens.currentToken())) {\n\t\t\tvar hyperscript = _parser.requireElement(\"hyperscript\", tokens);\n\t\t\treturn hyperscript;\n\t\t} else {\n\t\t\tvar expression = _parser.requireElement(\"expression\", tokens);\n\t\t\treturn expression;\n\t\t}\n\t}\n\n\tfunction evaluateNoPromise(elt, ctx) {\n\t\tlet result = elt.evaluate(ctx);\n\t\tif (result.next) {\n\t\t\tthrow new Error(elt.sourceFor() + \" returned a Promise in a context that they are not allowed.\");\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t* @param {string} src\n\t* @param {Context} [ctx]\n\t* @param {Object} [args]\n\t* @returns {any}\n\t*/\n\tfunction evaluate(src, ctx, args) {\n\t\tclass HyperscriptModule extends EventTarget {\n\t\t\tconstructor(mod) {\n\t\t\t\tsuper();\n\t\t\t\tthis.module = mod;\n\t\t\t}\n\t\t\ttoString() {\n\t\t\t\treturn this.module.id;\n\t\t\t}\n\t\t}\n\n\t\tvar body = 'document' in globalScope\n\t\t\t? globalScope.document.body\n\t\t\t: new HyperscriptModule(args && args.module);\n\t\tctx = mergeObjects(makeContext(body, null, body, null), ctx || {});\n\t\tvar element = parse(src);\n\t\tif (element.execute) {\n\t\t\telement.execute(ctx);\n\t\t\treturn ctx.result;\n\t\t} else if (element.apply) {\n\t\t\telement.apply(body, body, args);\n\t\t\treturn getHyperscriptFeatures(body);\n\t\t} else {\n\t\t\treturn element.evaluate(ctx);\n\t\t}\n\n\t\tfunction makeModule() {\n\t\t\treturn {}\n\t\t}\n\t}\n\n\t/**\n\t* @param {HTMLElement} elt\n\t*/\n\tfunction processNode(elt) {\n\t\tvar selector = _runtime.getScriptSelector();\n\t\tif (matchesSelector(elt, selector)) {\n\t\t\tinitElement(elt, elt);\n\t\t}\n\t\tif (elt instanceof HTMLScriptElement && elt.type === \"text/hyperscript\") {\n\t\t\tinitElement(elt, document.body);\n\t\t}\n\t\tif (elt.querySelectorAll) {\n\t\t\tforEach(elt.querySelectorAll(selector + \", [type='text/hyperscript']\"), function (elt) {\n\t\t\t\tinitElement(elt, elt instanceof HTMLScriptElement && elt.type === \"text/hyperscript\" ? document.body : elt);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t* @param {Element} elt\n\t* @param {Element} [target]\n\t*/\n\tfunction initElement(elt, target) {\n\t\tif (elt.closest && elt.closest(_hyperscript.config.disableSelector)) {\n\t\t\treturn;\n\t\t}\n\t\tvar internalData = getInternalData(elt);\n\t\tif (!internalData.initialized) {\n\t\t\tvar src = getScript(elt);\n\t\t\tif (src) {\n\t\t\t\ttry {\n\t\t\t\t\tinternalData.initialized = true;\n\t\t\t\t\tinternalData.script = src;\n\t\t\t\t\tvar tokens = _lexer.tokenize(src);\n\t\t\t\t\tvar hyperScript = _parser.parseHyperScript(tokens);\n\t\t\t\t\tif (!hyperScript) return;\n\t\t\t\t\thyperScript.apply(target || elt, elt);\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\ttriggerEvent(target || elt, \"load\", {\n\t\t\t\t\t\t\thyperscript: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 1);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_runtime.triggerEvent(elt, \"exception\", {\n\t\t\t\t\t\terror: e,\n\t\t\t\t\t});\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\"hyperscript errors were found on the following element:\",\n\t\t\t\t\t\telt,\n\t\t\t\t\t\t\"\\n\\n\",\n\t\t\t\t\t\te.message,\n\t\t\t\t\t\te.stack\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar internalDataMap = new WeakMap\n\n\t/**\n\t* @param {Element} elt\n\t* @returns {Object}\n\t*/\n\tfunction getInternalData(elt) {\n\t\tvar internalData = internalDataMap.get(elt);\n\t\tif (typeof internalData === 'undefined') {\n\t\t\tinternalDataMap.set(elt, internalData = {});\n\t\t}\n\t\treturn internalData;\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @param {string} typeString\n\t* @param {boolean} [nullOk]\n\t* @returns {boolean}\n\t*/\n\tfunction typeCheck(value, typeString, nullOk) {\n\t\tif (value == null && nullOk) {\n\t\t\treturn true;\n\t\t}\n\t\tvar typeName = Object.prototype.toString.call(value).slice(8, -1);\n\t\treturn typeName === typeString;\n\t}\n\n\tfunction getElementScope(context) {\n\t\tvar elt = context.meta && context.meta.owner;\n\t\tif (elt) {\n\t\t\tvar internalData = getInternalData(elt);\n\t\t\tvar scopeName = \"elementScope\";\n\t\t\tif (context.meta.feature && context.meta.feature.behavior) {\n\t\t\t\tscopeName = context.meta.feature.behavior + \"Scope\";\n\t\t\t}\n\t\t\tvar elementScope = getOrInitObject(internalData, scopeName);\n\t\t\treturn elementScope;\n\t\t} else {\n\t\t\treturn {}; // no element, return empty scope\n\t\t}\n\t}\n\n\t/**\n\t* @param {string} str\n\t* @param {Context} context\n\t* @returns {any}\n\t*/\n\tfunction resolveSymbol(str, context, type) {\n\t\tif (str === \"me\" || str === \"my\" || str === \"I\") {\n\t\t\treturn context[\"me\"];\n\t\t}\n\t\tif (str === \"it\" || str === \"its\") {\n\t\t\treturn context[\"result\"];\n\t\t}\n\t\tif (str === \"you\" || str === \"your\" || str === \"yourself\") {\n\t\t\treturn context[\"beingTold\"];\n\t\t} else {\n\t\t\tif (type === \"global\") {\n\t\t\t\treturn globalScope[str];\n\t\t\t} else if (type === \"element\") {\n\t\t\t\tvar elementScope = getElementScope(context);\n\t\t\t\treturn elementScope[str];\n\t\t\t} else if (type === \"local\") {\n\t\t\t\treturn context[str];\n\t\t\t} else {\n\t\t\t\t// meta scope (used for event conditionals)\n\t\t\t\tif (context.meta && context.meta.context) {\n\t\t\t\t\tvar fromMetaContext = context.meta.context[str];\n\t\t\t\t\tif (typeof fromMetaContext !== \"undefined\") {\n\t\t\t\t\t\treturn fromMetaContext;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// local scope\n\t\t\t\tvar fromContext = context[str];\n\t\t\t\tif (typeof fromContext !== \"undefined\") {\n\t\t\t\t\treturn fromContext;\n\t\t\t\t} else {\n\t\t\t\t\t// element scope\n\t\t\t\t\tvar elementScope = getElementScope(context);\n\t\t\t\t\tfromContext = elementScope[str];\n\t\t\t\t\tif (typeof fromContext !== \"undefined\") {\n\t\t\t\t\t\treturn fromContext;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// global scope\n\t\t\t\t\t\treturn globalScope[str];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setSymbol(str, context, type, value) {\n\t\tif (type === \"global\") {\n\t\t\tglobalScope[str] = value;\n\t\t} else if (type === \"element\") {\n\t\t\tvar elementScope = getElementScope(context);\n\t\t\telementScope[str] = value;\n\t\t} else if (type === \"local\") {\n\t\t\tcontext[str] = value;\n\t\t} else {\n\t\t\t// local scope\n\t\t\tvar fromContext = context[str];\n\t\t\tif (typeof fromContext !== \"undefined\") {\n\t\t\t\tcontext[str] = value;\n\t\t\t} else {\n\t\t\t\t// element scope\n\t\t\t\tvar elementScope = getElementScope(context);\n\t\t\t\tfromContext = elementScope[str];\n\t\t\t\tif (typeof fromContext !== \"undefined\") {\n\t\t\t\t\telementScope[str] = value;\n\t\t\t\t} else {\n\t\t\t\t\tcontext[str] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* @param {GrammarElement} command\n\t* @param {Context} context\n\t* @returns {undefined | GrammarElement}\n\t*/\n\tfunction findNext(command, context) {\n\t\tif (command) {\n\t\t\tif (command.resolveNext) {\n\t\t\t\treturn command.resolveNext(context);\n\t\t\t} else if (command.next) {\n\t\t\t\treturn command.next;\n\t\t\t} else {\n\t\t\t\treturn findNext(command.parent, context);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* @param {Object<string,any>} root\n\t* @param {string} property\n\t* @param {boolean} attribute\n\t* @returns {any}\n\t*/\n\tfunction resolveProperty(root, property, attribute) {\n\t\tif (root != null) {\n\t\t\tvar val = attribute && root.getAttribute ? root.getAttribute(property) : root[property];\n\t\t\tif (typeof val !== \"undefined\") {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif (shouldAutoIterate(root)) {\n\t\t\t\t// flat map\n\t\t\t\tvar result = [];\n\t\t\t\tfor (var component of root) {\n\t\t\t\t\tvar componentValue = attribute ? component.getAttribute(property) : component[property];\n\t\t\t\t\tif (componentValue) {\n\t\t\t\t\t\tresult.push(componentValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* @param {Element} elt\n\t* @param {string[]} nameSpace\n\t* @param {string} name\n\t* @param {any} value\n\t*/\n\tfunction assignToNamespace(elt, nameSpace, name, value) {\n\t\tlet root\n\t\tif (typeof document !== \"undefined\" && elt === document.body) {\n\t\t\troot = globalScope;\n\t\t} else {\n\t\t\troot = getHyperscriptFeatures(elt);\n\t\t}\n\t\twhile (nameSpace.length > 0) {\n\t\t\tvar propertyName = nameSpace.shift();\n\t\t\tvar newRoot = root[propertyName];\n\t\t\tif (newRoot == null) {\n\t\t\t\tnewRoot = {};\n\t\t\t\troot[propertyName] = newRoot;\n\t\t\t}\n\t\t\troot = newRoot;\n\t\t}\n\n\t\troot[name] = value;\n\t}\n\n\tfunction getHyperTrace(ctx, thrown) {\n\t\tvar trace = [];\n\t\tvar root = ctx;\n\t\twhile (root.meta.caller) {\n\t\t\troot = root.meta.caller;\n\t\t}\n\t\tif (root.meta.traceMap) {\n\t\t\treturn root.meta.traceMap.get(thrown, trace);\n\t\t}\n\t}\n\n\tfunction registerHyperTrace(ctx, thrown) {\n\t\tvar trace = [];\n\t\tvar root = null;\n\t\twhile (ctx != null) {\n\t\t\ttrace.push(ctx);\n\t\t\troot = ctx;\n\t\t\tctx = ctx.meta.caller;\n\t\t}\n\t\tif (root.meta.traceMap == null) {\n\t\t\troot.meta.traceMap = new Map(); // TODO - WeakMap?\n\t\t}\n\t\tif (!root.meta.traceMap.get(thrown)) {\n\t\t\tvar traceEntry = {\n\t\t\t\ttrace: trace,\n\t\t\t\tprint: function (logger) {\n\t\t\t\t\tlogger = logger || console.error;\n\t\t\t\t\tlogger(\"hypertrace /// \");\n\t\t\t\t\tvar maxLen = 0;\n\t\t\t\t\tfor (var i = 0; i < trace.length; i++) {\n\t\t\t\t\t\tmaxLen = Math.max(maxLen, trace[i].meta.feature.displayName.length);\n\t\t\t\t\t}\n\t\t\t\t\tfor (var i = 0; i < trace.length; i++) {\n\t\t\t\t\t\tvar traceElt = trace[i];\n\t\t\t\t\t\tlogger(\n\t\t\t\t\t\t\t\" ->\",\n\t\t\t\t\t\t\ttraceElt.meta.feature.displayName.padEnd(maxLen + 2),\n\t\t\t\t\t\t\t\"-\",\n\t\t\t\t\t\t\ttraceElt.meta.owner\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t\troot.meta.traceMap.set(thrown, traceEntry);\n\t\t}\n\t}\n\n\t/**\n\t* @param {string} str\n\t* @returns {string}\n\t*/\n\tfunction escapeSelector(str) {\n\t\treturn str.replace(/:/g, function (str) {\n\t\t\treturn \"\\\\\" + str;\n\t\t});\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @param {*} elt\n\t*/\n\tfunction nullCheck(value, elt) {\n\t\tif (value == null) {\n\t\t\tthrow new Error(\"'\" + elt.sourceFor() + \"' is null\");\n\t\t}\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @returns {boolean}\n\t*/\n\tfunction isEmpty(value) {\n\t\treturn value == undefined || value.length === 0;\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @returns {boolean}\n\t*/\n\tfunction doesExist(value) {\n\t\tif(value == null){\n\t\t\treturn false;\n\t\t}\n\t\tif (shouldAutoIterate(value)) {\n\t\t\tfor (const elt of value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t* @param {Node} node\n\t* @returns {Document|ShadowRoot}\n\t*/\n\tfunction getRootNode(node) {\n\t\tif (node && node instanceof Node) {\n\t\t\tvar rv = node.getRootNode();\n\t\t\tif (rv instanceof Document || rv instanceof ShadowRoot) return rv;\n\t\t}\n\t\treturn document;\n\t}\n\n\tfunction getEventQueueFor(elt, onFeature) {\n\t\tlet internalData = getInternalData(elt);\n\t\tvar eventQueuesForElt = internalData.eventQueues;\n\t\tif (eventQueuesForElt == null) {\n\t\t\teventQueuesForElt = new Map();\n\t\t\tinternalData.eventQueues = eventQueuesForElt;\n\t\t}\n\t\tvar eventQueueForFeature = eventQueuesForElt.get(onFeature);\n\t\tif (eventQueueForFeature == null) {\n\t\t\teventQueueForFeature = {queue:[], executing:false};\n\t\t\teventQueuesForElt.set(onFeature, eventQueueForFeature);\n\t\t}\n\t\treturn eventQueueForFeature;\n\t}\n\n\t/** @type string | null */\n\t// @ts-ignore\n\tvar hyperscriptUrl = \"document\" in globalScope ? import.meta.url : null;\n\n\t/** @type {RuntimeObject} */\n\treturn {\n\t\ttypeCheck,\n\t\tforEach,\n\t\timplicitLoop,\n\t\ttriggerEvent,\n\t\tmatchesSelector,\n\t\tgetScript,\n\t\tprocessNode,\n\t\tevaluate,\n\t\tevaluateNoPromise,\n\t\tparse,\n\t\tgetScriptSelector,\n\t\tresolveSymbol,\n\t\tsetSymbol,\n\t\tmakeContext,\n\t\tfindNext,\n\t\tunifiedEval,\n\t\tconvertValue,\n\t\tunifiedExec,\n\t\tresolveProperty,\n\t\tassignToNamespace,\n\t\tregisterHyperTrace,\n\t\tgetHyperTrace,\n\t\tgetInternalData,\n\t\tgetHyperscriptFeatures,\n\t\tescapeSelector,\n\t\tnullCheck,\n\t\tisEmpty,\n\t\tdoesExist,\n\t\tgetRootNode,\n\t\tgetEventQueueFor,\n\t\thyperscriptUrl,\n\t\tHALT,\n\t};\n})();\n\n//====================================================================\n// Grammar\n//====================================================================\n{\n\t_parser.addLeafExpression(\"parenthesized\", function (parser, _runtime, tokens) {\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tvar follows = tokens.clearFollow();\n\t\t\ttry {\n\t\t\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\t\t} finally {\n\t\t\t\ttokens.restoreFollow(follows);\n\t\t\t}\n\t\t\ttokens.requireOpToken(\")\");\n\t\t\treturn expr;\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"string\", function (parser, runtime, tokens) {\n\t\tvar stringToken = tokens.matchTokenType(\"STRING\");\n\t\tif (!stringToken) return;\n\t\tvar rawValue = stringToken.value;\n\t\t/** @type {any[]} */\n\t\tvar args;\n\t\tif (stringToken.template) {\n\t\t\tvar innerTokens = _lexer.tokenize(rawValue, true);\n\t\t\targs = parser.parseStringTemplate(innerTokens);\n\t\t} else {\n\t\t\targs = [];\n\t\t}\n\t\treturn {\n\t\t\ttype: \"string\",\n\t\t\ttoken: stringToken,\n\t\t\targs: args,\n\t\t\top: function (context) {\n\t\t\t\tvar returnStr = \"\";\n\t\t\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\t\tvar val = arguments[i];\n\t\t\t\t\tif (val !== undefined) {\n\t\t\t\t\t\treturnStr += val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn returnStr;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\tif (args.length === 0) {\n\t\t\t\t\treturn rawValue;\n\t\t\t\t} else {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"nakedString\", function (parser, runtime, tokens) {\n\t\tif (tokens.hasMore()) {\n\t\t\tvar tokenArr = tokens.consumeUntilWhitespace();\n\t\t\ttokens.matchTokenType(\"WHITESPACE\");\n\t\t\treturn {\n\t\t\t\ttype: \"nakedString\",\n\t\t\t\ttokens: tokenArr,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn tokenArr\n\t\t\t\t\t\t.map(function (t) {\n\t\t\t\t\t\t\treturn t.value;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\");\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"number\", function (parser, runtime, tokens) {\n\t\tvar number = tokens.matchTokenType(\"NUMBER\");\n\t\tif (!number) return;\n\t\tvar numberToken = number;\n\t\tvar value = parseFloat(number.value);\n\t\treturn {\n\t\t\ttype: \"number\",\n\t\t\tvalue: value,\n\t\t\tnumberToken: numberToken,\n\t\t\tevaluate: function () {\n\t\t\t\treturn value;\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"idRef\", function (parser, runtime, tokens) {\n\t\tvar elementId = tokens.matchTokenType(\"ID_REF\");\n\t\tif (!elementId) return;\n\t\t// TODO - unify these two expression types\n\t\tif (elementId.template) {\n\t\t\tvar templateValue = elementId.value.substr(2, elementId.value.length - 2);\n\t\t\tvar innerTokens = _lexer.tokenize(templateValue);\n\t\t\tvar innerExpression = parser.requireElement(\"expression\", innerTokens);\n\t\t\treturn {\n\t\t\t\ttype: \"idRefTemplate\",\n\t\t\t\targs: [innerExpression],\n\t\t\t\top: function (context, arg) {\n\t\t\t\t\treturn runtime.getRootNode(context.me).getElementById(arg);\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tconst value = elementId.value.substr(1);\n\t\t\treturn {\n\t\t\t\ttype: \"idRef\",\n\t\t\t\tcss: elementId.value,\n\t\t\t\tvalue: value,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\truntime.getRootNode(context.me).getElementById(value)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"classRef\", function (parser, runtime, tokens) {\n\t\tvar classRef = tokens.matchTokenType(\"CLASS_REF\");\n\n\t\tif (!classRef) return;\n\n\t\t// TODO - unify these two expression types\n\t\tif (classRef.template) {\n\t\t\tvar templateValue = classRef.value.substr(2, classRef.value.length - 2);\n\t\t\tvar innerTokens = _lexer.tokenize(templateValue);\n\t\t\tvar innerExpression = parser.requireElement(\"expression\", innerTokens);\n\t\t\treturn {\n\t\t\t\ttype: \"classRefTemplate\",\n\t\t\t\targs: [innerExpression],\n\t\t\t\top: function (context, arg) {\n\t\t\t\t\treturn new ElementCollection(\".\" + arg, context.me, true)\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tconst css = classRef.value;\n\t\t\treturn {\n\t\t\t\ttype: \"classRef\",\n\t\t\t\tcss: css,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn new ElementCollection(css, context.me, true)\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\tclass TemplatedQueryElementCollection extends ElementCollection {\n\t\tconstructor(css, relativeToElement, templateParts) {\n\t\t\tsuper(css, relativeToElement);\n\t\t\tthis.templateParts = templateParts;\n\t\t\tthis.elements = templateParts.filter(elt => elt instanceof Element);\n\t\t}\n\n\t\tget css() {\n\t\t\tlet rv = \"\", i = 0\n\t\t\tfor (const val of this.templateParts) {\n\t\t\t\tif (val instanceof Element) {\n\t\t\t\t\trv += \"[data-hs-query-id='\" + i++ + \"']\";\n\t\t\t\t} else rv += val;\n\t\t\t}\n\t\t\treturn rv;\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\tthis.elements.forEach((el, i) => el.dataset.hsQueryId = i);\n\t\t\tconst rv = super[Symbol.iterator]();\n\t\t\tthis.elements.forEach(el => el.removeAttribute('data-hs-query-id'));\n\t\t\treturn rv;\n\t\t}\n\t}\n\n\t_parser.addLeafExpression(\"queryRef\", function (parser, runtime, tokens) {\n\t\tvar queryStart = tokens.matchOpToken(\"<\");\n\t\tif (!queryStart) return;\n\t\tvar queryTokens = tokens.consumeUntil(\"/\");\n\t\ttokens.requireOpToken(\"/\");\n\t\ttokens.requireOpToken(\">\");\n\t\tvar queryValue = queryTokens\n\t\t\t.map(function (t) {\n\t\t\t\tif (t.type === \"STRING\") {\n\t\t\t\t\treturn '\"' + t.value + '\"';\n\t\t\t\t} else {\n\t\t\t\t\treturn t.value;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.join(\"\");\n\n\t\tif (queryValue.indexOf(\"$\") >= 0) {\n\t\t\tvar template = true;\n\t\t\tvar innerTokens = _lexer.tokenize(queryValue, true);\n\t\t\tvar args = parser.parseStringTemplate(innerTokens);\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"queryRef\",\n\t\t\tcss: queryValue,\n\t\t\targs: args,\n\t\t\top: function (context, ...args) {\n\t\t\t\tif (template) {\n\t\t\t\t\treturn new TemplatedQueryElementCollection(queryValue, context.me, args)\n\t\t\t\t} else {\n\t\t\t\t\treturn new ElementCollection(queryValue, context.me)\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"attributeRef\", function (parser, runtime, tokens) {\n\t\tvar attributeRef = tokens.matchTokenType(\"ATTRIBUTE_REF\");\n\t\tif (!attributeRef) return;\n\t\tvar outerVal = attributeRef.value;\n\t\tif (outerVal.indexOf(\"[\") === 0) {\n\t\t\tvar innerValue = outerVal.substring(2, outerVal.length - 1);\n\t\t} else {\n\t\t\tvar innerValue = outerVal.substring(1);\n\t\t}\n\t\tvar css = \"[\" + innerValue + \"]\";\n\t\tvar split = innerValue.split(\"=\");\n\t\tvar name = split[0];\n\t\tvar value = split[1];\n\t\tif (value) {\n\t\t\t// strip quotes\n\t\t\tif (value.indexOf('\"') === 0) {\n\t\t\t\tvalue = value.substring(1, value.length - 1);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: \"attributeRef\",\n\t\t\tname: name,\n\t\t\tcss: css,\n\t\t\tvalue: value,\n\t\t\top: function (context) {\n\t\t\t\tvar target = context.beingTold || context.me;\n\t\t\t\tif (target) {\n\t\t\t\t\treturn target.getAttribute(name);\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"objectKey\", function (parser, runtime, tokens) {\n\t\tvar token;\n\t\tif ((token = tokens.matchTokenType(\"STRING\"))) {\n\t\t\treturn {\n\t\t\t\ttype: \"objectKey\",\n\t\t\t\tkey: token.value,\n\t\t\t\tevaluate: function () {\n\t\t\t\t\treturn token.value;\n\t\t\t\t},\n\t\t\t};\n\t\t} else if (tokens.matchOpToken(\"[\")) {\n\t\t\tvar expr = parser.parseElement(\"expression\", tokens);\n\t\t\ttokens.requireOpToken(\"]\");\n\t\t\treturn {\n\t\t\t\ttype: \"objectKey\",\n\t\t\t\texpr: expr,\n\t\t\t\targs: [expr],\n\t\t\t\top: function (ctx, expr) {\n\t\t\t\t\treturn expr;\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tvar key = \"\";\n\t\t\tdo {\n\t\t\t\ttoken = tokens.matchTokenType(\"IDENTIFIER\") || tokens.matchOpToken(\"-\");\n\t\t\t\tif (token) key += token.value;\n\t\t\t} while (token);\n\t\t\treturn {\n\t\t\t\ttype: \"objectKey\",\n\t\t\t\tkey: key,\n\t\t\t\tevaluate: function () {\n\t\t\t\t\treturn key;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"objectLiteral\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"{\")) return;\n\t\tvar keyExpressions = [];\n\t\tvar valueExpressions = [];\n\t\tif (!tokens.matchOpToken(\"}\")) {\n\t\t\tdo {\n\t\t\t\tvar name = parser.requireElement(\"objectKey\", tokens);\n\t\t\t\ttokens.requireOpToken(\":\");\n\t\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\t\t\tvalueExpressions.push(value);\n\t\t\t\tkeyExpressions.push(name);\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\"}\");\n\t\t}\n\t\treturn {\n\t\t\ttype: \"objectLiteral\",\n\t\t\targs: [keyExpressions, valueExpressions],\n\t\t\top: function (context, keys, values) {\n\t\t\t\tvar returnVal = {};\n\t\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\t\treturnVal[keys[i]] = values[i];\n\t\t\t\t}\n\t\t\t\treturn returnVal;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"nakedNamedArgumentList\", function (parser, runtime, tokens) {\n\t\tvar fields = [];\n\t\tvar valueExpressions = [];\n\t\tif (tokens.currentToken().type === \"IDENTIFIER\") {\n\t\t\tdo {\n\t\t\t\tvar name = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t\ttokens.requireOpToken(\":\");\n\t\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\t\t\tvalueExpressions.push(value);\n\t\t\t\tfields.push({ name: name, value: value });\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t}\n\t\treturn {\n\t\t\ttype: \"namedArgumentList\",\n\t\t\tfields: fields,\n\t\t\targs: [valueExpressions],\n\t\t\top: function (context, values) {\n\t\t\t\tvar returnVal = { _namedArgList_: true };\n\t\t\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\t\t\tvar field = fields[i];\n\t\t\t\t\treturnVal[field.name.value] = values[i];\n\t\t\t\t}\n\t\t\t\treturn returnVal;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"namedArgumentList\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"(\")) return;\n\t\tvar elt = parser.requireElement(\"nakedNamedArgumentList\", tokens);\n\t\ttokens.requireOpToken(\")\");\n\t\treturn elt;\n\t});\n\n\t_parser.addGrammarElement(\"symbol\", function (parser, runtime, tokens) {\n\t\t/** @scope {SymbolScope} */\n\t\tvar scope = \"default\";\n\t\tif (tokens.matchToken(\"global\")) {\n\t\t\tscope = \"global\";\n\t\t} else if (tokens.matchToken(\"element\") || tokens.matchToken(\"module\")) {\n\t\t\tscope = \"element\";\n\t\t\t// optional possessive\n\t\t\tif (tokens.matchOpToken(\"'\")) {\n\t\t\t\ttokens.requireToken(\"s\");\n\t\t\t}\n\t\t} else if (tokens.matchToken(\"local\")) {\n\t\t\tscope = \"local\";\n\t\t}\n\n\t\t// TODO better look ahead here\n\t\tlet eltPrefix = tokens.matchOpToken(\":\");\n\t\tlet identifier = tokens.matchTokenType(\"IDENTIFIER\");\n\t\tif (identifier) {\n\t\t\tvar name = identifier.value;\n\t\t\tif (eltPrefix) {\n\t\t\t\tname = \":\" + name;\n\t\t\t}\n\t\t\tif (scope === \"default\") {\n\t\t\t\tif (name.indexOf(\"$\") === 0) {\n\t\t\t\t\tscope = \"global\";\n\t\t\t\t}\n\t\t\t\tif (name.indexOf(\":\") === 0) {\n\t\t\t\t\tscope = \"element\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"symbol\",\n\t\t\t\ttoken: identifier,\n\t\t\t\tscope: scope,\n\t\t\t\tname: name,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.resolveSymbol(name, context, scope);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"implicitMeTarget\", function (parser, runtime, tokens) {\n\t\treturn {\n\t\t\ttype: \"implicitMeTarget\",\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn context.beingTold || context.me;\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"boolean\", function (parser, runtime, tokens) {\n\t\tvar booleanLiteral = tokens.matchToken(\"true\") || tokens.matchToken(\"false\");\n\t\tif (!booleanLiteral) return;\n\t\tconst value = booleanLiteral.value === \"true\";\n\t\treturn {\n\t\t\ttype: \"boolean\",\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn value;\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"null\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"null\")) {\n\t\t\treturn {\n\t\t\t\ttype: \"null\",\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"arrayLiteral\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"[\")) return;\n\t\tvar values = [];\n\t\tif (!tokens.matchOpToken(\"]\")) {\n\t\t\tdo {\n\t\t\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\t\t\tvalues.push(expr);\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\"]\");\n\t\t}\n\t\treturn {\n\t\t\ttype: \"arrayLiteral\",\n\t\t\tvalues: values,\n\t\t\targs: [values],\n\t\t\top: function (context, values) {\n\t\t\t\treturn values;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"blockLiteral\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"\\\\\")) return;\n\t\tvar args = [];\n\t\tvar arg1 = tokens.matchTokenType(\"IDENTIFIER\");\n\t\tif (arg1) {\n\t\t\targs.push(arg1);\n\t\t\twhile (tokens.matchOpToken(\",\")) {\n\t\t\t\targs.push(tokens.requireTokenType(\"IDENTIFIER\"));\n\t\t\t}\n\t\t}\n\t\t// TODO compound op token\n\t\ttokens.requireOpToken(\"-\");\n\t\ttokens.requireOpToken(\">\");\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\treturn {\n\t\t\ttype: \"blockLiteral\",\n\t\t\targs: args,\n\t\t\texpr: expr,\n\t\t\tevaluate: function (ctx) {\n\t\t\t\tvar returnFunc = function () {\n\t\t\t\t\t//TODO - push scope\n\t\t\t\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\t\t\t\tctx[args[i].value] = arguments[i];\n\t\t\t\t\t}\n\t\t\t\t\treturn expr.evaluate(ctx); //OK\n\t\t\t\t};\n\t\t\t\treturn returnFunc;\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"timeExpression\", function (parser, runtime, tokens) {\n\t\tvar time = parser.requireElement(\"expression\", tokens);\n\t\tvar factor = 1;\n\t\tif (tokens.matchToken(\"s\") || tokens.matchToken(\"seconds\")) {\n\t\t\tfactor = 1000;\n\t\t} else if (tokens.matchToken(\"ms\") || tokens.matchToken(\"milliseconds\")) {\n\t\t\t// do nothing\n\t\t}\n\t\treturn {\n\t\t\ttype: \"timeExpression\",\n\t\t\ttime: time,\n\t\t\tfactor: factor,\n\t\t\targs: [time],\n\t\t\top: function (_context, val) {\n\t\t\t\treturn val * factor;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addIndirectExpression(\"propertyAccess\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchOpToken(\".\")) return;\n\t\tvar prop = tokens.requireTokenType(\"IDENTIFIER\");\n\t\tvar propertyAccess = {\n\t\t\ttype: \"propertyAccess\",\n\t\t\troot: root,\n\t\t\tprop: prop,\n\t\t\targs: [root],\n\t\t\top: function (_context, rootVal) {\n\t\t\t\tvar value = runtime.resolveProperty(rootVal, prop.value, false);\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, propertyAccess);\n\t});\n\n\t_parser.addIndirectExpression(\"of\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchToken(\"of\")) return;\n\t\tvar newRoot = parser.requireElement(\"expression\", tokens);\n\t\t// find the urroot\n\t\tvar childOfUrRoot = null;\n\t\tvar urRoot = root;\n\t\twhile (urRoot.root) {\n\t\t\tchildOfUrRoot = urRoot;\n\t\t\turRoot = urRoot.root;\n\t\t}\n\t\tif (urRoot.type !== \"symbol\" && urRoot.type !== \"attributeRef\") {\n\t\t\tparser.raiseParseError(tokens, \"Cannot take a property of a non-symbol: \" + urRoot.type);\n\t\t}\n\t\tvar attribute = urRoot.type === \"attributeRef\";\n\t\tvar prop = urRoot.name;\n\t\tvar propertyAccess = {\n\t\t\ttype: \"ofExpression\",\n\t\t\tprop: urRoot.token,\n\t\t\troot: newRoot,\n\t\t\tattribute: attribute,\n\t\t\texpression: root,\n\t\t\targs: [newRoot],\n\t\t\top: function (context, rootVal) {\n\t\t\t\treturn runtime.resolveProperty(rootVal, prop, attribute);\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\n\t\tif (urRoot.type === \"attributeRef\") {\n\t\t\tpropertyAccess.attribute = urRoot;\n\t\t}\n\t\tif (childOfUrRoot) {\n\t\t\tchildOfUrRoot.root = propertyAccess;\n\t\t\tchildOfUrRoot.args = [propertyAccess];\n\t\t} else {\n\t\t\troot = propertyAccess;\n\t\t}\n\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, root);\n\t});\n\n\t_parser.addIndirectExpression(\"possessive\", function (parser, runtime, tokens, root) {\n\t\tif (parser.possessivesDisabled) {\n\t\t\treturn;\n\t\t}\n\t\tvar apostrophe = tokens.matchOpToken(\"'\");\n\t\tif (\n\t\t\tapostrophe ||\n\t\t\t(root.type === \"symbol\" &&\n\t\t\t\t(root.name === \"my\" || root.name === \"its\" || root.name === \"your\") &&\n\t\t\t\ttokens.currentToken().type === \"IDENTIFIER\")\n\t\t) {\n\t\t\tif (apostrophe) {\n\t\t\t\ttokens.requireToken(\"s\");\n\t\t\t}\n\t\t\tvar attribute = parser.parseElement(\"attributeRef\", tokens);\n\t\t\tif (attribute == null) {\n\t\t\t\tvar prop = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t}\n\t\t\tvar propertyAccess = {\n\t\t\t\ttype: \"possessive\",\n\t\t\t\troot: root,\n\t\t\t\tattribute: attribute,\n\t\t\t\tprop: prop,\n\t\t\t\targs: [root],\n\t\t\t\top: function (context, rootVal) {\n\t\t\t\t\tif (attribute) {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tvar value = runtime.resolveProperty(rootVal, attribute.name, true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar value = runtime.resolveProperty(rootVal, prop.value, false);\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn parser.parseElement(\"indirectExpression\", tokens, propertyAccess);\n\t\t}\n\t});\n\n\t_parser.addIndirectExpression(\"inExpression\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchToken(\"in\")) return;\n\t\tif ((root.type !== \"idRef\" && root.type === \"queryRef\") || root.type === \"classRef\") {\n\t\t\tvar query = true;\n\t\t}\n\t\tvar target = parser.requireElement(\"expression\", tokens);\n\t\tvar propertyAccess = {\n\t\t\ttype: \"inExpression\",\n\t\t\troot: root,\n\t\t\targs: [query ? null : root, target],\n\t\t\top: function (context, rootVal, target) {\n\t\t\t\tvar returnArr = [];\n\t\t\t\tif (query) {\n\t\t\t\t\truntime.implicitLoop(target, function (targetElt) {\n\t\t\t\t\t\tvar results = targetElt.querySelectorAll(root.css);\n\t\t\t\t\t\tfor (var i = 0; i < results.length; i++) {\n\t\t\t\t\t\t\treturnArr.push(results[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\truntime.implicitLoop(rootVal, function (rootElt) {\n\t\t\t\t\t\truntime.implicitLoop(target, function (targetElt) {\n\t\t\t\t\t\t\tif (rootElt === targetElt) {\n\t\t\t\t\t\t\t\treturnArr.push(rootElt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tif (returnArr.length > 0) {\n\t\t\t\t\treturn returnArr;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, propertyAccess);\n\t});\n\n\t_parser.addIndirectExpression(\"asExpression\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchToken(\"as\")) return;\n\t\ttokens.matchToken(\"a\") || tokens.matchToken(\"an\");\n\t\tvar conversion = parser.requireElement(\"dotOrColonPath\", tokens).evaluate(); // OK No promise\n\t\tvar propertyAccess = {\n\t\t\ttype: \"asExpression\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (context, rootVal) {\n\t\t\t\treturn runtime.convertValue(rootVal, conversion);\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, propertyAccess);\n\t});\n\n\t_parser.addIndirectExpression(\"functionCall\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchOpToken(\"(\")) return;\n\t\tvar args = [];\n\t\tif (!tokens.matchOpToken(\")\")) {\n\t\t\tdo {\n\t\t\t\targs.push(parser.requireElement(\"expression\", tokens));\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\")\");\n\t\t}\n\n\t\tif (root.root) {\n\t\t\tvar functionCall = {\n\t\t\t\ttype: \"functionCall\",\n\t\t\t\troot: root,\n\t\t\t\targExressions: args,\n\t\t\t\targs: [root.root, args],\n\t\t\t\top: function (context, rootRoot, args) {\n\t\t\t\t\truntime.nullCheck(rootRoot, root.root);\n\t\t\t\t\tvar func = rootRoot[root.prop.value];\n\t\t\t\t\truntime.nullCheck(func, root);\n\t\t\t\t\tif (func.hyperfunc) {\n\t\t\t\t\t\targs.push(context);\n\t\t\t\t\t}\n\t\t\t\t\treturn func.apply(rootRoot, args);\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tvar functionCall = {\n\t\t\t\ttype: \"functionCall\",\n\t\t\t\troot: root,\n\t\t\t\targExressions: args,\n\t\t\t\targs: [root, args],\n\t\t\t\top: function (context, func, argVals) {\n\t\t\t\t\truntime.nullCheck(func, root);\n\t\t\t\t\tif (func.hyperfunc) {\n\t\t\t\t\t\targVals.push(context);\n\t\t\t\t\t}\n\t\t\t\t\tvar apply = func.apply(null, argVals);\n\t\t\t\t\treturn apply;\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, functionCall);\n\t});\n\n\t_parser.addIndirectExpression(\"attributeRefAccess\", function (parser, runtime, tokens, root) {\n\t\tvar attribute = parser.parseElement(\"attributeRef\", tokens);\n\t\tif (!attribute) return;\n\t\tvar attributeAccess = {\n\t\t\ttype: \"attributeRefAccess\",\n\t\t\troot: root,\n\t\t\tattribute: attribute,\n\t\t\targs: [root],\n\t\t\top: function (_ctx, rootVal) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar value = runtime.resolveProperty(rootVal, attribute.name, true);\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn _runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t\treturn attributeAccess;\n\t});\n\n\t_parser.addIndirectExpression(\"arrayIndex\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchOpToken(\"[\")) return;\n\t\tvar andBefore = false;\n\t\tvar andAfter = false;\n\t\tvar firstIndex = null;\n\t\tvar secondIndex = null;\n\n\t\tif (tokens.matchOpToken(\"..\")) {\n\t\t\tandBefore = true;\n\t\t\tfirstIndex = parser.requireElement(\"expression\", tokens);\n\t\t} else {\n\t\t\tfirstIndex = parser.requireElement(\"expression\", tokens);\n\n\t\t\tif (tokens.matchOpToken(\"..\")) {\n\t\t\t\tandAfter = true;\n\t\t\t\tvar current = tokens.currentToken();\n\t\t\t\tif (current.type !== \"R_BRACKET\") {\n\t\t\t\t\tsecondIndex = parser.parseElement(\"expression\", tokens);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttokens.requireOpToken(\"]\");\n\n\t\tvar arrayIndex = {\n\t\t\ttype: \"arrayIndex\",\n\t\t\troot: root,\n\t\t\tfirstIndex: firstIndex,\n\t\t\tsecondIndex: secondIndex,\n\t\t\targs: [root, firstIndex, secondIndex],\n\t\t\top: function (_ctx, root, firstIndex, secondIndex) {\n\t\t\t\tif (andBefore) {\n\t\t\t\t\treturn root.slice(0, firstIndex + 1); // returns all items from beginning to firstIndex (inclusive)\n\t\t\t\t} else if (andAfter) {\n\t\t\t\t\tif (secondIndex != null) {\n\t\t\t\t\t\treturn root.slice(firstIndex, secondIndex + 1); // returns all items from firstIndex to secondIndex (inclusive)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn root.slice(firstIndex); // returns from firstIndex to end of array\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn root[firstIndex];\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn _runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\n\t\treturn _parser.parseElement(\"indirectExpression\", tokens, arrayIndex);\n\t});\n\n\t_parser.addGrammarElement(\"postfixExpression\", function (parser, runtime, tokens) {\n\t\tvar root = parser.parseElement(\"primaryExpression\", tokens);\n\t\tif (tokens.matchOpToken(\":\")) {\n\t\t\tvar typeName = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\tvar nullOk = !tokens.matchOpToken(\"!\");\n\t\t\treturn {\n\t\t\t\ttype: \"typeCheck\",\n\t\t\t\ttypeName: typeName,\n\t\t\t\tnullOk: nullOk,\n\t\t\t\targs: [root],\n\t\t\t\top: function (context, val) {\n\t\t\t\t\tvar passed = runtime.typeCheck(val, typeName.value, nullOk);\n\t\t\t\t\tif (passed) {\n\t\t\t\t\t\treturn val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(\"Typecheck failed! Expected: \" + typeName.value);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\treturn root;\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"logicalNot\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"not\")) return;\n\t\tvar root = parser.requireElement(\"unaryExpression\", tokens);\n\t\treturn {\n\t\t\ttype: \"logicalNot\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (context, val) {\n\t\t\t\treturn !val;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"noExpression\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"no\")) return;\n\t\tvar root = parser.requireElement(\"unaryExpression\", tokens);\n\t\treturn {\n\t\t\ttype: \"noExpression\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (_context, val) {\n\t\t\t\treturn runtime.isEmpty(val);\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"some\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"some\")) return;\n\t\tvar root = parser.requireElement(\"expression\", tokens);\n\t\treturn {\n\t\t\ttype: \"noExpression\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (_context, val) {\n\t\t\t\treturn !runtime.isEmpty(val);\n\t\t\t},\n\t\t\tevaluate(context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"negativeNumber\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"-\")) return;\n\t\tvar root = parser.requireElement(\"unaryExpression\", tokens);\n\t\treturn {\n\t\t\ttype: \"negativeNumber\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (context, value) {\n\t\t\t\treturn -1 * value;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"unaryExpression\", function (parser, runtime, tokens) {\n\t\treturn parser.parseAnyOf(\n\t\t\t[\"logicalNot\", \"relativePositionalExpression\", \"positionalExpression\", \"noExpression\", \"negativeNumber\", \"postfixExpression\"],\n\t\t\ttokens\n\t\t);\n\t});\n\n\tvar scanForwardQuery = function(start, root, match, wrap) {\n\t\tvar results = root.querySelectorAll(match);\n\t\tfor (var i = 0; i < results.length; i++) {\n\t\t\tvar elt = results[i];\n\t\t\tif (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_PRECEDING) {\n\t\t\t\treturn elt;\n\t\t\t}\n\t\t}\n\t\tif (wrap) {\n\t\t\treturn results[0];\n\t\t}\n\t}\n\n\tvar scanBackwardsQuery = function(start, root, match, wrap) {\n\t\tvar results = root.querySelectorAll(match);\n\t\tfor (var i = results.length - 1; i >= 0; i--) {\n\t\t\tvar elt = results[i];\n\t\t\tif (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_FOLLOWING) {\n\t\t\t\treturn elt;\n\t\t\t}\n\t\t}\n\t\tif (wrap) {\n\t\t\treturn results[results.length - 1];\n\t\t}\n\t}\n\n\tvar scanForwardArray = function(start, array, match, wrap) {\n\t\tvar matches = [];\n\t\t_runtime.forEach(array, function(elt){\n\t\t\tif (elt.matches(match) || elt === start) {\n\t\t\t\tmatches.push(elt);\n\t\t\t}\n\t\t})\n\t\tfor (var i = 0; i < matches.length - 1; i++) {\n\t\t\tvar elt = matches[i];\n\t\t\tif (elt === start) {\n\t\t\t\treturn matches[i + 1];\n\t\t\t}\n\t\t}\n\t\tif (wrap) {\n\t\t\tvar first = matches[0];\n\t\t\tif (first && first.matches(match)) {\n\t\t\t\treturn first;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar scanBackwardsArray = function(start, array, match, wrap) {\n\t\treturn scanForwardArray(start, Array.from(array).reverse(), match, wrap);\n\t}\n\n\t_parser.addGrammarElement(\"relativePositionalExpression\", function (parser, runtime, tokens) {\n\t\tvar op = tokens.matchAnyToken(\"next\", \"previous\");\n\t\tif (!op) return;\n\t\tif (op.value === \"next\") {\n\t\t\tvar forwardSearch = true;\n\t\t}\n\n\t\tvar thing = parser.parseElement(\"expression\", tokens);\n\n\t\tif (tokens.matchToken(\"from\")) {\n\t\t\ttokens.pushFollow(\"in\");\n\t\t\ttry {\n\t\t\t\tvar from = parser.requireElement(\"expression\", tokens);\n\t\t\t} finally {\n\t\t\t\ttokens.popFollow();\n\t\t\t}\n\t\t} else {\n\t\t\tvar from = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t}\n\n\t\tvar inSearch = false;\n\t\tvar withinElt;\n\t\tif (tokens.matchToken(\"in\")) {\n\t\t\tinSearch = true;\n\t\t\tvar inElt = parser.requireElement(\"expression\", tokens);\n\t\t} else if (tokens.matchToken(\"within\")) {\n\t\t\twithinElt = parser.requireElement(\"expression\", tokens);\n\t\t} else {\n\t\t\twithinElt = document.body;\n\t\t}\n\n\t\tvar wrapping = false;\n\t\tif (tokens.matchToken(\"with\")) {\n\t\t\ttokens.requireToken(\"wrapping\")\n\t\t\twrapping = true;\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"relativePositionalExpression\",\n\t\t\tfrom: from,\n\t\t\tforwardSearch: forwardSearch,\n\t\t\tinSearch: inSearch,\n\t\t\twrapping: wrapping,\n\t\t\tinElt: inElt,\n\t\t\twithinElt: withinElt,\n\t\t\toperator: op.value,\n\t\t\targs: [thing, from, inElt, withinElt],\n\t\t\top: function (context, thing, from, inElt, withinElt) {\n\n\t\t\t\tvar css = thing.css;\n\t\t\t\tif (css == null) {\n\t\t\t\t\tthrow \"Expected a CSS value\";\n\t\t\t\t}\n\n\t\t\t\tif(inSearch) {\n\t\t\t\t\tif (inElt) {\n\t\t\t\t\t\tif (forwardSearch) {\n\t\t\t\t\t\t\treturn scanForwardArray(from, inElt, css, wrapping);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn scanBackwardsArray(from, inElt, css, wrapping);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (withinElt) {\n\t\t\t\t\t\tif (forwardSearch) {\n\t\t\t\t\t\t\treturn scanForwardQuery(from, withinElt, css, wrapping);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn scanBackwardsQuery(from, withinElt, css, wrapping);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t}\n\n\t});\n\n\t_parser.addGrammarElement(\"positionalExpression\", function (parser, runtime, tokens) {\n\t\tvar op = tokens.matchAnyToken(\"first\", \"last\", \"random\");\n\t\tif (!op) return;\n\t\ttokens.matchAnyToken(\"in\", \"from\", \"of\");\n\t\tvar rhs = parser.requireElement(\"unaryExpression\", tokens);\n\t\tconst operator = op.value;\n\t\treturn {\n\t\t\ttype: \"positionalExpression\",\n\t\t\trhs: rhs,\n\t\t\toperator: op.value,\n\t\t\targs: [rhs],\n\t\t\top: function (context, rhsVal) {\n\t\t\t\tif (rhsVal && !Array.isArray(rhsVal)) {\n\t\t\t\t\tif (rhsVal.children) {\n\t\t\t\t\t\trhsVal = rhsVal.children;\n\t\t\t\t\t} else {\n\t\t\t\t\t\trhsVal = Array.from(rhsVal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (rhsVal) {\n\t\t\t\t\tif (operator === \"first\") {\n\t\t\t\t\t\treturn rhsVal[0];\n\t\t\t\t\t} else if (operator === \"last\") {\n\t\t\t\t\t\treturn rhsVal[rhsVal.length - 1];\n\t\t\t\t\t} else if (operator === \"random\") {\n\t\t\t\t\t\treturn rhsVal[Math.floor(Math.random() * rhsVal.length)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"mathOperator\", function (parser, runtime, tokens) {\n\t\tvar expr = parser.parseElement(\"unaryExpression\", tokens);\n\t\tvar mathOp,\n\t\t\tinitialMathOp = null;\n\t\tmathOp = tokens.matchAnyOpToken(\"+\", \"-\", \"*\", \"/\", \"%\");\n\t\twhile (mathOp) {\n\t\t\tinitialMathOp = initialMathOp || mathOp;\n\t\t\tvar operator = mathOp.value;\n\t\t\tif (initialMathOp.value !== operator) {\n\t\t\t\tparser.raiseParseError(tokens, \"You must parenthesize math operations with different operators\");\n\t\t\t}\n\t\t\tvar rhs = parser.parseElement(\"unaryExpression\", tokens);\n\t\t\texpr = {\n\t\t\t\ttype: \"mathOperator\",\n\t\t\t\tlhs: expr,\n\t\t\t\trhs: rhs,\n\t\t\t\toperator: operator,\n\t\t\t\targs: [expr, rhs],\n\t\t\t\top: function (context, lhsVal, rhsVal) {\n\t\t\t\t\tif (operator === \"+\") {\n\t\t\t\t\t\treturn lhsVal + rhsVal;\n\t\t\t\t\t} else if (operator === \"-\") {\n\t\t\t\t\t\treturn lhsVal - rhsVal;\n\t\t\t\t\t} else if (operator === \"*\") {\n\t\t\t\t\t\treturn lhsVal * rhsVal;\n\t\t\t\t\t} else if (operator === \"/\") {\n\t\t\t\t\t\treturn lhsVal / rhsVal;\n\t\t\t\t\t} else if (operator === \"%\") {\n\t\t\t\t\t\treturn lhsVal % rhsVal;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\tmathOp = tokens.matchAnyOpToken(\"+\", \"-\", \"*\", \"/\", \"%\");\n\t\t}\n\t\treturn expr;\n\t});\n\n\t_parser.addGrammarElement(\"mathExpression\", function (parser, runtime, tokens) {\n\t\treturn parser.parseAnyOf([\"mathOperator\", \"unaryExpression\"], tokens);\n\t});\n\n\tfunction sloppyContains(src, container, value){\n\t\tif (container['contains']) {\n\t\t\treturn container.contains(value);\n\t\t} else if (container['includes']) {\n\t\t\treturn container.includes(value);\n\t\t} else {\n\t\t\tthrow Error(\"The value of \" + src.sourceFor() + \" does not have a contains or includes method on it\");\n\t\t}\n\t}\n\tfunction sloppyMatches(src, target, toMatch){\n\t\tif (target['match']) {\n\t\t\treturn !!target.match(toMatch);\n\t\t} else if (target['matches']) {\n\t\t\treturn target.matches(toMatch);\n\t\t} else {\n\t\t\tthrow Error(\"The value of \" + src.sourceFor() + \" does not have a match or matches method on it\");\n\t\t}\n\t}\n\n\t_parser.addGrammarElement(\"comparisonOperator\", function (parser, runtime, tokens) {\n\t\tvar expr = parser.parseElement(\"mathExpression\", tokens);\n\t\tvar comparisonToken = tokens.matchAnyOpToken(\"<\", \">\", \"<=\", \">=\", \"==\", \"===\", \"!=\", \"!==\");\n\t\tvar operator = comparisonToken ? comparisonToken.value : null;\n\t\tvar hasRightValue = true; // By default, most comparisons require two values, but there are some exceptions.\n\t\tvar typeCheck = false;\n\n\t\tif (operator == null) {\n\t\t\tif (tokens.matchToken(\"is\") || tokens.matchToken(\"am\")) {\n\t\t\t\tif (tokens.matchToken(\"not\")) {\n\t\t\t\t\tif (tokens.matchToken(\"in\")) {\n\t\t\t\t\t\toperator = \"not in\";\n\t\t\t\t\t} else if (tokens.matchToken(\"a\")) {\n\t\t\t\t\t\toperator = \"not a\";\n\t\t\t\t\t\ttypeCheck = true;\n\t\t\t\t\t} else if (tokens.matchToken(\"empty\")) {\n\t\t\t\t\t\toperator = \"not empty\";\n\t\t\t\t\t\thasRightValue = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperator = \"!=\";\n\t\t\t\t\t}\n\t\t\t\t} else if (tokens.matchToken(\"in\")) {\n\t\t\t\t\toperator = \"in\";\n\t\t\t\t} else if (tokens.matchToken(\"a\")) {\n\t\t\t\t\toperator = \"a\";\n\t\t\t\t\ttypeCheck = true;\n\t\t\t\t} else if (tokens.matchToken(\"empty\")) {\n\t\t\t\t\toperator = \"empty\";\n\t\t\t\t\thasRightValue = false;\n\t\t\t\t} else if (tokens.matchToken(\"less\")) {\n\t\t\t\t\ttokens.requireToken(\"than\");\n\t\t\t\t\tif (tokens.matchToken(\"or\")) {\n\t\t\t\t\t\ttokens.requireToken(\"equal\");\n\t\t\t\t\t\ttokens.requireToken(\"to\");\n\t\t\t\t\t\toperator = \"<=\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperator = \"<\";\n\t\t\t\t\t}\n\t\t\t\t} else if (tokens.matchToken(\"greater\")) {\n\t\t\t\t\ttokens.requireToken(\"than\");\n\t\t\t\t\tif (tokens.matchToken(\"or\")) {\n\t\t\t\t\t\ttokens.requireToken(\"equal\");\n\t\t\t\t\t\ttokens.requireToken(\"to\");\n\t\t\t\t\t\toperator = \">=\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperator = \">\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toperator = \"==\";\n\t\t\t\t}\n\t\t\t} else if (tokens.matchToken(\"exist\") || tokens.matchToken(\"exists\")) {\n\t\t\t\toperator = \"exist\";\n\t\t\t\thasRightValue = false;\n\t\t\t} else if (tokens.matchToken(\"matches\") || tokens.matchToken(\"match\")) {\n\t\t\t\toperator = \"match\";\n\t\t\t} else if (tokens.matchToken(\"contains\") || tokens.matchToken(\"contain\")) {\n\t\t\t\toperator = \"contain\";\n\t\t\t} else if (tokens.matchToken(\"includes\") || tokens.matchToken(\"include\")) {\n\t\t\t\toperator = \"include\";\n\t\t\t} else if (tokens.matchToken(\"do\") || tokens.matchToken(\"does\")) {\n\t\t\t\ttokens.requireToken(\"not\");\n\t\t\t\tif (tokens.matchToken(\"matches\") || tokens.matchToken(\"match\")) {\n\t\t\t\t\toperator = \"not match\";\n\t\t\t\t} else if (tokens.matchToken(\"contains\") || tokens.matchToken(\"contain\")) {\n\t\t\t\t\toperator = \"not contain\";\n\t\t\t\t} else if (tokens.matchToken(\"exist\") || tokens.matchToken(\"exist\")) {\n\t\t\t\t\toperator = \"not exist\";\n\t\t\t\t\thasRightValue = false;\n\t\t\t\t} else if (tokens.matchToken(\"include\")) {\n\t\t\t\t\toperator = \"not include\";\n\t\t\t\t} else {\n\t\t\t\t\tparser.raiseParseError(tokens, \"Expected matches or contains\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (operator) {\n\t\t\t// Do not allow chained comparisons, which is dumb\n\t\t\tif (typeCheck) {\n\t\t\t\tvar typeName = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t\tvar nullOk = !tokens.matchOpToken(\"!\");\n\t\t\t} else if (hasRightValue) {\n\t\t\t\tvar rhs = parser.requireElement(\"mathExpression\", tokens);\n\t\t\t\tif (operator === \"match\" || operator === \"not match\") {\n\t\t\t\t\trhs = rhs.css ? rhs.css : rhs;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar lhs = expr;\n\t\t\texpr = {\n\t\t\t\ttype: \"comparisonOperator\",\n\t\t\t\toperator: operator,\n\t\t\t\ttypeName: typeName,\n\t\t\t\tnullOk: nullOk,\n\t\t\t\tlhs: expr,\n\t\t\t\trhs: rhs,\n\t\t\t\targs: [expr, rhs],\n\t\t\t\top: function (context, lhsVal, rhsVal) {\n\t\t\t\t\tif (operator === \"==\") {\n\t\t\t\t\t\treturn lhsVal == rhsVal;\n\t\t\t\t\t} else if (operator === \"!=\") {\n\t\t\t\t\t\treturn lhsVal != rhsVal;\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"match\") {\n\t\t\t\t\t\treturn lhsVal != null && sloppyMatches(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"not match\") {\n\t\t\t\t\t\treturn lhsVal == null || !sloppyMatches(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"in\") {\n\t\t\t\t\t\treturn rhsVal != null && sloppyContains(rhs, rhsVal, lhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"not in\") {\n\t\t\t\t\t\treturn rhsVal == null || !sloppyContains(rhs, rhsVal, lhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"contain\") {\n\t\t\t\t\t\treturn lhsVal != null && sloppyContains(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"not contain\") {\n\t\t\t\t\t\treturn lhsVal == null || !sloppyContains(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"include\") {\n\t\t\t\t\t\treturn lhsVal != null && sloppyContains(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"not include\") {\n\t\t\t\t\t\treturn lhsVal == null || !sloppyContains(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"===\") {\n\t\t\t\t\t\treturn lhsVal === rhsVal;\n\t\t\t\t\t} else if (operator === \"!==\") {\n\t\t\t\t\t\treturn lhsVal !== rhsVal;\n\t\t\t\t\t} else if (operator === \"<\") {\n\t\t\t\t\t\treturn lhsVal < rhsVal;\n\t\t\t\t\t} else if (operator === \">\") {\n\t\t\t\t\t\treturn lhsVal > rhsVal;\n\t\t\t\t\t} else if (operator === \"<=\") {\n\t\t\t\t\t\treturn lhsVal <= rhsVal;\n\t\t\t\t\t} else if (operator === \">=\") {\n\t\t\t\t\t\treturn lhsVal >= rhsVal;\n\t\t\t\t\t} else if (operator === \"empty\") {\n\t\t\t\t\t\treturn runtime.isEmpty(lhsVal);\n\t\t\t\t\t} else if (operator === \"not empty\") {\n\t\t\t\t\t\treturn !runtime.isEmpty(lhsVal);\n\t\t\t\t\t} else if (operator === \"exist\") {\n\t\t\t\t\t\treturn runtime.doesExist(lhsVal);\n\t\t\t\t\t} else if (operator === \"not exist\") {\n\t\t\t\t\t\treturn !runtime.doesExist(lhsVal);\n\t\t\t\t\t} else if (operator === \"a\") {\n\t\t\t\t\t\treturn runtime.typeCheck(lhsVal, typeName.value, nullOk);\n\t\t\t\t\t} else if (operator === \"not a\") {\n\t\t\t\t\t\treturn !runtime.typeCheck(lhsVal, typeName.value, nullOk);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow \"Unknown comparison : \" + operator;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\treturn expr;\n\t});\n\n\t_parser.addGrammarElement(\"comparisonExpression\", function (parser, runtime, tokens) {\n\t\treturn parser.parseAnyOf([\"comparisonOperator\", \"mathExpression\"], tokens);\n\t});\n\n\t_parser.addGrammarElement(\"logicalOperator\", function (parser, runtime, tokens) {\n\t\tvar expr = parser.parseElement(\"comparisonExpression\", tokens);\n\t\tvar logicalOp,\n\t\t\tinitialLogicalOp = null;\n\t\tlogicalOp = tokens.matchToken(\"and\") || tokens.matchToken(\"or\");\n\t\twhile (logicalOp) {\n\t\t\tinitialLogicalOp = initialLogicalOp || logicalOp;\n\t\t\tif (initialLogicalOp.value !== logicalOp.value) {\n\t\t\t\tparser.raiseParseError(tokens, \"You must parenthesize logical operations with different operators\");\n\t\t\t}\n\t\t\tvar rhs = parser.requireElement(\"comparisonExpression\", tokens);\n\t\t\tconst operator = logicalOp.value;\n\t\t\texpr = {\n\t\t\t\ttype: \"logicalOperator\",\n\t\t\t\toperator: operator,\n\t\t\t\tlhs: expr,\n\t\t\t\trhs: rhs,\n\t\t\t\targs: [expr, rhs],\n\t\t\t\top: function (context, lhsVal, rhsVal) {\n\t\t\t\t\tif (operator === \"and\") {\n\t\t\t\t\t\treturn lhsVal && rhsVal;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn lhsVal || rhsVal;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\tlogicalOp = tokens.matchToken(\"and\") || tokens.matchToken(\"or\");\n\t\t}\n\t\treturn expr;\n\t});\n\n\t_parser.addGrammarElement(\"logicalExpression\", function (parser, runtime, tokens) {\n\t\treturn parser.parseAnyOf([\"logicalOperator\", \"mathExpression\"], tokens);\n\t});\n\n\t_parser.addGrammarElement(\"asyncExpression\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"async\")) {\n\t\t\tvar value = parser.requireElement(\"logicalExpression\", tokens);\n\t\t\tvar expr = {\n\t\t\t\ttype: \"asyncExpression\",\n\t\t\t\tvalue: value,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tasyncWrapper: true,\n\t\t\t\t\t\tvalue: this.value.evaluate(context), //OK\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn expr;\n\t\t} else {\n\t\t\treturn parser.parseElement(\"logicalExpression\", tokens);\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"expression\", function (parser, runtime, tokens) {\n\t\ttokens.matchToken(\"the\"); // optional the\n\t\treturn parser.parseElement(\"asyncExpression\", tokens);\n\t});\n\n\t_parser.addGrammarElement(\"assignableExpression\", function (parser, runtime, tokens) {\n\t\ttokens.matchToken(\"the\"); // optional the\n\n\t\t// TODO obviously we need to generalize this as a left hand side / targetable concept\n\t\tvar expr = parser.parseElement(\"primaryExpression\", tokens);\n\t\tif (expr && (\n\t\t\texpr.type === \"symbol\" ||\n\t\t\texpr.type === \"ofExpression\" ||\n\t\t\texpr.type === \"propertyAccess\" ||\n\t\t\texpr.type === \"attributeRefAccess\" ||\n\t\t\texpr.type === \"attributeRef\" ||\n\t\t\texpr.type === \"possessive\")\n\t\t) {\n\t\t\treturn expr;\n\t\t} else {\n\t\t\t_parser.raiseParseError(\n\t\t\t\ttokens,\n\t\t\t\t\"A target expression must be writable. The expression type '\" + (expr && expr.type) + \"' is not.\"\n\t\t\t);\n\t\t}\n\t\treturn expr;\n\t});\n\n\t_parser.addGrammarElement(\"hyperscript\", function (parser, runtime, tokens) {\n\t\tvar features = [];\n\n\t\tif (tokens.hasMore()) {\n\t\t\twhile (parser.featureStart(tokens.currentToken()) || tokens.currentToken().value === \"(\") {\n\t\t\t\tvar feature = parser.requireElement(\"feature\", tokens);\n\t\t\t\tfeatures.push(feature);\n\t\t\t\ttokens.matchToken(\"end\"); // optional end\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: \"hyperscript\",\n\t\t\tfeatures: features,\n\t\t\tapply: function (target, source, args) {\n\t\t\t\t// no op\n\t\t\t\tfor (const feature of features) {\n\t\t\t\t\tfeature.install(target, source, args);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t});\n\n\tvar parseEventArgs = function (tokens) {\n\t\tvar args = [];\n\t\t// handle argument list (look ahead 3)\n\t\tif (\n\t\t\ttokens.token(0).value === \"(\" &&\n\t\t\t(tokens.token(1).value === \")\" || tokens.token(2).value === \",\" || tokens.token(2).value === \")\")\n\t\t) {\n\t\t\ttokens.matchOpToken(\"(\");\n\t\t\tdo {\n\t\t\t\targs.push(tokens.requireTokenType(\"IDENTIFIER\"));\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\")\");\n\t\t}\n\t\treturn args;\n\t};\n\n\t_parser.addFeature(\"on\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"on\")) return;\n\t\tvar every = false;\n\t\tif (tokens.matchToken(\"every\")) {\n\t\t\tevery = true;\n\t\t}\n\t\tvar events = [];\n\t\tvar displayName = null;\n\t\tdo {\n\t\t\tvar on = parser.requireElement(\"eventName\", tokens, \"Expected event name\");\n\n\t\t\tvar eventName = on.evaluate(); // OK No Promise\n\n\t\t\tif (displayName) {\n\t\t\t\tdisplayName = displayName + \" or \" + eventName;\n\t\t\t} else {\n\t\t\t\tdisplayName = \"on \" + eventName;\n\t\t\t}\n\t\t\tvar args = parseEventArgs(tokens);\n\n\t\t\tvar filter = null;\n\t\t\tif (tokens.matchOpToken(\"[\")) {\n\t\t\t\tfilter = parser.requireElement(\"expression\", tokens);\n\t\t\t\ttokens.requireOpToken(\"]\");\n\t\t\t}\n\n\t\t\tif (tokens.currentToken().type === \"NUMBER\") {\n\t\t\t\tvar startCountToken = tokens.consumeToken();\n\t\t\t\tvar startCount = parseInt(startCountToken.value);\n\t\t\t\tif (tokens.matchToken(\"to\")) {\n\t\t\t\t\tvar endCountToken = tokens.consumeToken();\n\t\t\t\t\tvar endCount = parseInt(endCountToken.value);\n\t\t\t\t} else if (tokens.matchToken(\"and\")) {\n\t\t\t\t\tvar unbounded = true;\n\t\t\t\t\ttokens.requireToken(\"on\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (eventName === \"intersection\") {\n\t\t\t\tvar intersectionSpec = {};\n\t\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\t\tintersectionSpec[\"with\"] = parser.requireElement(\"expression\", tokens).evaluate();\n\t\t\t\t}\n\t\t\t\tif (tokens.matchToken(\"having\")) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (tokens.matchToken(\"margin\")) {\n\t\t\t\t\t\t\tintersectionSpec[\"rootMargin\"] = parser.requireElement(\"stringLike\", tokens).evaluate();\n\t\t\t\t\t\t} else if (tokens.matchToken(\"threshold\")) {\n\t\t\t\t\t\t\tintersectionSpec[\"threshold\"] = parser.requireElement(\"expression\", tokens).evaluate();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparser.raiseParseError(tokens, \"Unknown intersection config specification\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (tokens.matchToken(\"and\"));\n\t\t\t\t}\n\t\t\t} else if (eventName === \"mutation\") {\n\t\t\t\tvar mutationSpec = {};\n\t\t\t\tif (tokens.matchToken(\"of\")) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (tokens.matchToken(\"anything\")) {\n\t\t\t\t\t\t\tmutationSpec[\"attributes\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"subtree\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"characterData\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"childList\"] = true;\n\t\t\t\t\t\t} else if (tokens.matchToken(\"childList\")) {\n\t\t\t\t\t\t\tmutationSpec[\"childList\"] = true;\n\t\t\t\t\t\t} else if (tokens.matchToken(\"attributes\")) {\n\t\t\t\t\t\t\tmutationSpec[\"attributes\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"attributeOldValue\"] = true;\n\t\t\t\t\t\t} else if (tokens.matchToken(\"subtree\")) {\n\t\t\t\t\t\t\tmutationSpec[\"subtree\"] = true;\n\t\t\t\t\t\t} else if (tokens.matchToken(\"characterData\")) {\n\t\t\t\t\t\t\tmutationSpec[\"characterData\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"characterDataOldValue\"] = true;\n\t\t\t\t\t\t} else if (tokens.currentToken().type === \"ATTRIBUTE_REF\") {\n\t\t\t\t\t\t\tvar attribute = tokens.consumeToken();\n\t\t\t\t\t\t\tif (mutationSpec[\"attributeFilter\"] == null) {\n\t\t\t\t\t\t\t\tmutationSpec[\"attributeFilter\"] = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (attribute.value.indexOf(\"@\") == 0) {\n\t\t\t\t\t\t\t\tmutationSpec[\"attributeFilter\"].push(attribute.value.substring(1));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tparser.raiseParseError(\n\t\t\t\t\t\t\t\t\ttokens,\n\t\t\t\t\t\t\t\t\t\"Only shorthand attribute references are allowed here\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparser.raiseParseError(tokens, \"Unknown mutation config specification\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (tokens.matchToken(\"or\"));\n\t\t\t\t} else {\n\t\t\t\t\tmutationSpec[\"attributes\"] = true;\n\t\t\t\t\tmutationSpec[\"characterData\"] = true;\n\t\t\t\t\tmutationSpec[\"childList\"] = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar from = null;\n\t\t\tvar elsewhere = false;\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\tif (tokens.matchToken(\"elsewhere\")) {\n\t\t\t\t\telsewhere = true;\n\t\t\t\t} else {\n\t\t\t\t\tfrom = parser.parseElement(\"expression\", tokens);\n\t\t\t\t\tif (!from) {\n\t\t\t\t\t\tparser.raiseParseError(tokens, 'Expected either target value or \"elsewhere\".');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// support both \"elsewhere\" and \"from elsewhere\"\n\t\t\tif (from === null && elsewhere === false && tokens.matchToken(\"elsewhere\")) {\n\t\t\t\telsewhere = true;\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"in\")) {\n\t\t\t\tvar inExpr = parser.parseAnyOf([\"idRef\", \"queryRef\", \"classRef\"], tokens);\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"debounced\")) {\n\t\t\t\ttokens.requireToken(\"at\");\n\t\t\t\tvar timeExpr = parser.requireElement(\"timeExpression\", tokens);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar debounceTime = timeExpr.evaluate({}); // OK No promise TODO make a literal time expr\n\t\t\t} else if (tokens.matchToken(\"throttled\")) {\n\t\t\t\ttokens.requireToken(\"at\");\n\t\t\t\tvar timeExpr = parser.requireElement(\"timeExpression\", tokens);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar throttleTime = timeExpr.evaluate({}); // OK No promise TODO make a literal time expr\n\t\t\t}\n\n\t\t\tevents.push({\n\t\t\t\texecCount: 0,\n\t\t\t\tevery: every,\n\t\t\t\ton: eventName,\n\t\t\t\targs: args,\n\t\t\t\tfilter: filter,\n\t\t\t\tfrom: from,\n\t\t\t\tinExpr: inExpr,\n\t\t\t\telsewhere: elsewhere,\n\t\t\t\tstartCount: startCount,\n\t\t\t\tendCount: endCount,\n\t\t\t\tunbounded: unbounded,\n\t\t\t\tdebounceTime: debounceTime,\n\t\t\t\tthrottleTime: throttleTime,\n\t\t\t\tmutationSpec: mutationSpec,\n\t\t\t\tintersectionSpec: intersectionSpec,\n\t\t\t\tdebounced: undefined,\n\t\t\t\tlastExec: undefined,\n\t\t\t});\n\t\t} while (tokens.matchToken(\"or\"));\n\n\t\tvar queueLast = true;\n\t\tif (!every) {\n\t\t\tif (tokens.matchToken(\"queue\")) {\n\t\t\t\tif (tokens.matchToken(\"all\")) {\n\t\t\t\t\tvar queueAll = true;\n\t\t\t\t\tvar queueLast = false;\n\t\t\t\t} else if (tokens.matchToken(\"first\")) {\n\t\t\t\t\tvar queueFirst = true;\n\t\t\t\t} else if (tokens.matchToken(\"none\")) {\n\t\t\t\t\tvar queueNone = true;\n\t\t\t\t} else {\n\t\t\t\t\ttokens.requireToken(\"last\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar start = parser.requireElement(\"commandList\", tokens);\n\t\tparser.ensureTerminated(start);\n\n\t\tif (tokens.matchToken(\"catch\")) {\n\t\t\tvar errorSymbol = tokens.requireTokenType(\"IDENTIFIER\").value;\n\t\t\tvar errorHandler = parser.requireElement(\"commandList\", tokens);\n\t\t\tparser.ensureTerminated(errorHandler);\n\t\t}\n\n\t\tif (tokens.matchToken(\"finally\")) {\n\t\t\tvar finallyHandler = parser.requireElement(\"commandList\", tokens);\n\t\t\tparser.ensureTerminated(finallyHandler);\n\t\t}\n\n\t\tvar onFeature = {\n\t\t\tdisplayName: displayName,\n\t\t\tevents: events,\n\t\t\tstart: start,\n\t\t\tevery: every,\n\t\t\texecCount: 0,\n\t\t\terrorHandler: errorHandler,\n\t\t\terrorSymbol: errorSymbol,\n\t\t\texecute: function (/** @type {Context} */ ctx) {\n\t\t\t\tlet eventQueueInfo = runtime.getEventQueueFor(ctx.me, onFeature);\n\t\t\t\tif (eventQueueInfo.executing && every === false) {\n\t\t\t\t\tif (queueNone || (queueFirst && eventQueueInfo.queue.length > 0)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (queueLast) {\n\t\t\t\t\t\teventQueueInfo.queue.length = 0;\n\t\t\t\t\t}\n\t\t\t\t\teventQueueInfo.queue.push(ctx);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonFeature.execCount++;\n\t\t\t\teventQueueInfo.executing = true;\n\t\t\t\tctx.meta.onHalt = function () {\n\t\t\t\t\teventQueueInfo.executing = false;\n\t\t\t\t\tvar queued = eventQueueInfo.queue.shift();\n\t\t\t\t\tif (queued) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tonFeature.execute(queued);\n\t\t\t\t\t\t}, 1);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tctx.meta.reject = function (err) {\n\t\t\t\t\tconsole.error(err.message ? err.message : err);\n\t\t\t\t\tvar hypertrace = runtime.getHyperTrace(ctx, err);\n\t\t\t\t\tif (hypertrace) {\n\t\t\t\t\t\thypertrace.print();\n\t\t\t\t\t}\n\t\t\t\t\truntime.triggerEvent(ctx.me, \"exception\", {\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tstart.execute(ctx);\n\t\t\t},\n\t\t\tinstall: function (elt, source) {\n\t\t\t\tfor (const eventSpec of onFeature.events) {\n\t\t\t\t\tvar targets;\n\t\t\t\t\tif (eventSpec.elsewhere) {\n\t\t\t\t\t\ttargets = [document];\n\t\t\t\t\t} else if (eventSpec.from) {\n\t\t\t\t\t\ttargets = eventSpec.from.evaluate(runtime.makeContext(elt, onFeature, elt, null));\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttargets = [elt];\n\t\t\t\t\t}\n\t\t\t\t\truntime.forEach(targets, function (target) {\n\t\t\t\t\t\t// OK NO PROMISE\n\n\t\t\t\t\t\tvar eventName = eventSpec.on;\n\t\t\t\t\t\tif (eventSpec.mutationSpec) {\n\t\t\t\t\t\t\teventName = \"hyperscript:mutation\";\n\t\t\t\t\t\t\tconst observer = new MutationObserver(function (mutationList, observer) {\n\t\t\t\t\t\t\t\tif (!onFeature.executing) {\n\t\t\t\t\t\t\t\t\t_runtime.triggerEvent(target, eventName, {\n\t\t\t\t\t\t\t\t\t\tmutationList: mutationList,\n\t\t\t\t\t\t\t\t\t\tobserver: observer,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tobserver.observe(target, eventSpec.mutationSpec);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (eventSpec.intersectionSpec) {\n\t\t\t\t\t\t\teventName = \"hyperscript:insersection\";\n\t\t\t\t\t\t\tconst observer = new IntersectionObserver(function (entries) {\n\t\t\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\t\t\tvar detail = {\n\t\t\t\t\t\t\t\t\t\tobserver: observer,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tdetail = mergeObjects(detail, entry);\n\t\t\t\t\t\t\t\t\tdetail[\"intersecting\"] = entry.isIntersecting;\n\t\t\t\t\t\t\t\t\t_runtime.triggerEvent(target, eventName, detail);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, eventSpec.intersectionSpec);\n\t\t\t\t\t\t\tobserver.observe(target);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar addEventListener = target.addEventListener || target.on;\n\t\t\t\t\t\taddEventListener.call(target, eventName, function listener(evt) {\n\t\t\t\t\t\t\t// OK NO PROMISE\n\t\t\t\t\t\t\tif (typeof Node !== 'undefined' && elt instanceof Node && target !== elt && !elt.isConnected) {\n\t\t\t\t\t\t\t\ttarget.removeEventListener(eventName, listener);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar ctx = runtime.makeContext(elt, onFeature, elt, evt);\n\t\t\t\t\t\t\tif (eventSpec.elsewhere && elt.contains(evt.target)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (eventSpec.from) {\n\t\t\t\t\t\t\t\tctx.result = target;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// establish context\n\t\t\t\t\t\t\tfor (const arg of eventSpec.args) {\n\t\t\t\t\t\t\t\tctx[arg.value] =\n\t\t\t\t\t\t\t\t\tctx.event[arg.value] || ('detail' in ctx.event ? ctx.event['detail'][arg.value] : null);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// install error handler if any\n\t\t\t\t\t\t\tctx.meta.errorHandler = errorHandler;\n\t\t\t\t\t\t\tctx.meta.errorSymbol = errorSymbol;\n\t\t\t\t\t\t\tctx.meta.finallyHandler = finallyHandler;\n\n\t\t\t\t\t\t\t// apply filter\n\t\t\t\t\t\t\tif (eventSpec.filter) {\n\t\t\t\t\t\t\t\tvar initialCtx = ctx.meta.context;\n\t\t\t\t\t\t\t\tctx.meta.context = ctx.event;\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tvar value = eventSpec.filter.evaluate(ctx); //OK NO PROMISE\n\t\t\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\t\t\t// match the javascript semantics for if statements\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\tctx.meta.context = initialCtx;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (eventSpec.inExpr) {\n\t\t\t\t\t\t\t\tvar inElement = evt.target;\n\t\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\t\tif (inElement.matches && inElement.matches(eventSpec.inExpr.css)) {\n\t\t\t\t\t\t\t\t\t\tctx.result = inElement;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tinElement = inElement.parentElement;\n\t\t\t\t\t\t\t\t\t\tif (inElement == null) {\n\t\t\t\t\t\t\t\t\t\t\treturn; // no match found\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// verify counts\n\t\t\t\t\t\t\teventSpec.execCount++;\n\t\t\t\t\t\t\tif (eventSpec.startCount) {\n\t\t\t\t\t\t\t\tif (eventSpec.endCount) {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\teventSpec.execCount < eventSpec.startCount ||\n\t\t\t\t\t\t\t\t\t\teventSpec.execCount > eventSpec.endCount\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (eventSpec.unbounded) {\n\t\t\t\t\t\t\t\t\tif (eventSpec.execCount < eventSpec.startCount) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (eventSpec.execCount !== eventSpec.startCount) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//debounce\n\t\t\t\t\t\t\tif (eventSpec.debounceTime) {\n\t\t\t\t\t\t\t\tif (eventSpec.debounced) {\n\t\t\t\t\t\t\t\t\tclearTimeout(eventSpec.debounced);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\teventSpec.debounced = setTimeout(function () {\n\t\t\t\t\t\t\t\t\tonFeature.execute(ctx);\n\t\t\t\t\t\t\t\t}, eventSpec.debounceTime);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// throttle\n\t\t\t\t\t\t\tif (eventSpec.throttleTime) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\teventSpec.lastExec &&\n\t\t\t\t\t\t\t\t\tDate.now() < eventSpec.lastExec + eventSpec.throttleTime\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\teventSpec.lastExec = Date.now();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply execute\n\t\t\t\t\t\t\tonFeature.execute(ctx);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tparser.setParent(start, onFeature);\n\t\treturn onFeature;\n\t});\n\n\t_parser.addFeature(\"def\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"def\")) return;\n\t\tvar functionName = parser.requireElement(\"dotOrColonPath\", tokens);\n\t\tvar nameVal = functionName.evaluate(); // OK\n\t\tvar nameSpace = nameVal.split(\".\");\n\t\tvar funcName = nameSpace.pop();\n\n\t\tvar args = [];\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tif (tokens.matchOpToken(\")\")) {\n\t\t\t\t// emtpy args list\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\targs.push(tokens.requireTokenType(\"IDENTIFIER\"));\n\t\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\t\ttokens.requireOpToken(\")\");\n\t\t\t}\n\t\t}\n\n\t\tvar start = parser.requireElement(\"commandList\", tokens);\n\n\t\tif (tokens.matchToken(\"catch\")) {\n\t\t\tvar errorSymbol = tokens.requireTokenType(\"IDENTIFIER\").value;\n\t\t\tvar errorHandler = parser.parseElement(\"commandList\", tokens);\n\t\t}\n\n\t\tif (tokens.matchToken(\"finally\")) {\n\t\t\tvar finallyHandler = parser.requireElement(\"commandList\", tokens);\n\t\t\tparser.ensureTerminated(finallyHandler);\n\t\t}\n\n\t\tvar functionFeature = {\n\t\t\tdisplayName:\n\t\t\t\tfuncName +\n\t\t\t\t\"(\" +\n\t\t\t\targs\n\t\t\t\t\t.map(function (arg) {\n\t\t\t\t\t\treturn arg.value;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\", \") +\n\t\t\t\t\")\",\n\t\t\tname: funcName,\n\t\t\targs: args,\n\t\t\tstart: start,\n\t\t\terrorHandler: errorHandler,\n\t\t\terrorSymbol: errorSymbol,\n\t\t\tfinallyHandler: finallyHandler,\n\t\t\tinstall: function (target, source) {\n\t\t\t\tvar func = function () {\n\t\t\t\t\t// null, worker\n\t\t\t\t\tvar ctx = runtime.makeContext(source, functionFeature, target, null);\n\n\t\t\t\t\t// install error handler if any\n\t\t\t\t\tctx.meta.errorHandler = errorHandler;\n\t\t\t\t\tctx.meta.errorSymbol = errorSymbol;\n\t\t\t\t\tctx.meta.finallyHandler = finallyHandler;\n\n\t\t\t\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\t\t\t\tvar name = args[i];\n\t\t\t\t\t\tvar argumentVal = arguments[i];\n\t\t\t\t\t\tif (name) {\n\t\t\t\t\t\t\tctx[name.value] = argumentVal;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.meta.caller = arguments[args.length];\n\t\t\t\t\tif (ctx.meta.caller) {\n\t\t\t\t\t\tctx.meta.callingCommand = ctx.meta.caller.meta.command;\n\t\t\t\t\t}\n\t\t\t\t\tvar resolve,\n\t\t\t\t\t\treject = null;\n\t\t\t\t\tvar promise = new Promise(function (theResolve, theReject) {\n\t\t\t\t\t\tresolve = theResolve;\n\t\t\t\t\t\treject = theReject;\n\t\t\t\t\t});\n\t\t\t\t\tstart.execute(ctx);\n\t\t\t\t\tif (ctx.meta.returned) {\n\t\t\t\t\t\treturn ctx.meta.returnValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.meta.resolve = resolve;\n\t\t\t\t\t\tctx.meta.reject = reject;\n\t\t\t\t\t\treturn promise;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfunc.hyperfunc = true;\n\t\t\t\tfunc.hypername = nameVal;\n\t\t\t\truntime.assignToNamespace(target, nameSpace, funcName, func);\n\t\t\t},\n\t\t};\n\n\t\tparser.ensureTerminated(start);\n\n\t\t// terminate error handler if any\n\t\tif (errorHandler) {\n\t\t\tparser.ensureTerminated(errorHandler);\n\t\t}\n\n\t\tparser.setParent(start, functionFeature);\n\t\treturn functionFeature;\n\t});\n\n\t_parser.addFeature(\"set\", function (parser, runtime, tokens) {\n\t\tlet setCmd = parser.parseElement(\"setCommand\", tokens);\n\t\tif (setCmd) {\n\t\t\tif (setCmd.target.scope !== \"element\") {\n\t\t\t\tparser.raiseParseError(tokens, \"variables declared at the feature level must be element scoped.\");\n\t\t\t}\n\t\t\tlet setFeature = {\n\t\t\t\tstart: setCmd,\n\t\t\t\tinstall: function (target, source) {\n\t\t\t\t\tsetCmd && setCmd.execute(runtime.makeContext(target, setFeature, target, null));\n\t\t\t\t},\n\t\t\t};\n\t\t\tparser.ensureTerminated(setCmd);\n\t\t\treturn setFeature;\n\t\t}\n\t});\n\n\t_parser.addFeature(\"init\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"init\")) return;\n\n\t\tvar start = parser.requireElement(\"commandList\", tokens);\n\t\tvar initFeature = {\n\t\t\tstart: start,\n\t\t\tinstall: function (target, source) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tstart && start.execute(runtime.makeContext(target, initFeature, target, null));\n\t\t\t\t}, 0);\n\t\t\t},\n\t\t};\n\n\t\t// terminate body\n\t\tparser.ensureTerminated(start);\n\t\tparser.setParent(start, initFeature);\n\t\treturn initFeature;\n\t});\n\n\t_parser.addFeature(\"worker\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"worker\")) {\n\t\t\tparser.raiseParseError(\n\t\t\t\ttokens,\n\t\t\t\t\"In order to use the 'worker' feature, include \" +\n\t\t\t\t\t\"the _hyperscript worker plugin. See \" +\n\t\t\t\t\t\"https://hyperscript.org/features/worker/ for \" +\n\t\t\t\t\t\"more info.\"\n\t\t\t);\n\t\t}\n\t});\n\n\t_parser.addFeature(\"behavior\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"behavior\")) return;\n\t\tvar path = parser.requireElement(\"dotOrColonPath\", tokens).evaluate();\n\t\tvar nameSpace = path.split(\".\");\n\t\tvar name = nameSpace.pop();\n\n\t\tvar formalParams = [];\n\t\tif (tokens.matchOpToken(\"(\") && !tokens.matchOpToken(\")\")) {\n\t\t\tdo {\n\t\t\t\tformalParams.push(tokens.requireTokenType(\"IDENTIFIER\").value);\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\")\");\n\t\t}\n\t\tvar hs = parser.requireElement(\"hyperscript\", tokens);\n\t\tfor (var i = 0; i < hs.features.length; i++) {\n\t\t\tvar feature = hs.features[i];\n\t\t\tfeature.behavior = path;\n\t\t}\n\n\t\treturn {\n\t\t\tinstall: function (target, source) {\n\t\t\t\truntime.assignToNamespace(\n\t\t\t\t\tglobalScope.document && globalScope.document.body,\n\t\t\t\t\tnameSpace,\n\t\t\t\t\tname,\n\t\t\t\t\tfunction (target, source, innerArgs) {\n\t\t\t\t\t\tvar internalData = runtime.getInternalData(target);\n\t\t\t\t\t\tvar elementScope = getOrInitObject(internalData, path + \"Scope\");\n\t\t\t\t\t\tfor (var i = 0; i < formalParams.length; i++) {\n\t\t\t\t\t\t\telementScope[formalParams[i]] = innerArgs[formalParams[i]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ths.apply(target, source);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addFeature(\"install\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"install\")) return;\n\t\tvar behaviorPath = parser.requireElement(\"dotOrColonPath\", tokens).evaluate();\n\t\tvar behaviorNamespace = behaviorPath.split(\".\");\n\t\tvar args = parser.parseElement(\"namedArgumentList\", tokens);\n\n\t\tvar installFeature;\n\t\treturn (installFeature = {\n\t\t\tinstall: function (target, source) {\n\t\t\t\truntime.unifiedEval(\n\t\t\t\t\t{\n\t\t\t\t\t\targs: [args],\n\t\t\t\t\t\top: function (ctx, args) {\n\t\t\t\t\t\t\tvar behavior = globalScope;\n\t\t\t\t\t\t\tfor (var i = 0; i < behaviorNamespace.length; i++) {\n\t\t\t\t\t\t\t\tbehavior = behavior[behaviorNamespace[i]];\n\t\t\t\t\t\t\t\tif (typeof behavior !== \"object\" && typeof behavior !== \"function\")\n\t\t\t\t\t\t\t\t\tthrow new Error(\"No such behavior defined as \" + behaviorPath);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!(behavior instanceof Function))\n\t\t\t\t\t\t\t\tthrow new Error(behaviorPath + \" is not a behavior\");\n\n\t\t\t\t\t\t\tbehavior(target, source, args);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\truntime.makeContext(target, installFeature, target)\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t});\n\n\t_parser.addGrammarElement(\"jsBody\", function (parser, runtime, tokens) {\n\t\tvar jsSourceStart = tokens.currentToken().start;\n\t\tvar jsLastToken = tokens.currentToken();\n\n\t\tvar funcNames = [];\n\t\tvar funcName = \"\";\n\t\tvar expectFunctionDeclaration = false;\n\t\twhile (tokens.hasMore()) {\n\t\t\tjsLastToken = tokens.consumeToken();\n\t\t\tvar peek = tokens.token(0, true);\n\t\t\tif (peek.type === \"IDENTIFIER\" && peek.value === \"end\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (expectFunctionDeclaration) {\n\t\t\t\tif (jsLastToken.type === \"IDENTIFIER\" || jsLastToken.type === \"NUMBER\") {\n\t\t\t\t\tfuncName += jsLastToken.value;\n\t\t\t\t} else {\n\t\t\t\t\tif (funcName !== \"\") funcNames.push(funcName);\n\t\t\t\t\tfuncName = \"\";\n\t\t\t\t\texpectFunctionDeclaration = false;\n\t\t\t\t}\n\t\t\t} else if (jsLastToken.type === \"IDENTIFIER\" && jsLastToken.value === \"function\") {\n\t\t\t\texpectFunctionDeclaration = true;\n\t\t\t}\n\t\t}\n\t\tvar jsSourceEnd = jsLastToken.end + 1;\n\n\t\treturn {\n\t\t\ttype: \"jsBody\",\n\t\t\texposedFunctionNames: funcNames,\n\t\t\tjsSource: tokens.source.substring(jsSourceStart, jsSourceEnd),\n\t\t};\n\t});\n\n\t_parser.addFeature(\"js\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"js\")) return;\n\t\tvar jsBody = parser.requireElement(\"jsBody\", tokens);\n\n\t\tvar jsSource =\n\t\t\tjsBody.jsSource +\n\t\t\t\"\\nreturn { \" +\n\t\t\tjsBody.exposedFunctionNames\n\t\t\t\t.map(function (name) {\n\t\t\t\t\treturn name + \":\" + name;\n\t\t\t\t})\n\t\t\t\t.join(\",\") +\n\t\t\t\" } \";\n\t\tvar func = new Function(jsSource);\n\n\t\treturn {\n\t\t\tjsSource: jsSource,\n\t\t\tfunction: func,\n\t\t\texposedFunctionNames: jsBody.exposedFunctionNames,\n\t\t\tinstall: function () {\n\t\t\t\tmergeObjects(globalScope, func());\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addCommand(\"js\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"js\")) return;\n\t\t// Parse inputs\n\t\tvar inputs = [];\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tif (tokens.matchOpToken(\")\")) {\n\t\t\t\t// empty input list\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tvar inp = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t\t\tinputs.push(inp.value);\n\t\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\t\ttokens.requireOpToken(\")\");\n\t\t\t}\n\t\t}\n\n\t\tvar jsBody = parser.requireElement(\"jsBody\", tokens);\n\t\ttokens.matchToken(\"end\");\n\n\t\tvar func = varargConstructor(Function, inputs.concat([jsBody.jsSource]));\n\n\t\tvar command = {\n\t\t\tjsSource: jsBody.jsSource,\n\t\t\tfunction: func,\n\t\t\tinputs: inputs,\n\t\t\top: function (context) {\n\t\t\t\tvar args = [];\n\t\t\t\tinputs.forEach(function (input) {\n\t\t\t\t\targs.push(runtime.resolveSymbol(input, context, 'default'));\n\t\t\t\t});\n\t\t\t\tvar result = func.apply(globalScope, args);\n\t\t\t\tif (result && typeof result.then === \"function\") {\n\t\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\t\tresult.then(function (actualResult) {\n\t\t\t\t\t\t\tcontext.result = actualResult;\n\t\t\t\t\t\t\tresolve(runtime.findNext(this, context));\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tcontext.result = result;\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\treturn command;\n\t});\n\n\t_parser.addCommand(\"async\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"async\")) return;\n\t\tif (tokens.matchToken(\"do\")) {\n\t\t\tvar body = parser.requireElement(\"commandList\", tokens);\n\n\t\t\t// Append halt\n\t\t\tvar end = body;\n\t\t\twhile (end.next) end = end.next;\n\t\t\tend.next = runtime.HALT;\n\n\t\t\ttokens.requireToken(\"end\");\n\t\t} else {\n\t\t\tvar body = parser.requireElement(\"command\", tokens);\n\t\t}\n\t\tvar command = {\n\t\t\tbody: body,\n\t\t\top: function (context) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tbody.execute(context);\n\t\t\t\t});\n\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t},\n\t\t};\n\t\tparser.setParent(body, command);\n\t\treturn command;\n\t});\n\n\t_parser.addCommand(\"tell\", function (parser, runtime, tokens) {\n\t\tvar startToken = tokens.currentToken();\n\t\tif (!tokens.matchToken(\"tell\")) return;\n\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\tvar body = parser.requireElement(\"commandList\", tokens);\n\t\tif (tokens.hasMore() && !parser.featureStart(tokens.currentToken())) {\n\t\t\ttokens.requireToken(\"end\");\n\t\t}\n\t\tvar slot = \"tell_\" + startToken.start;\n\t\tvar tellCmd = {\n\t\t\tvalue: value,\n\t\t\tbody: body,\n\t\t\targs: [value],\n\t\t\tresolveNext: function (context) {\n\t\t\t\tvar iterator = context.meta.iterators[slot];\n\t\t\t\tif (iterator.index < iterator.value.length) {\n\t\t\t\t\tcontext.beingTold = iterator.value[iterator.index++];\n\t\t\t\t\treturn body;\n\t\t\t\t} else {\n\t\t\t\t\t// restore original me\n\t\t\t\t\tcontext.beingTold = iterator.originalBeingTold;\n\t\t\t\t\tif (this.next) {\n\t\t\t\t\t\treturn this.next;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn runtime.findNext(this.parent, context);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\top: function (context, value) {\n\t\t\t\tif (value == null) {\n\t\t\t\t\tvalue = [];\n\t\t\t\t} else if (!(Array.isArray(value) || value instanceof NodeList)) {\n\t\t\t\t\tvalue = [value];\n\t\t\t\t}\n\t\t\t\tcontext.meta.iterators[slot] = {\n\t\t\t\t\toriginalBeingTold: context.beingTold,\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tvalue: value,\n\t\t\t\t};\n\t\t\t\treturn this.resolveNext(context);\n\t\t\t},\n\t\t};\n\t\tparser.setParent(body, tellCmd);\n\t\treturn tellCmd;\n\t});\n\n\t_parser.addCommand(\"wait\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"wait\")) return;\n\t\tvar command;\n\n\t\t// wait on event\n\t\tif (tokens.matchToken(\"for\")) {\n\t\t\ttokens.matchToken(\"a\"); // optional \"a\"\n\t\t\tvar events = [];\n\t\t\tdo {\n\t\t\t\tvar lookahead = tokens.token(0);\n\t\t\t\tif (lookahead.type === 'NUMBER' || lookahead.type === 'L_PAREN') {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttime: parser.requireElement('timeExpression', tokens).evaluate() // TODO: do we want to allow async here?\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tname: _parser.requireElement(\"dotOrColonPath\", tokens, \"Expected event name\").evaluate(),\n\t\t\t\t\t\targs: parseEventArgs(tokens),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} while (tokens.matchToken(\"or\"));\n\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\tvar on = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\n\t\t\t// wait on event\n\t\t\tcommand = {\n\t\t\t\tevent: events,\n\t\t\t\ton: on,\n\t\t\t\targs: [on],\n\t\t\t\top: function (context, on) {\n\t\t\t\t\tvar target = on ? on : context.me;\n\t\t\t\t\tif (!(target instanceof EventTarget))\n\t\t\t\t\t\tthrow new Error(\"Not a valid event target: \" + this.on.sourceFor());\n\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\tvar resolved = false;\n\t\t\t\t\t\tfor (const eventInfo of events) {\n\t\t\t\t\t\t\tvar listener = (event) => {\n\t\t\t\t\t\t\t\tcontext.result = event;\n\t\t\t\t\t\t\t\tfor (const arg of eventInfo.args) {\n\t\t\t\t\t\t\t\t\tcontext[arg.value] =\n\t\t\t\t\t\t\t\t\t\tevent[arg.value] || (event.detail ? event.detail[arg.value] : null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\t\t\t\tresolve(runtime.findNext(this, context));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (eventInfo.name) target.addEventListener(eventInfo.name, listener, { once: true });\n\t\t\t\t\t\t\telse if (eventInfo.time) setTimeout(listener, eventInfo.time, eventInfo.time)\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t} else {\n\t\t\tvar time;\n\t\t\tif (tokens.matchToken(\"a\")) {\n\t\t\t\ttokens.requireToken(\"tick\");\n\t\t\t\ttime = 0;\n\t\t\t} else {\n\t\t\t\ttime = _parser.requireElement(\"timeExpression\", tokens);\n\t\t\t}\n\n\t\t\tcommand = {\n\t\t\t\ttype: \"waitCmd\",\n\t\t\t\ttime: time,\n\t\t\t\targs: [time],\n\t\t\t\top: function (context, timeValue) {\n\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tresolve(runtime.findNext(this, context));\n\t\t\t\t\t\t}, timeValue);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texecute: function (context) {\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t}\n\t});\n\n\t// TODO - colon path needs to eventually become part of ruby-style symbols\n\t_parser.addGrammarElement(\"dotOrColonPath\", function (parser, runtime, tokens) {\n\t\tvar root = tokens.matchTokenType(\"IDENTIFIER\");\n\t\tif (root) {\n\t\t\tvar path = [root.value];\n\n\t\t\tvar separator = tokens.matchOpToken(\".\") || tokens.matchOpToken(\":\");\n\t\t\tif (separator) {\n\t\t\t\tdo {\n\t\t\t\t\tpath.push(tokens.requireTokenType(\"IDENTIFIER\", \"NUMBER\").value);\n\t\t\t\t} while (tokens.matchOpToken(separator.value));\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: \"dotOrColonPath\",\n\t\t\t\tpath: path,\n\t\t\t\tevaluate: function () {\n\t\t\t\t\treturn path.join(separator ? separator.value : \"\");\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\n\t_parser.addGrammarElement(\"eventName\", function (parser, runtime, tokens) {\n\t\tvar token;\n\t\tif ((token = tokens.matchTokenType(\"STRING\"))) {\n\t\t\treturn {\n\t\t\t\tevaluate: function() {\n\t\t\t\t\treturn token.value;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn parser.parseElement(\"dotOrColonPath\", tokens);\n\t});\n\n\tfunction parseSendCmd(cmdType, parser, runtime, tokens) {\n\t\tvar eventName = parser.requireElement(\"eventName\", tokens);\n\n\t\tvar details = parser.parseElement(\"namedArgumentList\", tokens);\n\t\tif ((cmdType === \"send\" && tokens.matchToken(\"to\")) ||\n\t\t\t(cmdType === \"trigger\" && tokens.matchToken(\"on\"))) {\n\t\t\tvar toExpr = parser.requireElement(\"expression\", tokens);\n\t\t} else {\n\t\t\tvar toExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t}\n\n\t\tvar sendCmd = {\n\t\t\teventName: eventName,\n\t\t\tdetails: details,\n\t\t\tto: toExpr,\n\t\t\targs: [toExpr, eventName, details],\n\t\t\top: function (context, to, eventName, details) {\n\t\t\t\truntime.nullCheck(to, toExpr);\n\t\t\t\truntime.forEach(to, function (target) {\n\t\t\t\t\truntime.triggerEvent(target, eventName, details ? details : {});\n\t\t\t\t});\n\t\t\t\treturn runtime.findNext(sendCmd, context);\n\t\t\t},\n\t\t};\n\t\treturn sendCmd;\n\t}\n\n\t_parser.addCommand(\"trigger\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"trigger\")) {\n\t\t\treturn parseSendCmd(\"trigger\", parser, runtime, tokens);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"send\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"send\")) {\n\t\t\treturn parseSendCmd(\"send\", parser, runtime, tokens);\n\t\t}\n\t});\n\n\tvar parseReturnFunction = function (parser, runtime, tokens, returnAValue) {\n\t\tif (returnAValue) {\n\t\t\tif (parser.commandBoundary(tokens.currentToken())) {\n\t\t\t\tparser.raiseParseError(tokens, \"'return' commands must return a value. If you do not wish to return a value, use 'exit' instead.\");\n\t\t\t} else {\n\t\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\t\t}\n\n\t\tvar returnCmd = {\n\t\t\tvalue: value,\n\t\t\targs: [value],\n\t\t\top: function (context, value) {\n\t\t\t\tvar resolve = context.meta.resolve;\n\t\t\t\tcontext.meta.returned = true;\n\t\t\t\tcontext.meta.returnValue = value;\n\t\t\t\tif (resolve) {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tresolve(value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn runtime.HALT;\n\t\t\t},\n\t\t};\n\t\treturn returnCmd;\n\t};\n\n\t_parser.addCommand(\"return\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"return\")) {\n\t\t\treturn parseReturnFunction(parser, runtime, tokens, true);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"exit\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"exit\")) {\n\t\t\treturn parseReturnFunction(parser, runtime, tokens, false);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"halt\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"halt\")) {\n\t\t\tif (tokens.matchToken(\"the\")) {\n\t\t\t\ttokens.requireToken(\"event\");\n\t\t\t\t// optional possessive\n\t\t\t\tif (tokens.matchOpToken(\"'\")) {\n\t\t\t\t\ttokens.requireToken(\"s\");\n\t\t\t\t}\n\t\t\t\tvar keepExecuting = true;\n\t\t\t}\n\t\t\tif (tokens.matchToken(\"bubbling\")) {\n\t\t\t\tvar bubbling = true;\n\t\t\t} else if (tokens.matchToken(\"default\")) {\n\t\t\t\tvar haltDefault = true;\n\t\t\t}\n\t\t\tvar exit = parseReturnFunction(parser, runtime, tokens, false);\n\n\t\t\tvar haltCmd = {\n\t\t\t\tkeepExecuting: true,\n\t\t\t\tbubbling: bubbling,\n\t\t\t\thaltDefault: haltDefault,\n\t\t\t\texit: exit,\n\t\t\t\top: function (ctx) {\n\t\t\t\t\tif (ctx.event) {\n\t\t\t\t\t\tif (bubbling) {\n\t\t\t\t\t\t\tctx.event.stopPropagation();\n\t\t\t\t\t\t} else if (haltDefault) {\n\t\t\t\t\t\t\tctx.event.preventDefault();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.event.stopPropagation();\n\t\t\t\t\t\t\tctx.event.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (keepExecuting) {\n\t\t\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn exit;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn haltCmd;\n\t\t}\n\t});\n\n\t_parser.addCommand(\"log\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"log\")) return;\n\t\tvar exprs = [parser.parseElement(\"expression\", tokens)];\n\t\twhile (tokens.matchOpToken(\",\")) {\n\t\t\texprs.push(parser.requireElement(\"expression\", tokens));\n\t\t}\n\t\tif (tokens.matchToken(\"with\")) {\n\t\t\tvar withExpr = parser.requireElement(\"expression\", tokens);\n\t\t}\n\t\tvar logCmd = {\n\t\t\texprs: exprs,\n\t\t\twithExpr: withExpr,\n\t\t\targs: [withExpr, exprs],\n\t\t\top: function (ctx, withExpr, values) {\n\t\t\t\tif (withExpr) {\n\t\t\t\t\twithExpr.apply(null, values);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log.apply(null, values);\n\t\t\t\t}\n\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t},\n\t\t};\n\t\treturn logCmd;\n\t});\n\n\t_parser.addCommand(\"throw\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"throw\")) return;\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\tvar throwCmd = {\n\t\t\texpr: expr,\n\t\t\targs: [expr],\n\t\t\top: function (ctx, expr) {\n\t\t\t\truntime.registerHyperTrace(ctx, expr);\n\t\t\t\tthrow expr;\n\t\t\t},\n\t\t};\n\t\treturn throwCmd;\n\t});\n\n\tvar parseCallOrGet = function (parser, runtime, tokens) {\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\tvar callCmd = {\n\t\t\texpr: expr,\n\t\t\targs: [expr],\n\t\t\top: function (context, result) {\n\t\t\t\tcontext.result = result;\n\t\t\t\treturn runtime.findNext(callCmd, context);\n\t\t\t},\n\t\t};\n\t\treturn callCmd;\n\t};\n\t_parser.addCommand(\"call\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"call\")) return;\n\t\tvar call = parseCallOrGet(parser, runtime, tokens);\n\t\tif (call.expr && call.expr.type !== \"functionCall\") {\n\t\t\tparser.raiseParseError(tokens, \"Must be a function invocation\");\n\t\t}\n\t\treturn call;\n\t});\n\t_parser.addCommand(\"get\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"get\")) {\n\t\t\treturn parseCallOrGet(parser, runtime, tokens);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"make\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"make\")) return;\n\t\ttokens.matchToken(\"a\") || tokens.matchToken(\"an\");\n\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\n\t\tvar args = [];\n\t\tif (expr.type !== \"queryRef\" && tokens.matchToken(\"from\")) {\n\t\t\tdo {\n\t\t\t\targs.push(parser.requireElement(\"expression\", tokens));\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t}\n\n\t\tif (tokens.matchToken(\"called\")) {\n\t\t\tvar name = tokens.requireTokenType(\"IDENTIFIER\").value;\n\t\t}\n\n\t\tvar command;\n\t\tif (expr.type === \"queryRef\") {\n\t\t\tcommand = {\n\t\t\t\top: function (ctx) {\n\t\t\t\t\tvar match,\n\t\t\t\t\t\ttagname = \"div\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tclasses = [];\n\t\t\t\t\tvar re = /(?:(^|#|\\.)([^#\\. ]+))/g;\n\t\t\t\t\twhile ((match = re.exec(expr.css))) {\n\t\t\t\t\t\tif (match[1] === \"\") tagname = match[2].trim();\n\t\t\t\t\t\telse if (match[1] === \"#\") id = match[2].trim();\n\t\t\t\t\t\telse classes.push(match[2].trim());\n\t\t\t\t\t}\n\n\t\t\t\t\tvar result = document.createElement(tagname);\n\t\t\t\t\tif (id !== undefined) result.id = id;\n\t\t\t\t\tfor (var i = 0; i < classes.length; i++) {\n\t\t\t\t\t\tvar cls = classes[i];\n\t\t\t\t\t\tresult.classList.add(cls)\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.result = result;\n\t\t\t\t\tif (name) ctx[name] = result;\n\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t} else {\n\t\t\tcommand = {\n\t\t\t\targs: [expr, args],\n\t\t\t\top: function (ctx, expr, args) {\n\t\t\t\t\tctx.result = varargConstructor(expr, args);\n\t\t\t\t\tif (name) ctx[name] = ctx.result;\n\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"pseudoCommand\", function (parser, runtime, tokens) {\n\n\t\ttry {\n\t\t\tvar expr = parser.requireElement(\"primaryExpression\", tokens);\n\t\t} finally {\n\t\t\ttokens.popFollow();\n\t\t}\n\t\tif (expr.type !== \"functionCall\" && expr.root.type !== \"symbol\" && expr.root.root != null) {\n\t\t\tparser.raiseParseError(tokens, \"Implicit function calls must start with a simple function\");\n\t\t}\n\n\t\tvar functionName = expr.root.name;\n\n\t\tif (tokens.matchAnyToken(\"the\", \"to\", \"on\", \"with\", \"into\", \"from\", \"at\")) {\n\t\t\tvar target = parser.requireElement(\"expression\", tokens);\n\t\t} else if (tokens.matchToken(\"me\")) {\n\t\t\tvar target = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t}\n\t\tvar functionArgs = expr.argExressions;\n\n\t\t/** @type {GrammarElement} */\n\t\tvar pseudoCommand = {\n\t\t\ttype: \"pseudoCommand\",\n\t\t\texpr: expr,\n\t\t\targs: [target, functionArgs],\n\t\t\top: function (context, target, args) {\n\t\t\t\tif (target) {\n\t\t\t\t\tvar func = target[functionName];\n\t\t\t\t} else {\n\t\t\t\t\tvar func = runtime.resolveSymbol(functionName, context);\n\t\t\t\t}\n\t\t\t\tif (func.hyperfunc) {\n\t\t\t\t\targs.push(context);\n\t\t\t\t}\n\t\t\t\tvar result = func.apply(target, args);\n\t\t\t\tcontext.result = result;\n\t\t\t\treturn runtime.findNext(pseudoCommand, context);\n\t\t\t},\n\t\t\texecute: function (context) {\n\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t},\n\t\t};\n\n\t\treturn pseudoCommand;\n\t});\n\n\t/**\n\t* @param {ParserObject} parser\n\t* @param {RuntimeObject} runtime\n\t* @param {TokensObject} tokens\n\t* @param {*} target\n\t* @param {*} value\n\t* @returns\n\t*/\n\tvar makeSetter = function (parser, runtime, tokens, target, value) {\n\t\tvar symbolWrite = target.type === \"symbol\";\n\t\tvar attributeWrite = target.type === \"attributeRef\";\n\t\tif (!attributeWrite && !symbolWrite && target.root == null) {\n\t\t\tparser.raiseParseError(tokens, \"Can only put directly into symbols, not references\");\n\t\t}\n\n\t\tvar rootElt = null;\n\t\tvar prop = null;\n\t\tif (symbolWrite) {\n\t\t\t// rootElt is null\n\t\t} else if (attributeWrite) {\n\t\t\trootElt = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\tvar attribute = target;\n\t\t} else {\n\t\t\tprop = target.prop ? target.prop.value : null;\n\t\t\tvar attribute = target.attribute;\n\t\t\trootElt = target.root;\n\t\t}\n\n\t\t/** @type {GrammarElement} */\n\t\tvar setCmd = {\n\t\t\ttarget: target,\n\t\t\tsymbolWrite: symbolWrite,\n\t\t\tvalue: value,\n\t\t\targs: [rootElt, value],\n\t\t\top: function (context, root, valueToSet) {\n\t\t\t\tif (symbolWrite) {\n\t\t\t\t\truntime.setSymbol(target.name, context, target.scope, valueToSet);\n\t\t\t\t} else {\n\t\t\t\t\truntime.nullCheck(root, rootElt);\n\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\tif (attribute) {\n\t\t\t\t\t\t\tif (valueToSet == null) {\n\t\t\t\t\t\t\t\telt.removeAttribute(attribute.name);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telt.setAttribute(attribute.name, valueToSet);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telt[prop] = valueToSet;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t},\n\t\t};\n\t\treturn setCmd;\n\t};\n\n\t_parser.addCommand(\"default\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"default\")) return;\n\t\tvar target = parser.requireElement(\"assignableExpression\", tokens);\n\t\ttokens.requireToken(\"to\");\n\n\t\tvar value = parser.requireElement(\"expression\", tokens);\n\n\t\t/** @type {GrammarElement} */\n\t\tvar setter = makeSetter(parser, runtime, tokens, target, value);\n\t\tvar defaultCmd = {\n\t\t\ttarget: target,\n\t\t\tvalue: value,\n\t\t\tsetter: setter,\n\t\t\targs: [target],\n\t\t\top: function (context, target) {\n\t\t\t\tif (target) {\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t} else {\n\t\t\t\t\treturn setter;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tsetter.parent = defaultCmd;\n\t\treturn defaultCmd;\n\t});\n\n\t_parser.addCommand(\"set\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"set\")) return;\n\t\tif (tokens.currentToken().type === \"L_BRACE\") {\n\t\t\tvar obj = parser.requireElement(\"objectLiteral\", tokens);\n\t\t\ttokens.requireToken(\"on\");\n\t\t\tvar target = parser.requireElement(\"expression\", tokens);\n\n\t\t\tvar command = {\n\t\t\t\tobjectLiteral: obj,\n\t\t\t\ttarget: target,\n\t\t\t\targs: [obj, target],\n\t\t\t\top: function (ctx, obj, target) {\n\t\t\t\t\tmergeObjects(target, obj);\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t}\n\n\t\ttry {\n\t\t\ttokens.pushFollow(\"to\");\n\t\t\tvar target = parser.requireElement(\"assignableExpression\", tokens);\n\t\t} finally {\n\t\t\ttokens.popFollow();\n\t\t}\n\t\ttokens.requireToken(\"to\");\n\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\treturn makeSetter(parser, runtime, tokens, target, value);\n\t});\n\n\t_parser.addCommand(\"if\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"if\")) return;\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\ttokens.matchToken(\"then\"); // optional 'then'\n\t\tvar trueBranch = parser.parseElement(\"commandList\", tokens);\n\t\tif (tokens.matchToken(\"else\") || tokens.matchToken(\"otherwise\")) {\n\t\t\tvar falseBranch = parser.parseElement(\"commandList\", tokens);\n\t\t}\n\t\tif (tokens.hasMore()) {\n\t\t\ttokens.requireToken(\"end\");\n\t\t}\n\n\t\t/** @type {GrammarElement} */\n\t\tvar ifCmd = {\n\t\t\texpr: expr,\n\t\t\ttrueBranch: trueBranch,\n\t\t\tfalseBranch: falseBranch,\n\t\t\targs: [expr],\n\t\t\top: function (context, exprValue) {\n\t\t\t\tif (exprValue) {\n\t\t\t\t\treturn trueBranch;\n\t\t\t\t} else if (falseBranch) {\n\t\t\t\t\treturn falseBranch;\n\t\t\t\t} else {\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tparser.setParent(trueBranch, ifCmd);\n\t\tparser.setParent(falseBranch, ifCmd);\n\t\treturn ifCmd;\n\t});\n\n\tvar parseRepeatExpression = function (parser, tokens, runtime, startedWithForToken) {\n\t\tvar innerStartToken = tokens.currentToken();\n\t\tvar identifier;\n\t\tif (tokens.matchToken(\"for\") || startedWithForToken) {\n\t\t\tvar identifierToken = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\tidentifier = identifierToken.value;\n\t\t\ttokens.requireToken(\"in\");\n\t\t\tvar expression = parser.requireElement(\"expression\", tokens);\n\t\t} else if (tokens.matchToken(\"in\")) {\n\t\t\tidentifier = \"it\";\n\t\t\tvar expression = parser.requireElement(\"expression\", tokens);\n\t\t} else if (tokens.matchToken(\"while\")) {\n\t\t\tvar whileExpr = parser.requireElement(\"expression\", tokens);\n\t\t} else if (tokens.matchToken(\"until\")) {\n\t\t\tvar isUntil = true;\n\t\t\tif (tokens.matchToken(\"event\")) {\n\t\t\t\tvar evt = _parser.requireElement(\"dotOrColonPath\", tokens, \"Expected event name\");\n\t\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\t\tvar on = parser.requireElement(\"expression\", tokens);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar whileExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!parser.commandBoundary(tokens.currentToken()) &&\n\t\t\t tokens.currentToken().value !== 'forever') {\n\t\t\t\tvar times = parser.requireElement(\"expression\", tokens);\n\t\t\t\ttokens.requireToken(\"times\");\n\t\t\t} else {\n\t\t\t\ttokens.matchToken(\"forever\"); // consume optional forever\n\t\t\t\tvar forever = true;\n\t\t\t}\n\t\t}\n\n\t\tif (tokens.matchToken(\"index\")) {\n\t\t\tvar identifierToken = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\tvar indexIdentifier = identifierToken.value;\n\t\t}\n\n\t\tvar loop = parser.parseElement(\"commandList\", tokens);\n\t\tif (loop && evt) {\n\t\t\t// if this is an event based loop, wait a tick at the end of the loop so that\n\t\t\t// events have a chance to trigger in the loop condition o_O)))\n\t\t\tvar last = loop;\n\t\t\twhile (last.next) {\n\t\t\t\tlast = last.next;\n\t\t\t}\n\t\t\tvar waitATick = {\n\t\t\t\ttype: \"waitATick\",\n\t\t\t\top: function () {\n\t\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tresolve(runtime.findNext(waitATick));\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t\tlast.next = waitATick;\n\t\t}\n\t\tif (tokens.hasMore()) {\n\t\t\ttokens.requireToken(\"end\");\n\t\t}\n\n\t\tif (identifier == null) {\n\t\t\tidentifier = \"_implicit_repeat_\" + innerStartToken.start;\n\t\t\tvar slot = identifier;\n\t\t} else {\n\t\t\tvar slot = identifier + \"_\" + innerStartToken.start;\n\t\t}\n\n\t\tvar repeatCmd = {\n\t\t\tidentifier: identifier,\n\t\t\tindexIdentifier: indexIdentifier,\n\t\t\tslot: slot,\n\t\t\texpression: expression,\n\t\t\tforever: forever,\n\t\t\ttimes: times,\n\t\t\tuntil: isUntil,\n\t\t\tevent: evt,\n\t\t\ton: on,\n\t\t\twhileExpr: whileExpr,\n\t\t\tresolveNext: function () {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tloop: loop,\n\t\t\targs: [whileExpr, times],\n\t\t\top: function (context, whileValue, times) {\n\t\t\t\tvar iteratorInfo = context.meta.iterators[slot];\n\t\t\t\tvar keepLooping = false;\n\t\t\t\tvar loopVal = null;\n\t\t\t\tif (this.forever) {\n\t\t\t\t\tkeepLooping = true;\n\t\t\t\t} else if (this.until) {\n\t\t\t\t\tif (evt) {\n\t\t\t\t\t\tkeepLooping = context.meta.iterators[slot].eventFired === false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkeepLooping = whileValue !== true;\n\t\t\t\t\t}\n\t\t\t\t} else if (whileExpr) {\n\t\t\t\t\tkeepLooping = whileValue;\n\t\t\t\t} else if (times) {\n\t\t\t\t\tkeepLooping = iteratorInfo.index < times;\n\t\t\t\t} else {\n\t\t\t\t\tvar nextValFromIterator = iteratorInfo.iterator.next();\n\t\t\t\t\tkeepLooping = !nextValFromIterator.done;\n\t\t\t\t\tloopVal = nextValFromIterator.value;\n\t\t\t\t}\n\n\t\t\t\tif (keepLooping) {\n\t\t\t\t\tif (iteratorInfo.value) {\n\t\t\t\t\t\tcontext.result = context[identifier] = loopVal;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.result = iteratorInfo.index;\n\t\t\t\t\t}\n\t\t\t\t\tif (indexIdentifier) {\n\t\t\t\t\t\tcontext[indexIdentifier] = iteratorInfo.index;\n\t\t\t\t\t}\n\t\t\t\t\titeratorInfo.index++;\n\t\t\t\t\treturn loop;\n\t\t\t\t} else {\n\t\t\t\t\tcontext.meta.iterators[slot] = null;\n\t\t\t\t\treturn runtime.findNext(this.parent, context);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tparser.setParent(loop, repeatCmd);\n\t\tvar repeatInit = {\n\t\t\tname: \"repeatInit\",\n\t\t\targs: [expression, evt, on],\n\t\t\top: function (context, value, event, on) {\n\t\t\t\tvar iteratorInfo = {\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\teventFired: false,\n\t\t\t\t};\n\t\t\t\tcontext.meta.iterators[slot] = iteratorInfo;\n\t\t\t\tif (value && value[Symbol.iterator]) {\n\t\t\t\t\titeratorInfo.iterator = value[Symbol.iterator]();\n\t\t\t\t}\n\t\t\t\tif (evt) {\n\t\t\t\t\tvar target = on || context.me;\n\t\t\t\t\ttarget.addEventListener(\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\t\tcontext.meta.iterators[slot].eventFired = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn repeatCmd; // continue to loop\n\t\t\t},\n\t\t\texecute: function (context) {\n\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t},\n\t\t};\n\t\tparser.setParent(repeatCmd, repeatInit);\n\t\treturn repeatInit;\n\t};\n\n\t_parser.addCommand(\"repeat\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"repeat\")) {\n\t\t\treturn parseRepeatExpression(parser, tokens, runtime, false);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"for\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"for\")) {\n\t\t\treturn parseRepeatExpression(parser, tokens, runtime, true);\n\t\t}\n\t});\n\n _parser.addCommand(\"continue\", function (parser, runtime, tokens) {\n\n if (!tokens.matchToken(\"continue\")) return;\n\n var command = {\n op: function (context) {\n\n // scan for the closest repeat statement\n for (var parent = this.parent ; true ; parent = parent.parent) {\n\n if (parent == undefined) {\n parser.raiseParseError(tokens, \"Command `continue` cannot be used outside of a `repeat` loop.\")\n }\n if (parent.loop != undefined) {\n return parent.resolveNext(context)\n }\n }\n }\n };\n return command;\n });\n\n\t_parser.addGrammarElement(\"stringLike\", function (parser, runtime, tokens) {\n\t\treturn _parser.parseAnyOf([\"string\", \"nakedString\"], tokens);\n\t});\n\n\t_parser.addCommand(\"append\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"append\")) return;\n\t\tvar targetExpr = null;\n\n\t\tvar value = parser.requireElement(\"expression\", tokens);\n\n\t\tvar implicitResultSymbol = {\n\t\t\ttype: \"symbol\",\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.resolveSymbol(\"result\", context);\n\t\t\t},\n\t\t};\n\n\t\tif (tokens.matchToken(\"to\")) {\n\t\t\ttargetExpr = parser.requireElement(\"expression\", tokens);\n\t\t} else {\n\t\t\ttargetExpr = implicitResultSymbol;\n\t\t}\n\n\t\tvar setter = null;\n\t\tif (targetExpr.type === \"symbol\" || targetExpr.type === \"attributeRef\" || targetExpr.root != null) {\n\t\t\tsetter = makeSetter(parser, runtime, tokens, targetExpr, implicitResultSymbol);\n\t\t}\n\n\t\tvar command = {\n\t\t\tvalue: value,\n\t\t\ttarget: targetExpr,\n\t\t\targs: [targetExpr, value],\n\t\t\top: function (context, target, value) {\n\t\t\t\tif (Array.isArray(target)) {\n\t\t\t\t\ttarget.push(value);\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t} else if (target instanceof Element) {\n\t\t\t\t\ttarget.innerHTML += value;\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t} else if(setter) {\n\t\t\t\t\tcontext.result = (target || \"\") + value;\n\t\t\t\t\treturn setter;\n\t\t\t\t} else {\n\t\t\t\t\tthrow Error(\"Unable to append a value!\")\n\t\t\t\t}\n\t\t\t},\n\t\t\texecute: function (context) {\n\t\t\t\treturn runtime.unifiedExec(this, context/*, value, target*/);\n\t\t\t},\n\t\t};\n\n\t\tif (setter != null) {\n\t\t\tsetter.parent = command;\n\t\t}\n\n\t\treturn command;\n\t});\n\n\t_parser.addCommand(\"increment\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"increment\")) return;\n\t\tvar amount;\n\n\t\t// This is optional. Defaults to \"result\"\n\t\tvar target = parser.parseElement(\"assignableExpression\", tokens);\n\n\t\t// This is optional. Defaults to 1.\n\t\tif (tokens.matchToken(\"by\")) {\n\t\t\tamount = parser.requireElement(\"expression\", tokens);\n\t\t}\n\n\t\tvar implicitIncrementOp = {\n\t\t\ttype: \"implicitIncrementOp\",\n\t\t\ttarget: target,\n\t\t\targs: [target, amount],\n\t\t\top: function (context, targetValue, amount) {\n\t\t\t\ttargetValue = targetValue ? parseFloat(targetValue) : 0;\n\t\t\t\tamount = amount ? parseFloat(amount) : 1;\n\t\t\t\tvar newValue = targetValue + amount;\n\t\t\t\tcontext.result = newValue;\n\t\t\t\treturn newValue;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t}\n\t\t};\n\n\t\treturn makeSetter(parser, runtime, tokens, target, implicitIncrementOp);\n\t});\n\n\t_parser.addCommand(\"decrement\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"decrement\")) return;\n\t\tvar amount;\n\n\t\t// This is optional. Defaults to \"result\"\n\t\tvar target = parser.parseElement(\"assignableExpression\", tokens);\n\n\t\t// This is optional. Defaults to 1.\n\t\tif (tokens.matchToken(\"by\")) {\n\t\t\tamount = parser.requireElement(\"expression\", tokens);\n\t\t}\n\n\t\tvar implicitDecrementOp = {\n\t\t\ttype: \"implicitDecrementOp\",\n\t\t\ttarget: target,\n\t\t\targs: [target, amount],\n\t\t\top: function (context, targetValue, amount) {\n\t\t\t\ttargetValue = targetValue ? parseFloat(targetValue) : 0;\n\t\t\t\tamount = amount ? parseFloat(amount) : 1;\n\t\t\t\tvar newValue = targetValue - amount;\n\t\t\t\tcontext.result = newValue;\n\t\t\t\treturn newValue;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t}\n\t\t};\n\n\t\treturn makeSetter(parser, runtime, tokens, target, implicitDecrementOp);\n\t});\n\n\t_parser.addGrammarElement(\"fetchArgumentList\", function (parser, runtime, tokens) {\n\t\tvar fields = [];\n\t\tvar valueExpressions = [];\n\t\tif (tokens.currentToken().type === \"IDENTIFIER\") {\n\t\t\tdo {\n\t\t\t\tvar name = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t\ttokens.requireOpToken(\":\");\n\t\t\t\tif (name.value === \"timeout\") {\n\t\t\t\t\tvar value = parser.requireElement(\"timeExpression\", tokens);\n\t\t\t\t} else {\n\t\t\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\t\t\t}\n\t\t\t\tvalueExpressions.push(value);\n\t\t\t\tfields.push({ name: name, value: value });\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t}\n\t\treturn {\n\t\t\ttype: \"fetchArgumentList\",\n\t\t\tfields: fields,\n\t\t\targs: [valueExpressions],\n\t\t\top: function (context, values) {\n\t\t\t\tvar returnVal = { _namedArgList_: true };\n\t\t\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\t\t\tvar field = fields[i];\n\t\t\t\t\treturnVal[field.name.value] = values[i];\n\t\t\t\t}\n\t\t\t\treturn returnVal;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\n\t_parser.addCommand(\"fetch\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"fetch\")) return;\n\t\tvar url = parser.requireElement(\"stringLike\", tokens);\n\n\t\tif (tokens.matchToken(\"with\")) {\n\t\t\tvar args = parser.parseElement(\"fetchArgumentList\", tokens);\n\t\t} else {\n\t\t\tvar args = parser.parseElement(\"objectLiteral\", tokens);\n\t\t}\n\n\t\tvar type = \"text\";\n\t\tvar conversion;\n\t\tif (tokens.matchToken(\"as\")) {\n\t\t\ttokens.matchToken(\"a\") || tokens.matchToken(\"an\");\n\t\t\tif (tokens.matchToken(\"json\") || tokens.matchToken(\"Object\")) {\n\t\t\t\ttype = \"json\";\n\t\t\t} else if (tokens.matchToken(\"response\")) {\n\t\t\t\ttype = \"response\";\n\t\t\t} else if (tokens.matchToken(\"html\")) {\n\t\t\t\ttype = \"html\";\n\t\t\t} else if (tokens.matchToken(\"text\")) {\n\t\t\t\t// default, ignore\n\t\t\t} else {\n\t\t\t\tconversion = parser.requireElement(\"dotOrColonPath\", tokens).evaluate();\n\t\t\t}\n\t\t}\n\n\t\t/** @type {GrammarElement} */\n\t\tvar fetchCmd = {\n\t\t\turl: url,\n\t\t\targExpressions: args,\n\t\t\targs: [url, args],\n\t\t\top: function (context, url, args) {\n\t\t\t\tvar detail = args || {};\n\t\t\t\tdetail[\"sentBy\"] = context.me;\n\t\t\t\tdetail[\"headers\"] = detail[\"headers\"] || {}\n\t\t\t\tvar abortController = new AbortController();\n\t\t\t\tlet abortListener = context.me.addEventListener('fetch:abort', function(){\n\t\t\t\t\tabortController.abort();\n\t\t\t\t}, {once: true});\n\t\t\t\tdetail['signal'] = abortController.signal;\n\t\t\t\truntime.triggerEvent(context.me, \"hyperscript:beforeFetch\", detail);\n\t\t\t\truntime.triggerEvent(context.me, \"fetch:beforeRequest\", detail);\n\t\t\t\targs = detail;\n\t\t\t\tconsole.log(args);\n\t\t\t\tvar finished = false;\n\t\t\t\tif (args.timeout) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tif (!finished) {\n\t\t\t\t\t\t\tconsole.log(\"Aborting!\");\n\t\t\t\t\t\t\tabortController.abort();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, args.timeout);\n\t\t\t\t}\n\t\t\t\treturn fetch(url, args)\n\t\t\t\t\t.then(function (resp) {\n\t\t\t\t\t\tlet resultDetails = {response:resp};\n\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:afterResponse\", resultDetails);\n\t\t\t\t\t\tresp = resultDetails.response;\n\n\t\t\t\t\t\tif (type === \"response\") {\n\t\t\t\t\t\t\tcontext.result = resp;\n\t\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:afterRequest\", {result:resp});\n\t\t\t\t\t\t\tfinished = true;\n\t\t\t\t\t\t\treturn runtime.findNext(fetchCmd, context);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (type === \"json\") {\n\t\t\t\t\t\t\treturn resp.json().then(function (result) {\n\t\t\t\t\t\t\t\tcontext.result = result;\n\t\t\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:afterRequest\", {result});\n\t\t\t\t\t\t\t\tfinished = true;\n\t\t\t\t\t\t\t\treturn runtime.findNext(fetchCmd, context);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn resp.text().then(function (result) {\n\t\t\t\t\t\t\tif (conversion) result = runtime.convertValue(result, conversion);\n\n\t\t\t\t\t\t\tif (type === \"html\") result = runtime.convertValue(result, \"Fragment\");\n\n\t\t\t\t\t\t\tcontext.result = result;\n\t\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:afterRequest\", {result});\n\t\t\t\t\t\t\tfinished = true;\n\t\t\t\t\t\t\treturn runtime.findNext(fetchCmd, context);\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch(function (reason) {\n\t\t\t\t\t\tconsole.log(reason);\n\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:error\", {\n\t\t\t\t\t\t\treason: reason,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthrow reason;\n\t\t\t\t\t}).finally(function(){\n\t\t\t\t\t\tcontext.me.removeEventListener('fetch:abort', abortListener);\n\t\t\t\t\t});\n\t\t\t},\n\t\t};\n\t\treturn fetchCmd;\n\t});\n}\n\n//====================================================================\n// Initialization\n//====================================================================\nfunction ready(fn) {\n\tif (document.readyState !== \"loading\") {\n\t\tsetTimeout(fn);\n\t} else {\n\t\tdocument.addEventListener(\"DOMContentLoaded\", fn);\n\t}\n}\n\nfunction getMetaConfig() {\n\t/** @type {HTMLMetaElement} */\n\tvar element = document.querySelector('meta[name=\"htmx-config\"]');\n\tif (element) {\n\t\treturn parseJSON(element.content);\n\t} else {\n\t\treturn null;\n\t}\n}\n\nfunction mergeMetaConfig() {\n\tvar metaConfig = getMetaConfig();\n\tif (metaConfig) {\n\t\t_hyperscript.config = mergeObjects(_hyperscript.config, metaConfig);\n\t}\n}\n\nif (\"document\" in globalScope) {\n\t/** @type {HTMLScriptElement[]} */\n\tvar scripts = Array.from(document.querySelectorAll(\"script[type='text/hyperscript'][src]\"))\n\tPromise.all(\n\t\tscripts.map(function (script) {\n\t\t\treturn fetch(script.src)\n\t\t\t\t.then(function (res) {\n\t\t\t\t\treturn res.text();\n\t\t\t\t})\n\t\t\t\t.then(function (code) {\n\t\t\t\t\treturn _runtime.evaluate(code);\n\t\t\t\t});\n\t\t})\n\t).then(function () {\n\t\tready(function () {\n\t\t\tmergeMetaConfig();\n\t\t\t_runtime.processNode(document.documentElement);\n\t\t\tdocument.addEventListener(\"htmx:load\", function (/** @type {CustomEvent} */ evt) {\n\t\t\t\t_runtime.processNode(evt.detail.elt);\n\t\t\t});\n\t\t});\n\t});\n}\n\n//====================================================================\n// API\n//====================================================================\n/** @type {HyperscriptObject} */\nexport default _hyperscript = mergeObjects(\n\tfunction (str, ctx) {\n\t\treturn _runtime.evaluate(str, ctx); //OK\n\t},\n\t{\n\t\tinternals: {\n\t\t\tlexer: _lexer,\n\t\t\tparser: _parser,\n\t\t\truntime: _runtime,\n\t\t},\n\t\tElementCollection: ElementCollection,\n\t\taddFeature: function (keyword, definition) {\n\t\t\t_parser.addFeature(keyword, definition);\n\t\t},\n\t\taddCommand: function (keyword, definition) {\n\t\t\t_parser.addCommand(keyword, definition);\n\t\t},\n\t\taddLeafExpression: function (name, definition) {\n\t\t\t_parser.addLeafExpression(name, definition);\n\t\t},\n\t\taddIndirectExpression: function (name, definition) {\n\t\t\t_parser.addIndirectExpression(name, definition);\n\t\t},\n\t\tevaluate: _runtime.evaluate.bind(_runtime),\n\t\tparse: _runtime.parse.bind(_runtime),\n\t\tprocessNode: _runtime.processNode.bind(_runtime),\n\t\tconfig: {\n\t\t\tattributes: \"_, script, data-script\",\n\t\t\tdefaultTransition: \"all 500ms ease-in\",\n\t\t\tdisableSelector: \"[disable-scripting], [data-disable-scripting]\",\n\t\t\tconversions: CONVERSIONS,\n\t\t},\n\t}\n);\n","\nimport { mergeObjects } from \"../utils.js\";\n\nfunction genUUID() {\n\treturn \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\tv = c == \"x\" ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n}\n\nfunction createSocket(url) {\n\treturn new WebSocket(url.evaluate());\n}\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\n\t/** @type {(string | symbol)[]} */\n\tvar PROXY_BLACKLIST = [\"then\", \"catch\", \"length\", \"asyncWrapper\", \"toJSON\"];\n\n\t_hyperscript.addFeature(\"socket\", function (parser, runtime, tokens) {\n\t\tfunction getProxy(timeout) {\n\t\t\treturn new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget: function (obj, property) {\n\t\t\t\t\t\tif (PROXY_BLACKLIST.indexOf(property) >= 0) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t} else if (property === \"noTimeout\") {\n\t\t\t\t\t\t\treturn getProxy(-1);\n\t\t\t\t\t\t} else if (property === \"timeout\") {\n\t\t\t\t\t\t\treturn function (i) {\n\t\t\t\t\t\t\t\treturn getProxy(parseInt(i));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar uuid = genUUID();\n\t\t\t\t\t\t\t\tvar args = [];\n\t\t\t\t\t\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\t\t\t\t\t\targs.push(arguments[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar rpcInfo = {\n\t\t\t\t\t\t\t\t\tiid: uuid,\n\t\t\t\t\t\t\t\t\tfunction: property,\n\t\t\t\t\t\t\t\t\targs: args,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tsocket = socket ? socket : createSocket(url); //recreate socket if needed\n\t\t\t\t\t\t\t\tsocket.send(JSON.stringify(rpcInfo));\n\n\t\t\t\t\t\t\t\tvar promise = new Promise(function (resolve, reject) {\n\t\t\t\t\t\t\t\t\tpromises[uuid] = {\n\t\t\t\t\t\t\t\t\t\tresolve: resolve,\n\t\t\t\t\t\t\t\t\t\treject: reject,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (timeout >= 0) {\n\t\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\t\tif (promises[uuid]) {\n\t\t\t\t\t\t\t\t\t\t\tpromises[uuid].reject(\"Timed out\");\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdelete promises[uuid];\n\t\t\t\t\t\t\t\t\t}, timeout); // TODO configurable?\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn promise;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (tokens.matchToken(\"socket\")) {\n\t\t\tvar name = parser.requireElement(\"dotOrColonPath\", tokens);\n\t\t\tvar qualifiedName = name.evaluate();\n\t\t\tvar nameSpace = qualifiedName.split(\".\");\n\t\t\tvar socketName = nameSpace.pop();\n\n\t\t\tvar promises = {};\n\t\t\tvar url = parser.requireElement(\"stringLike\", tokens);\n\n\t\t\tvar defaultTimeout = 10000;\n\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\ttokens.requireToken(\"timeout\");\n\t\t\t\tdefaultTimeout = parser.requireElement(\"timeExpression\", tokens).evaluate();\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"on\")) {\n\t\t\t\ttokens.requireToken(\"message\");\n\t\t\t\tif (tokens.matchToken(\"as\")) {\n\t\t\t\t\ttokens.requireToken(\"json\");\n\t\t\t\t\tvar jsonMessages = true;\n\t\t\t\t}\n\t\t\t\tvar messageHandler = parser.requireElement(\"commandList\", tokens);\n\t\t\t\tvar implicitReturn = {\n\t\t\t\t\ttype: \"implicitReturn\",\n\t\t\t\t\top: function (context) {\n\t\t\t\t\t\treturn runtime.HALT;\n\t\t\t\t\t},\n\t\t\t\t\texecute: function (context) {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tvar end = messageHandler;\n\t\t\t\twhile (end.next) {\n\t\t\t\t\tend = end.next;\n\t\t\t\t}\n\t\t\t\tend.next = implicitReturn;\n\t\t\t\t// TODO set parent?\n\t\t\t\t// parser.setParent(implicitReturn, initFeature);\n\t\t\t}\n\n\t\t\tvar socket = createSocket(url);\n\t\t\tvar rpcProxy = getProxy(defaultTimeout);\n\n\t\t\tvar socketObject = {\n\t\t\t\traw: socket,\n\t\t\t\tdispatchEvent: function (evt) {\n\t\t\t\t\tvar details = evt.detail;\n\t\t\t\t\t// remove hyperscript internals\n\t\t\t\t\tdelete details.sentBy;\n\t\t\t\t\tdelete details._namedArgList_;\n\t\t\t\t\tsocket.send(JSON.stringify(mergeObjects({ type: evt.type }, details)));\n\t\t\t\t},\n\t\t\t\trpc: rpcProxy,\n\t\t\t};\n\n\t\t\tvar socketFeature = {\n\t\t\t\tname: socketName,\n\t\t\t\tsocket: socketObject,\n\t\t\t\tinstall: function (target) {\n\t\t\t\t\truntime.assignToNamespace(target, nameSpace, socketName, socketObject);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tsocket.onmessage = function (evt) {\n\t\t\t\tvar data = evt.data;\n\t\t\t\ttry {\n\t\t\t\t\tvar dataAsJson = JSON.parse(data);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// not JSON\n\t\t\t\t}\n\n\t\t\t\t// RPC reply\n\t\t\t\tif (dataAsJson && dataAsJson.iid) {\n\t\t\t\t\tif (dataAsJson.throw) {\n\t\t\t\t\t\tpromises[dataAsJson.iid].reject(dataAsJson.throw);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpromises[dataAsJson.iid].resolve(dataAsJson.return);\n\t\t\t\t\t}\n\t\t\t\t\tdelete promises[dataAsJson.iid];\n\t\t\t\t}\n\n\t\t\t\tif (messageHandler) {\n\t\t\t\t\tvar context = runtime.makeContext(socketObject, socketFeature, socketObject);\n\t\t\t\t\tif (jsonMessages) {\n\t\t\t\t\t\tif (dataAsJson) {\n\t\t\t\t\t\t\tcontext.message = dataAsJson;\n\t\t\t\t\t\t\tcontext.result = dataAsJson;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow \"Received non-JSON message from socket: \" + data;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.message = data;\n\t\t\t\t\t\tcontext.result = data;\n\t\t\t\t\t}\n\t\t\t\t\tmessageHandler.execute(context);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// clear socket on close to be recreated\n\t\t\tsocket.addEventListener(\"close\", function (e) {\n\t\t\t\tsocket = null;\n\t\t\t});\n\n\t\t\treturn socketFeature;\n\t\t}\n\t});\n}\n","\nfunction compileTemplate(template) {\n\treturn template.replace(/(?:^|\\n)([^@]*)@?/gm, function (match, p1) {\n\t\tvar templateStr = (\" \" + p1).replace(/([^\\\\])\\$\\{/g, \"$1$${escape html \").substring(1);\n\t\treturn \"\\ncall __ht_template_result.push(`\" + templateStr + \"`)\\n\";\n\t});\n}\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\n\tfunction renderTemplate(template, ctx) {\n\t\tvar buf = [];\n\t\t_hyperscript.evaluate(template, Object.assign({ __ht_template_result: buf }, ctx));\n\t\treturn buf.join(\"\");\n\t}\n\n\t_hyperscript.addCommand(\"render\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"render\")) return;\n\t\tvar template_ = parser.requireElement(\"expression\", tokens);\n\t\tvar templateArgs = {};\n\t\tif (tokens.matchToken(\"with\")) {\n\t\t\ttemplateArgs = parser.parseElement(\"namedArgumentList\", tokens);\n\t\t}\n\t\treturn {\n\t\t\targs: [template_, templateArgs],\n\t\t\top: function (ctx, template, templateArgs) {\n\t\t\t\tif (!(template instanceof Element)) throw new Error(template_.sourceFor() + \" is not an element\");\n\t\t\t\tconsole.log(compileTemplate(template.innerHTML));\n\t\t\t\tctx.result = renderTemplate(compileTemplate(template.innerHTML), templateArgs);\n\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t},\n\t\t};\n\t});\n\n\tfunction escapeHTML(html) {\n\t\treturn String(html)\n\t\t\t.replace(/&/g, \"&amp;\")\n\t\t\t.replace(/</g, \"&lt;\")\n\t\t\t.replace(/>/g, \"&gt;\")\n\t\t\t.replace(/\\x22/g, \"&quot;\")\n\t\t\t.replace(/\\x27/g, \"&#039;\");\n\t}\n\n\t_hyperscript.addLeafExpression(\"escape\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"escape\")) return;\n\t\tvar escapeType = tokens.matchTokenType(\"IDENTIFIER\").value;\n\n\t\t// hidden! for use in templates\n\t\tvar unescaped = tokens.matchToken(\"unescaped\");\n\n\t\tvar arg = parser.requireElement(\"expression\", tokens);\n\n\t\treturn {\n\t\t\targs: [arg],\n\t\t\top: function (ctx, arg) {\n\t\t\t\tif (unescaped) return arg;\n\t\t\t\tif (arg === undefined) return \"\";\n\t\t\t\tswitch (escapeType) {\n\t\t\t\t\tcase \"html\":\n\t\t\t\t\t\treturn escapeHTML(arg);\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(\"Unknown escape: \" + escapeType);\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (ctx) {\n\t\t\t\treturn runtime.unifiedEval(this, ctx);\n\t\t\t},\n\t\t};\n\t});\n}\n","///=========================================================================\n/// This module provides the core web functionality for hyperscript\n///=========================================================================\n\nimport { mergeObjects } from \"./utils.js\"\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\t_hyperscript.addCommand(\"settle\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"settle\")) {\n\t\t\tif (!parser.commandBoundary(tokens.currentToken())) {\n\t\t\t\tvar onExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar onExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tvar settleCommand = {\n\t\t\t\ttype: \"settleCmd\",\n\t\t\t\targs: [onExpr],\n\t\t\t\top: function (context, on) {\n\t\t\t\t\truntime.nullCheck(on, onExpr);\n\t\t\t\t\tvar resolve = null;\n\t\t\t\t\tvar resolved = false;\n\t\t\t\t\tvar transitionStarted = false;\n\n\t\t\t\t\tvar promise = new Promise(function (r) {\n\t\t\t\t\t\tresolve = r;\n\t\t\t\t\t});\n\n\t\t\t\t\t// listen for a transition begin\n\t\t\t\t\ton.addEventListener(\n\t\t\t\t\t\t\"transitionstart\",\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\ttransitionStarted = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t);\n\n\t\t\t\t\t// if no transition begins in 500ms, cancel\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tif (!transitionStarted && !resolved) {\n\t\t\t\t\t\t\tresolve(runtime.findNext(settleCommand, context));\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500);\n\n\t\t\t\t\t// continue on a transition emd\n\t\t\t\t\ton.addEventListener(\n\t\t\t\t\t\t\"transitionend\",\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\t\tresolve(runtime.findNext(settleCommand, context));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t);\n\t\t\t\t\treturn promise;\n\t\t\t\t},\n\t\t\t\texecute: function (context) {\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn settleCommand;\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"add\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"add\")) {\n\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\t\t\tvar attributeRef = null;\n\t\t\tvar cssDeclaration = null;\n\t\t\tif (classRef == null) {\n\t\t\t\tattributeRef = parser.parseElement(\"attributeRef\", tokens);\n\t\t\t\tif (attributeRef == null) {\n\t\t\t\t\tcssDeclaration = parser.parseElement(\"styleLiteral\", tokens);\n\t\t\t\t\tif (cssDeclaration == null) {\n\t\t\t\t\t\tparser.raiseParseError(tokens, \"Expected either a class reference or attribute expression\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar classRefs = [classRef];\n\t\t\t\twhile ((classRef = parser.parseElement(\"classRef\", tokens))) {\n\t\t\t\t\tclassRefs.push(classRef);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"to\")) {\n\t\t\t\tvar toExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar toExpr = parser.parseElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tif (classRefs) {\n\t\t\t\treturn {\n\t\t\t\t\tclassRefs: classRefs,\n\t\t\t\t\tto: toExpr,\n\t\t\t\t\targs: [toExpr, classRefs],\n\t\t\t\t\top: function (context, to, classRefs) {\n\t\t\t\t\t\truntime.nullCheck(to, toExpr);\n\t\t\t\t\t\truntime.forEach(classRefs, function (classRef) {\n\t\t\t\t\t\t\truntime.implicitLoop(to, function (target) {\n\t\t\t\t\t\t\t\tif (target instanceof Element) target.classList.add(classRef.className);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} else if (attributeRef) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"addCmd\",\n\t\t\t\t\tattributeRef: attributeRef,\n\t\t\t\t\tto: toExpr,\n\t\t\t\t\targs: [toExpr],\n\t\t\t\t\top: function (context, to, attrRef) {\n\t\t\t\t\t\truntime.nullCheck(to, toExpr);\n\t\t\t\t\t\truntime.implicitLoop(to, function (target) {\n\t\t\t\t\t\t\ttarget.setAttribute(attributeRef.name, attributeRef.value);\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t\texecute: function (ctx) {\n\t\t\t\t\t\treturn runtime.unifiedExec(this, ctx);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"addCmd\",\n\t\t\t\t\tcssDeclaration: cssDeclaration,\n\t\t\t\t\tto: toExpr,\n\t\t\t\t\targs: [toExpr, cssDeclaration],\n\t\t\t\t\top: function (context, to, css) {\n\t\t\t\t\t\truntime.nullCheck(to, toExpr);\n\t\t\t\t\t\truntime.implicitLoop(to, function (target) {\n\t\t\t\t\t\t\ttarget.style.cssText += css;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t\texecute: function (ctx) {\n\t\t\t\t\t\treturn runtime.unifiedExec(this, ctx);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\t_hyperscript.internals.parser.addGrammarElement(\"styleLiteral\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"{\")) return;\n\n\t\tvar stringParts = [\"\"]\n\t\tvar exprs = []\n\n\t\twhile (tokens.hasMore()) {\n\t\t\tif (tokens.matchOpToken(\"\\\\\")) {\n\t\t\t\ttokens.consumeToken();\n\t\t\t} else if (tokens.matchOpToken(\"}\")) {\n\t\t\t\tbreak;\n\t\t\t} else if (tokens.matchToken(\"$\")) {\n\t\t\t\tvar opencurly = tokens.matchOpToken(\"{\");\n\t\t\t\tvar expr = parser.parseElement(\"expression\", tokens);\n\t\t\t\tif (opencurly) tokens.requireOpToken(\"}\");\n\n\t\t\t\texprs.push(expr)\n\t\t\t\tstringParts.push(\"\")\n\t\t\t} else {\n\t\t\t\tvar tok = tokens.consumeToken();\n\t\t\t\tstringParts[stringParts.length-1] += tokens.source.substring(tok.start, tok.end);\n\t\t\t}\n\n\t\t\tstringParts[stringParts.length-1] += tokens.lastWhitespace();\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"styleLiteral\",\n\t\t\targs: [exprs],\n\t\t\top: function (ctx, exprs) {\n\t\t\t\tvar rv = \"\";\n\n\t\t\t\tstringParts.forEach(function (part, idx) {\n\t\t\t\t\trv += part;\n\t\t\t\t\tif (idx in exprs) rv += exprs[idx];\n\t\t\t\t});\n\n\t\t\t\treturn rv;\n\t\t\t},\n\t\t\tevaluate: function(ctx) {\n\t\t\t\treturn runtime.unifiedEval(this, ctx);\n\t\t\t}\n\t\t}\n\t})\n\n\t_hyperscript.addCommand(\"remove\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"remove\")) {\n\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\t\t\tvar attributeRef = null;\n\t\t\tvar elementExpr = null;\n\t\t\tif (classRef == null) {\n\t\t\t\tattributeRef = parser.parseElement(\"attributeRef\", tokens);\n\t\t\t\tif (attributeRef == null) {\n\t\t\t\t\telementExpr = parser.parseElement(\"expression\", tokens);\n\t\t\t\t\tif (elementExpr == null) {\n\t\t\t\t\t\tparser.raiseParseError(\n\t\t\t\t\t\t\ttokens,\n\t\t\t\t\t\t\t\"Expected either a class reference, attribute expression or value expression\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar classRefs = [classRef];\n\t\t\t\twhile ((classRef = parser.parseElement(\"classRef\", tokens))) {\n\t\t\t\t\tclassRefs.push(classRef);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\tvar fromExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar fromExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tif (elementExpr) {\n\t\t\t\treturn {\n\t\t\t\t\telementExpr: elementExpr,\n\t\t\t\t\tfrom: fromExpr,\n\t\t\t\t\targs: [elementExpr],\n\t\t\t\t\top: function (context, element) {\n\t\t\t\t\t\truntime.nullCheck(element, elementExpr);\n\t\t\t\t\t\truntime.implicitLoop(element, function (target) {\n\t\t\t\t\t\t\tif (target.parentElement) {\n\t\t\t\t\t\t\t\ttarget.parentElement.removeChild(target);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tclassRefs: classRefs,\n\t\t\t\t\tattributeRef: attributeRef,\n\t\t\t\t\telementExpr: elementExpr,\n\t\t\t\t\tfrom: fromExpr,\n\t\t\t\t\targs: [classRefs, fromExpr],\n\t\t\t\t\top: function (context, classRefs, from) {\n\t\t\t\t\t\truntime.nullCheck(from, fromExpr);\n\t\t\t\t\t\tif (classRefs) {\n\t\t\t\t\t\t\truntime.forEach(classRefs, function (classRef) {\n\t\t\t\t\t\t\t\truntime.implicitLoop(from, function (target) {\n\t\t\t\t\t\t\t\t\ttarget.classList.remove(classRef.className);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\truntime.implicitLoop(from, function (target) {\n\t\t\t\t\t\t\t\ttarget.removeAttribute(attributeRef.name);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"toggle\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"toggle\")) {\n\t\t\tif (tokens.matchToken(\"between\")) {\n\t\t\t\tvar between = true;\n\t\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\t\t\t\ttokens.requireToken(\"and\");\n\t\t\t\tvar classRef2 = parser.requireElement(\"classRef\", tokens);\n\t\t\t} else {\n\t\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\t\t\t\tvar attributeRef = null;\n\t\t\t\tif (classRef == null) {\n\t\t\t\t\tattributeRef = parser.parseElement(\"attributeRef\", tokens);\n\t\t\t\t\tif (attributeRef == null) {\n\t\t\t\t\t\tparser.raiseParseError(tokens, \"Expected either a class reference or attribute expression\");\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar classRefs = [classRef];\n\t\t\t\t\twhile ((classRef = parser.parseElement(\"classRef\", tokens))) {\n\t\t\t\t\t\tclassRefs.push(classRef);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"on\")) {\n\t\t\t\tvar onExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar onExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"for\")) {\n\t\t\t\tvar time = parser.requireElement(\"timeExpression\", tokens);\n\t\t\t} else if (tokens.matchToken(\"until\")) {\n\t\t\t\tvar evt = parser.requireElement(\"dotOrColonPath\", tokens, \"Expected event name\");\n\t\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\t\tvar from = parser.requireElement(\"expression\", tokens);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar toggleCmd = {\n\t\t\t\tclassRef: classRef,\n\t\t\t\tclassRef2: classRef2,\n\t\t\t\tclassRefs: classRefs,\n\t\t\t\tattributeRef: attributeRef,\n\t\t\t\ton: onExpr,\n\t\t\t\ttime: time,\n\t\t\t\tevt: evt,\n\t\t\t\tfrom: from,\n\t\t\t\ttoggle: function (on, classRef, classRef2, classRefs) {\n\t\t\t\t\truntime.nullCheck(on, onExpr);\n\t\t\t\t\tif (between) {\n\t\t\t\t\t\truntime.implicitLoop(on, function (target) {\n\t\t\t\t\t\t\tif (target.classList.contains(classRef.className)) {\n\t\t\t\t\t\t\t\ttarget.classList.remove(classRef.className);\n\t\t\t\t\t\t\t\ttarget.classList.add(classRef2.className);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget.classList.add(classRef.className);\n\t\t\t\t\t\t\t\ttarget.classList.remove(classRef2.className);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (classRefs) {\n\t\t\t\t\t\truntime.forEach(classRefs, function (classRef) {\n\t\t\t\t\t\t\truntime.implicitLoop(on, function (target) {\n\t\t\t\t\t\t\t\ttarget.classList.toggle(classRef.className);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\truntime.forEach(on, function (target) {\n\t\t\t\t\t\t\tif (target.hasAttribute(attributeRef.name)) {\n\t\t\t\t\t\t\t\ttarget.removeAttribute(attributeRef.name);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget.setAttribute(attributeRef.name, attributeRef.value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\targs: [onExpr, time, evt, from, classRef, classRef2, classRefs],\n\t\t\t\top: function (context, on, time, evt, from, classRef, classRef2, classRefs) {\n\t\t\t\t\tif (time) {\n\t\t\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\t\t\ttoggleCmd.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\ttoggleCmd.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\t\t\tresolve(runtime.findNext(toggleCmd, context));\n\t\t\t\t\t\t\t}, time);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (evt) {\n\t\t\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\t\t\tvar target = from || context.me;\n\t\t\t\t\t\t\ttarget.addEventListener(\n\t\t\t\t\t\t\t\tevt,\n\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\ttoggleCmd.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\t\t\t\tresolve(runtime.findNext(toggleCmd, context));\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttoggleCmd.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\treturn runtime.findNext(toggleCmd, context);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn toggleCmd;\n\t\t}\n\t});\n\n\tvar HIDE_SHOW_STRATEGIES = {\n\t\tdisplay: function (op, element, arg) {\n\t\t\tif (arg) {\n\t\t\t\telement.style.display = arg;\n\t\t\t} else if (op === \"hide\") {\n\t\t\t\tconst internalData = _hyperscript.internals.runtime.getInternalData(element);\n\t\t\t\tif (internalData.originalDisplay == null) {\n\t\t\t\t\tinternalData.originalDisplay = element.style.display;\n\t\t\t\t}\n\t\t\t\telement.style.display = \"none\";\n\t\t\t} else {\n\t\t\t\tconst internalData = _hyperscript.internals.runtime.getInternalData(element);\n\t\t\t\tif (internalData.originalDisplay && internalData.originalDisplay !== 'none') {\n\t\t\t\t\telement.style.display = internalData.originalDisplay;\n\t\t\t\t} else {\n\t\t\t\t\telement.style.removeProperty('display');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tvisibility: function (op, element, arg) {\n\t\t\tif (arg) {\n\t\t\t\telement.style.visibility = arg;\n\t\t\t} else if (op === \"hide\") {\n\t\t\t\telement.style.visibility = \"hidden\";\n\t\t\t} else {\n\t\t\t\telement.style.visibility = \"visible\";\n\t\t\t}\n\t\t},\n\t\topacity: function (op, element, arg) {\n\t\t\tif (arg) {\n\t\t\t\telement.style.opacity = arg;\n\t\t\t} else if (op === \"hide\") {\n\t\t\t\telement.style.opacity = \"0\";\n\t\t\t} else {\n\t\t\t\telement.style.opacity = \"1\";\n\t\t\t}\n\t\t},\n\t};\n\n\tvar parseShowHideTarget = function (parser, runtime, tokens) {\n\t\tvar target;\n\t\tvar currentTokenValue = tokens.currentToken();\n\t\tif (currentTokenValue.value === \"when\" || currentTokenValue.value === \"with\" || parser.commandBoundary(currentTokenValue)) {\n\t\t\ttarget = parser.parseElement(\"implicitMeTarget\", tokens);\n\t\t} else {\n\t\t\ttarget = parser.parseElement(\"expression\", tokens);\n\t\t}\n\t\treturn target;\n\t};\n\n\tvar resolveStrategy = function (parser, tokens, name) {\n\t\tvar configDefault = _hyperscript.config.defaultHideShowStrategy;\n\t\tvar strategies = HIDE_SHOW_STRATEGIES;\n\t\tif (_hyperscript.config.hideShowStrategies) {\n\t\t\tstrategies = mergeObjects(strategies, _hyperscript.config.hideShowStrategies); // merge in user provided strategies\n\t\t}\n\t\tname = name || configDefault || \"display\";\n\t\tvar value = strategies[name];\n\t\tif (value == null) {\n\t\t\tparser.raiseParseError(tokens, \"Unknown show/hide strategy : \" + name);\n\t\t}\n\t\treturn value;\n\t};\n\n\t_hyperscript.addCommand(\"hide\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"hide\")) {\n\t\t\tvar targetExpr = parseShowHideTarget(parser, runtime, tokens);\n\n\t\t\tvar name = null;\n\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\tname = tokens.requireTokenType(\"IDENTIFIER\").value;\n\t\t\t}\n\t\t\tvar hideShowStrategy = resolveStrategy(parser, tokens, name);\n\n\t\t\treturn {\n\t\t\t\ttarget: targetExpr,\n\t\t\t\targs: [targetExpr],\n\t\t\t\top: function (ctx, target) {\n\t\t\t\t\truntime.nullCheck(target, targetExpr);\n\t\t\t\t\truntime.implicitLoop(target, function (elt) {\n\t\t\t\t\t\thideShowStrategy(\"hide\", elt);\n\t\t\t\t\t});\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"show\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"show\")) {\n\t\t\tvar targetExpr = parseShowHideTarget(parser, runtime, tokens);\n\n\t\t\tvar name = null;\n\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\tname = tokens.requireTokenType(\"IDENTIFIER\").value;\n\t\t\t}\n\t\t\tvar arg = null;\n\t\t\tif (tokens.matchOpToken(\":\")) {\n\t\t\t\tvar tokenArr = tokens.consumeUntilWhitespace();\n\t\t\t\ttokens.matchTokenType(\"WHITESPACE\");\n\t\t\t\targ = tokenArr\n\t\t\t\t\t.map(function (t) {\n\t\t\t\t\t\treturn t.value;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\");\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"when\")) {\n\t\t\t\tvar when = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\n\t\t\tvar hideShowStrategy = resolveStrategy(parser, tokens, name);\n\n\t\t\treturn {\n\t\t\t\ttarget: targetExpr,\n\t\t\t\twhen: when,\n\t\t\t\targs: [targetExpr],\n\t\t\t\top: function (ctx, target) {\n\t\t\t\t\truntime.nullCheck(target, targetExpr);\n\t\t\t\t\truntime.implicitLoop(target, function (elt) {\n\t\t\t\t\t\tif (when) {\n\t\t\t\t\t\t\tctx['result'] = elt;\n\t\t\t\t\t\t\tlet whenResult = runtime.evaluateNoPromise(when, ctx);\n\t\t\t\t\t\t\tif (whenResult) {\n\t\t\t\t\t\t\t\thideShowStrategy(\"show\", elt, arg);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thideShowStrategy(\"hide\", elt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx['result'] = null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thideShowStrategy(\"show\", elt, arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"take\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"take\")) {\n\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\tvar fromExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar fromExpr = classRef;\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"for\")) {\n\t\t\t\tvar forExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar forExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tvar takeCmd = {\n\t\t\t\tclassRef: classRef,\n\t\t\t\tfrom: fromExpr,\n\t\t\t\tforElt: forExpr,\n\t\t\t\targs: [classRef, fromExpr, forExpr],\n\t\t\t\top: function (context, eltColl, from, forElt) {\n\t\t\t\t\truntime.nullCheck(from, fromExpr);\n\t\t\t\t\truntime.nullCheck(forElt, forExpr);\n\t\t\t\t\tvar clazz = eltColl.className;\n\t\t\t\t\truntime.implicitLoop(from, function (target) {\n\t\t\t\t\t\ttarget.classList.remove(clazz);\n\t\t\t\t\t});\n\t\t\t\t\truntime.implicitLoop(forElt, function (target) {\n\t\t\t\t\t\ttarget.classList.add(clazz);\n\t\t\t\t\t});\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn takeCmd;\n\t\t}\n\t});\n\n\tfunction putInto(runtime, context, prop, valueToPut) {\n\t\tif (prop) {\n\t\t\tvar value = runtime.resolveSymbol(prop, context);\n\t\t} else {\n\t\t\tvar value = context;\n\t\t}\n\t\tif (value instanceof Element || value instanceof HTMLDocument) {\n\t\t\twhile (value.firstChild) value.removeChild(value.firstChild);\n\t\t\tvalue.append(_hyperscript.internals.runtime.convertValue(valueToPut, \"Fragment\"));\n\t\t} else {\n\t\t\tif (prop) {\n\t\t\t\truntime.setSymbol(prop, context, null, valueToPut);\n\t\t\t} else {\n\t\t\t\tthrow \"Don't know how to put a value into \" + typeof context;\n\t\t\t}\n\t\t}\n\t}\n\n\t_hyperscript.addCommand(\"put\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"put\")) {\n\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\n\t\t\tvar operationToken = tokens.matchAnyToken(\"into\", \"before\", \"after\");\n\n\t\t\tif (operationToken == null && tokens.matchToken(\"at\")) {\n\t\t\t\ttokens.matchToken(\"the\"); // optional \"the\"\n\t\t\t\toperationToken = tokens.matchAnyToken(\"start\", \"end\");\n\t\t\t\ttokens.requireToken(\"of\");\n\t\t\t}\n\n\t\t\tif (operationToken == null) {\n\t\t\t\tparser.raiseParseError(tokens, \"Expected one of 'into', 'before', 'at start of', 'at end of', 'after'\");\n\t\t\t}\n\t\t\tvar target = parser.requireElement(\"expression\", tokens);\n\n\t\t\tvar operation = operationToken.value;\n\n\t\t\tvar symbolWrite = false;\n\t\t\tvar rootExpr = null;\n\t\t\tvar prop = null;\n\t\t\tif (target.prop && target.root && operation === \"into\") {\n\t\t\t\tprop = target.prop.value;\n\t\t\t\trootExpr = target.root;\n\t\t\t} else if (target.type === \"symbol\" && operation === \"into\") {\n\t\t\t\tsymbolWrite = true;\n\t\t\t\tprop = target.name;\n\t\t\t} else if (target.type === \"attributeRef\" && operation === \"into\") {\n\t\t\t\tvar attributeWrite = true;\n\t\t\t\tprop = target.name;\n\t\t\t\trootExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t} else if (target.attribute && operation === \"into\") {\n\t\t\t\tvar attributeWrite = true;\n\t\t\t\tprop = target.attribute.name;\n\t\t\t\trootExpr = target.root;\n\t\t\t} else {\n\t\t\t\trootExpr = target;\n\t\t\t}\n\n\t\t\tvar putCmd = {\n\t\t\t\ttarget: target,\n\t\t\t\toperation: operation,\n\t\t\t\tsymbolWrite: symbolWrite,\n\t\t\t\tvalue: value,\n\t\t\t\targs: [rootExpr, value],\n\t\t\t\top: function (context, root, valueToPut) {\n\t\t\t\t\tif (symbolWrite) {\n\t\t\t\t\t\tputInto(runtime, context, prop, valueToPut);\n\t\t\t\t\t} else {\n\t\t\t\t\t\truntime.nullCheck(root, rootExpr);\n\t\t\t\t\t\tif (operation === \"into\") {\n\t\t\t\t\t\t\tif (attributeWrite) {\n\t\t\t\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\t\t\t\telt.setAttribute(prop, valueToPut);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\t\t\t\tputInto(runtime, elt, prop, valueToPut);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar op =\n\t\t\t\t\t\t\t\toperation === \"before\"\n\t\t\t\t\t\t\t\t\t? Element.prototype.before\n\t\t\t\t\t\t\t\t\t: operation === \"after\"\n\t\t\t\t\t\t\t\t\t? Element.prototype.after\n\t\t\t\t\t\t\t\t\t: operation === \"start\"\n\t\t\t\t\t\t\t\t\t? Element.prototype.prepend\n\t\t\t\t\t\t\t\t\t: operation === \"end\"\n\t\t\t\t\t\t\t\t\t? Element.prototype.append\n\t\t\t\t\t\t\t\t\t: Element.prototype.append; // unreachable\n\n\t\t\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\t\t\top.call(\n\t\t\t\t\t\t\t\t\telt,\n\t\t\t\t\t\t\t\t\tvalueToPut instanceof Node\n\t\t\t\t\t\t\t\t\t\t? valueToPut\n\t\t\t\t\t\t\t\t\t\t: runtime.convertValue(valueToPut, \"Fragment\")\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn putCmd;\n\t\t}\n\t});\n\n\tfunction parsePseudopossessiveTarget(parser, runtime, tokens) {\n\t\tvar targets;\n\t\tif (\n\t\t\ttokens.matchToken(\"the\") ||\n\t\t\ttokens.matchToken(\"element\") ||\n\t\t\ttokens.matchToken(\"elements\") ||\n\t\t\ttokens.currentToken().type === \"CLASS_REF\" ||\n\t\t\ttokens.currentToken().type === \"ID_REF\" ||\n\t\t\t(tokens.currentToken().op && tokens.currentToken().value === \"<\")\n\t\t) {\n\t\t\tparser.possessivesDisabled = true;\n\t\t\ttry {\n\t\t\t\ttargets = parser.parseElement(\"expression\", tokens);\n\t\t\t} finally {\n\t\t\t\tdelete parser.possessivesDisabled;\n\t\t\t}\n\t\t\t// optional possessive\n\t\t\tif (tokens.matchOpToken(\"'\")) {\n\t\t\t\ttokens.requireToken(\"s\");\n\t\t\t}\n\t\t} else if (tokens.currentToken().type === \"IDENTIFIER\" && tokens.currentToken().value === \"its\") {\n\t\t\tvar identifier = tokens.matchToken(\"its\");\n\t\t\ttargets = {\n\t\t\t\ttype: \"pseudopossessiveIts\",\n\t\t\t\ttoken: identifier,\n\t\t\t\tname: identifier.value,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.resolveSymbol(\"it\", context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\ttokens.matchToken(\"my\") || tokens.matchToken(\"me\"); // consume optional 'my'\n\t\t\ttargets = parser.parseElement(\"implicitMeTarget\", tokens);\n\t\t}\n\t\treturn targets;\n\t}\n\n\t_hyperscript.addCommand(\"transition\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"transition\")) {\n\t\t\tvar targetsExpr = parsePseudopossessiveTarget(parser, runtime, tokens);\n\n\t\t\tvar properties = [];\n\t\t\tvar from = [];\n\t\t\tvar to = [];\n\t\t\tvar currentToken = tokens.currentToken();\n\t\t\twhile (\n\t\t\t\t!parser.commandBoundary(currentToken) &&\n\t\t\t\tcurrentToken.value !== \"over\" &&\n\t\t\t\tcurrentToken.value !== \"using\"\n\t\t\t) {\n\t\t\t\tproperties.push(parser.requireElement(\"stringLike\", tokens));\n\n\t\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\t\tfrom.push(parser.requireElement(\"stringLike\", tokens));\n\t\t\t\t} else {\n\t\t\t\t\tfrom.push(null);\n\t\t\t\t}\n\t\t\t\ttokens.requireToken(\"to\");\n\t\t\t\tto.push(parser.requireElement(\"stringLike\", tokens));\n\t\t\t\tcurrentToken = tokens.currentToken();\n\t\t\t}\n\t\t\tif (tokens.matchToken(\"over\")) {\n\t\t\t\tvar over = parser.requireElement(\"timeExpression\", tokens);\n\t\t\t} else if (tokens.matchToken(\"using\")) {\n\t\t\t\tvar using = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\n\t\t\tvar transition = {\n\t\t\t\tto: to,\n\t\t\t\targs: [targetsExpr, properties, from, to, using, over],\n\t\t\t\top: function (context, targets, properties, from, to, using, over) {\n\t\t\t\t\truntime.nullCheck(targets, targetsExpr);\n\t\t\t\t\tvar promises = [];\n\t\t\t\t\truntime.implicitLoop(targets, function (target) {\n\t\t\t\t\t\tvar promise = new Promise(function (resolve, reject) {\n\t\t\t\t\t\t\tvar initialTransition = target.style.transition;\n\t\t\t\t\t\t\tif (over) {\n\t\t\t\t\t\t\t\ttarget.style.transition = \"all \" + over + \"ms ease-in\";\n\t\t\t\t\t\t\t} else if (using) {\n\t\t\t\t\t\t\t\ttarget.style.transition = using;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget.style.transition = _hyperscript.config.defaultTransition;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar internalData = runtime.getInternalData(target);\n\t\t\t\t\t\t\tvar computedStyles = getComputedStyle(target);\n\n\t\t\t\t\t\t\tvar initialStyles = {};\n\t\t\t\t\t\t\tfor (var i = 0; i < computedStyles.length; i++) {\n\t\t\t\t\t\t\t\tvar name = computedStyles[i];\n\t\t\t\t\t\t\t\tvar initialValue = computedStyles[name];\n\t\t\t\t\t\t\t\tinitialStyles[name] = initialValue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// store intitial values\n\t\t\t\t\t\t\tif (!internalData.initalStyles) {\n\t\t\t\t\t\t\t\tinternalData.initalStyles = initialStyles;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (var i = 0; i < properties.length; i++) {\n\t\t\t\t\t\t\t\tvar property = properties[i];\n\t\t\t\t\t\t\t\tvar fromVal = from[i];\n\t\t\t\t\t\t\t\tif (fromVal === \"computed\" || fromVal == null) {\n\t\t\t\t\t\t\t\t\ttarget.style[property] = initialStyles[property];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttarget.style[property] = fromVal;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//console.log(\"transition started\", transition);\n\n\t\t\t\t\t\t\tvar transitionStarted = false;\n\t\t\t\t\t\t\tvar resolved = false;\n\n\t\t\t\t\t\t\ttarget.addEventListener(\n\t\t\t\t\t\t\t\t\"transitionend\",\n\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\t\t\t\t//console.log(\"transition ended\", transition);\n\t\t\t\t\t\t\t\t\t\ttarget.style.transition = initialTransition;\n\t\t\t\t\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\ttarget.addEventListener(\n\t\t\t\t\t\t\t\t\"transitionstart\",\n\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\ttransitionStarted = true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// it no transition has started in 100ms, continue\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tif (!resolved && !transitionStarted) {\n\t\t\t\t\t\t\t\t\t//console.log(\"transition ended\", transition);\n\t\t\t\t\t\t\t\t\ttarget.style.transition = initialTransition;\n\t\t\t\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 100);\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tvar autoProps = [];\n\t\t\t\t\t\t\t\tfor (var i = 0; i < properties.length; i++) {\n\t\t\t\t\t\t\t\t\tvar property = properties[i];\n\t\t\t\t\t\t\t\t\tvar toVal = to[i];\n\t\t\t\t\t\t\t\t\tif (toVal === \"initial\") {\n\t\t\t\t\t\t\t\t\t\tvar propertyValue = internalData.initalStyles[property];\n\t\t\t\t\t\t\t\t\t\ttarget.style[property] = propertyValue;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttarget.style[property] = toVal;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t//console.log(\"set\", property, \"to\", target.style[property], \"on\", target, \"value passed in : \", toVal);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpromises.push(promise);\n\t\t\t\t\t});\n\t\t\t\t\treturn Promise.all(promises).then(function () {\n\t\t\t\t\t\treturn runtime.findNext(transition, context);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn transition;\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"measure\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"measure\")) return;\n\n\t\tvar targetExpr = parsePseudopossessiveTarget(parser, runtime, tokens);\n\n\t\tvar propsToMeasure = [];\n\t\tif (!parser.commandBoundary(tokens.currentToken()))\n\t\t\tdo {\n\t\t\t\tpropsToMeasure.push(tokens.matchTokenType(\"IDENTIFIER\").value);\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\n\t\treturn {\n\t\t\tproperties: propsToMeasure,\n\t\t\targs: [targetExpr],\n\t\t\top: function (ctx, target) {\n\t\t\t\truntime.nullCheck(target, targetExpr);\n\t\t\t\tif (0 in target) target = target[0]; // not measuring multiple elts\n\t\t\t\tvar rect = target.getBoundingClientRect();\n\t\t\t\tvar scroll = {\n\t\t\t\t\ttop: target.scrollTop,\n\t\t\t\t\tleft: target.scrollLeft,\n\t\t\t\t\ttopMax: target.scrollTopMax,\n\t\t\t\t\tleftMax: target.scrollLeftMax,\n\t\t\t\t\theight: target.scrollHeight,\n\t\t\t\t\twidth: target.scrollWidth,\n\t\t\t\t};\n\n\t\t\t\tctx.result = {\n\t\t\t\t\tx: rect.x,\n\t\t\t\t\ty: rect.y,\n\t\t\t\t\tleft: rect.left,\n\t\t\t\t\ttop: rect.top,\n\t\t\t\t\tright: rect.right,\n\t\t\t\t\tbottom: rect.bottom,\n\t\t\t\t\twidth: rect.width,\n\t\t\t\t\theight: rect.height,\n\t\t\t\t\tbounds: rect,\n\n\t\t\t\t\tscrollLeft: scroll.left,\n\t\t\t\t\tscrollTop: scroll.top,\n\t\t\t\t\tscrollLeftMax: scroll.leftMax,\n\t\t\t\t\tscrollTopMax: scroll.topMax,\n\t\t\t\t\tscrollWidth: scroll.width,\n\t\t\t\t\tscrollHeight: scroll.height,\n\t\t\t\t\tscroll: scroll,\n\t\t\t\t};\n\n\t\t\t\truntime.forEach(propsToMeasure, function (prop) {\n\t\t\t\t\tif (prop in ctx.result) ctx[prop] = ctx.result[prop];\n\t\t\t\t\telse throw \"No such measurement as \" + prop;\n\t\t\t\t});\n\n\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t},\n\t\t};\n\t});\n\n\t_hyperscript.addLeafExpression(\"closestExpr\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"closest\")) {\n\t\t\tif (tokens.matchToken(\"parent\")) {\n\t\t\t\tvar parentSearch = true;\n\t\t\t}\n\n\t\t\tvar css = null;\n\t\t\tif (tokens.currentToken().type === \"ATTRIBUTE_REF\") {\n\t\t\t\tvar attributeRef = parser.parseElement(\"attributeRefAccess\", tokens, null);\n\t\t\t\tcss = \"[\" + attributeRef.attribute.name + \"]\";\n\t\t\t}\n\n\t\t\tif (css == null) {\n\t\t\t\tvar expr = parser.parseElement(\"expression\", tokens);\n\t\t\t\tif (expr.css == null) {\n\t\t\t\t\tparser.raiseParseError(tokens, \"Expected a CSS expression\");\n\t\t\t\t} else {\n\t\t\t\t\tcss = expr.css;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"to\")) {\n\t\t\t\tvar to = parser.parseElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar to = parser.parseElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tvar closestExpr = {\n\t\t\t\ttype: \"closestExpr\",\n\t\t\t\tparentSearch: parentSearch,\n\t\t\t\texpr: expr,\n\t\t\t\tcss: css,\n\t\t\t\tto: to,\n\t\t\t\targs: [to],\n\t\t\t\top: function (ctx, to) {\n\t\t\t\t\tif (to == null || !(to instanceof Element)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (parentSearch) {\n\t\t\t\t\t\t\tvar node = to.parentElement ? to.parentElement.closest(css) : null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar node = to.closest(css);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn node;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tif (attributeRef) {\n\t\t\t\tattributeRef.root = closestExpr;\n\t\t\t\tattributeRef.args = [closestExpr];\n\t\t\t\treturn attributeRef;\n\t\t\t} else {\n\t\t\t\treturn closestExpr;\n\t\t\t}\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"go\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"go\")) {\n\t\t\tif (tokens.matchToken(\"back\")) {\n\t\t\t\tvar back = true;\n\t\t\t} else {\n\t\t\t\ttokens.matchToken(\"to\");\n\t\t\t\tif (tokens.matchToken(\"url\")) {\n\t\t\t\t\tvar target = parser.requireElement(\"stringLike\", tokens);\n\t\t\t\t\tvar url = true;\n\t\t\t\t\tif (tokens.matchToken(\"in\")) {\n\t\t\t\t\t\ttokens.requireToken(\"new\");\n\t\t\t\t\t\ttokens.requireToken(\"window\");\n\t\t\t\t\t\tvar newWindow = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttokens.matchToken(\"the\"); // optional the\n\t\t\t\t\tvar verticalPosition = tokens.matchAnyToken(\"top\", \"bottom\", \"middle\");\n\t\t\t\t\tvar horizontalPosition = tokens.matchAnyToken(\"left\", \"center\", \"right\");\n\t\t\t\t\tif (verticalPosition || horizontalPosition) {\n\t\t\t\t\t\ttokens.requireToken(\"of\");\n\t\t\t\t\t}\n\t\t\t\t\tvar target = parser.requireElement(\"expression\", tokens);\n\t\t\t\t\tvar smoothness = tokens.matchAnyToken(\"smoothly\", \"instantly\");\n\n\t\t\t\t\tvar scrollOptions = {};\n\t\t\t\t\tif (verticalPosition) {\n\t\t\t\t\t\tif (verticalPosition.value === \"top\") {\n\t\t\t\t\t\t\tscrollOptions.block = \"start\";\n\t\t\t\t\t\t} else if (verticalPosition.value === \"bottom\") {\n\t\t\t\t\t\t\tscrollOptions.block = \"end\";\n\t\t\t\t\t\t} else if (verticalPosition.value === \"middle\") {\n\t\t\t\t\t\t\tscrollOptions.block = \"center\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (horizontalPosition) {\n\t\t\t\t\t\tif (horizontalPosition.value === \"left\") {\n\t\t\t\t\t\t\tscrollOptions.inline = \"start\";\n\t\t\t\t\t\t} else if (horizontalPosition.value === \"center\") {\n\t\t\t\t\t\t\tscrollOptions.inline = \"center\";\n\t\t\t\t\t\t} else if (horizontalPosition.value === \"right\") {\n\t\t\t\t\t\t\tscrollOptions.inline = \"end\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (smoothness) {\n\t\t\t\t\t\tif (smoothness.value === \"smoothly\") {\n\t\t\t\t\t\t\tscrollOptions.behavior = \"smooth\";\n\t\t\t\t\t\t} else if (smoothness.value === \"instantly\") {\n\t\t\t\t\t\t\tscrollOptions.behavior = \"instant\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar goCmd = {\n\t\t\t\ttarget: target,\n\t\t\t\targs: [target],\n\t\t\t\top: function (ctx, to) {\n\t\t\t\t\tif (back) {\n\t\t\t\t\t\twindow.history.back();\n\t\t\t\t\t} else if (url) {\n\t\t\t\t\t\tif (to) {\n\t\t\t\t\t\t\tif (to.indexOf(\"#\") === 0 && !newWindow) {\n\t\t\t\t\t\t\t\twindow.location.href = to;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twindow.open(to, newWindow ? \"_blank\" : null);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\truntime.forEach(to, function (target) {\n\t\t\t\t\t\t\ttarget.scrollIntoView(scrollOptions);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn runtime.findNext(goCmd);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn goCmd;\n\t\t}\n\t});\n\n\t_hyperscript.config.conversions[\"Values\"] = function (/** @type {Node | NodeList} */ node) {\n\t\t/** @type Object<string,string | string[]> */\n\t\tvar result = {};\n\n\t\tvar implicitLoop = _hyperscript.internals.runtime.implicitLoop;\n\n\t\timplicitLoop(node, function (/** @type HTMLInputElement */ node) {\n\t\t\t// Try to get a value directly from this node\n\t\t\tvar input = getInputInfo(node);\n\n\t\t\tif (input !== undefined) {\n\t\t\t\tresult[input.name] = input.value;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise, try to query all child elements of this node that *should* contain values.\n\t\t\tif (node.querySelectorAll != undefined) {\n\t\t\t\tvar children = node.querySelectorAll(\"input,select,textarea\");\n\t\t\t\tchildren.forEach(appendValue);\n\t\t\t}\n\t\t});\n\n\t\treturn result;\n\n\t\t/**\n\t\t * @param {HTMLInputElement} node\n\t\t */\n\t\tfunction appendValue(node) {\n\t\t\tvar info = getInputInfo(node);\n\n\t\t\tif (info == undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there is no value already stored in this space.\n\t\t\tif (result[info.name] == undefined) {\n\t\t\t\tresult[info.name] = info.value;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (Array.isArray(result[info.name]) && Array.isArray(info.value)) {\n\t\t\t\tresult[info.name] = [].concat(result[info.name], info.value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {HTMLInputElement} node\n\t\t * @returns {{name:string, value:string | string[]} | undefined}\n\t\t */\n\t\tfunction getInputInfo(node) {\n\t\t\ttry {\n\t\t\t\t/** @type {{name: string, value: string | string[]}}*/\n\t\t\t\tvar result = {\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tvalue: node.value,\n\t\t\t\t};\n\n\t\t\t\tif (result.name == undefined || result.value == undefined) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (node.type == \"radio\" && node.checked == false) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (node.type == \"checkbox\") {\n\t\t\t\t\tif (node.checked == false) {\n\t\t\t\t\t\tresult.value = undefined;\n\t\t\t\t\t} else if (typeof result.value === \"string\") {\n\t\t\t\t\t\tresult.value = [result.value];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (node.type == \"select-multiple\") {\n\t\t\t\t\t/** @type {NodeListOf<HTMLSelectElement>} */\n\t\t\t\t\tvar selected = node.querySelectorAll(\"option[selected]\");\n\n\t\t\t\t\tresult.value = [];\n\t\t\t\t\tfor (var index = 0; index < selected.length; index++) {\n\t\t\t\t\t\tresult.value.push(selected[index].value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} catch (e) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t};\n\n\t_hyperscript.config.conversions[\"HTML\"] = function (value) {\n\t\tvar toHTML = /** @returns {string}*/ function (/** @type any*/ value) {\n\t\t\tif (value instanceof Array) {\n\t\t\t\treturn value\n\t\t\t\t\t.map(function (item) {\n\t\t\t\t\t\treturn toHTML(item);\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\");\n\t\t\t}\n\n\t\t\tif (value instanceof HTMLElement) {\n\t\t\t\treturn value.outerHTML;\n\t\t\t}\n\n\t\t\tif (value instanceof NodeList) {\n\t\t\t\tvar result = \"\";\n\t\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\t\tvar node = value[i];\n\t\t\t\t\tif (node instanceof HTMLElement) {\n\t\t\t\t\t\tresult += node.outerHTML;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tif (value.toString) {\n\t\t\t\treturn value.toString();\n\t\t\t}\n\n\t\t\treturn \"\";\n\t\t};\n\n\t\treturn toHTML(value);\n\t};\n\n\t_hyperscript.config.conversions[\"Fragment\"] = function (val) {\n\t\tvar frag = document.createDocumentFragment();\n\t\t_hyperscript.internals.runtime.implicitLoop(val, function (val) {\n\t\t\tif (val instanceof Node) frag.append(val);\n\t\t\telse {\n\t\t\t\tvar temp = document.createElement(\"template\");\n\t\t\t\ttemp.innerHTML = val;\n\t\t\t\tfrag.append(temp.content);\n\t\t\t}\n\t\t});\n\t\treturn frag;\n\t};\n}\n","\nimport _hyperscript from \"../lib/core.js\"\n\nimport web from \"../lib/web.js\"\nimport worker from \"../lib/plugin/worker.js\"\nimport socket from \"../lib/plugin/socket.js\"\nimport eventsource from \"../lib/plugin/eventsource.js\"\nimport template from \"../lib/plugin/template.js\"\nimport hdb from \"../lib/plugin/hdb.js\"\n\nweb(_hyperscript)\nworker(_hyperscript)\nsocket(_hyperscript)\neventsource(_hyperscript)\ntemplate(_hyperscript)\nhdb(_hyperscript)\n\nexport default _hyperscript","///=========================================================================\n/// This module provides the worker feature for hyperscript\n///=========================================================================\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\n\tvar invocationIdCounter = 0;\n\n\tvar workerFunc = function (self) {\n\t\tself.onmessage = function (e) {\n\t\t\tswitch (e.data.type) {\n\t\t\t\tcase \"init\":\n\t\t\t\t\tself.importScripts(e.data._hyperscript);\n\t\t\t\t\tself.importScripts.apply(self, e.data.extraScripts);\n\t\t\t\t\tconst _hyperscript = self['_hyperscript']\n\t\t\t\t\tvar tokens = _hyperscript.internals.lexer.makeTokensObject(e.data.tokens, [], e.data.source);\n\t\t\t\t\tvar hyperscript = _hyperscript.internals.parser.parseElement(\"hyperscript\", tokens);\n\t\t\t\t\thyperscript.apply(self, self);\n\t\t\t\t\tpostMessage({ type: \"didInit\" });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"call\":\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar result = self['_hyperscript'].internals.runtime\n\t\t\t\t\t\t\t.getHyperscriptFeatures(self)[e.data.function]\n\t\t\t\t\t\t\t.apply(self, e.data.args);\n\t\t\t\t\t\tPromise.resolve(result)\n\t\t\t\t\t\t\t.then(function (value) {\n\t\t\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\t\t\ttype: \"resolve\",\n\t\t\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(function (error) {\n\t\t\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\t\t\ttype: \"reject\",\n\t\t\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\t\t\terror: error.toString(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\ttype: \"reject\",\n\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\terror: error.toString(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t};\n\n\t// extract the body of the function, which was only defined so\n\t// that we can get syntax highlighting\n\tvar workerCode = \"(\" + workerFunc.toString() + \")(self)\";\n\tvar blob = new Blob([workerCode], { type: \"text/javascript\" });\n\tvar workerUri = URL.createObjectURL(blob);\n\n\t_hyperscript.addFeature(\"worker\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"worker\")) {\n\t\t\tvar name = parser.requireElement(\"dotOrColonPath\", tokens);\n\t\t\tvar qualifiedName = name.evaluate();\n\t\t\tvar nameSpace = qualifiedName.split(\".\");\n\t\t\tvar workerName = nameSpace.pop();\n\n\t\t\t// Parse extra scripts\n\t\t\tvar extraScripts = [];\n\t\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\t\tif (tokens.matchOpToken(\")\")) {\n\t\t\t\t\t// no external scripts\n\t\t\t\t} else {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tvar extraScript = tokens.requireTokenType(\"STRING\").value;\n\t\t\t\t\t\tvar absoluteUrl = new URL(extraScript, location.href).href;\n\t\t\t\t\t\textraScripts.push(absoluteUrl);\n\t\t\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\t\t\ttokens.requireOpToken(\")\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Consume worker methods\n\n\t\t\tvar funcNames = [];\n\t\t\tvar bodyStartIndex = tokens.consumed.length;\n\t\t\tvar bodyEndIndex = tokens.consumed.length;\n\t\t\tdo {\n\t\t\t\tvar feature = parser.parseAnyOf([\"defFeature\", \"jsFeature\"], tokens);\n\t\t\t\tif (feature) {\n\t\t\t\t\tif (feature.type === \"defFeature\") {\n\t\t\t\t\t\tfuncNames.push(feature.name);\n\t\t\t\t\t\tbodyEndIndex = tokens.consumed.length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (tokens.hasMore()) continue;\n\t\t\t\t\t}\n\t\t\t\t} else break;\n\t\t\t} while (tokens.matchToken(\"end\") && tokens.hasMore()); // worker end\n\n\t\t\tvar bodyTokens = tokens.consumed.slice(bodyStartIndex, bodyEndIndex + 1);\n\n\t\t\t// Create worker\n\n\t\t\tvar worker = new Worker(workerUri);\n\n\t\t\t// Send init message to worker\n\n\t\t\tworker.postMessage({\n\t\t\t\ttype: \"init\",\n\t\t\t\t_hyperscript: runtime.hyperscriptUrl,\n\t\t\t\textraScripts: extraScripts,\n\t\t\t\ttokens: bodyTokens,\n\t\t\t\tsource: tokens.source,\n\t\t\t});\n\n\t\t\tvar workerPromise = new Promise(function (resolve, reject) {\n\t\t\t\tworker.addEventListener(\n\t\t\t\t\t\"message\",\n\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\tif (e.data.type === \"didInit\") resolve();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// Create function stubs\n\t\t\tvar stubs = {};\n\t\t\tfuncNames.forEach(function (funcName) {\n\t\t\t\tconsole.log(funcName)\n\t\t\t\tstubs[funcName] = function () {\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tvar id = invocationIdCounter++;\n\t\t\t\t\t\tworker.addEventListener(\"message\", function returnListener(e) {\n\t\t\t\t\t\t\tif (e.data.id !== id) return;\n\t\t\t\t\t\t\tworker.removeEventListener(\"message\", returnListener);\n\t\t\t\t\t\t\tif (e.data.type === \"resolve\") resolve(e.data.value);\n\t\t\t\t\t\t\telse reject(e.data.error);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tworkerPromise.then(function () {\n\t\t\t\t\t\t\t// Worker has been initialized, send invocation.\n\t\t\t\t\t\t\tworker.postMessage({\n\t\t\t\t\t\t\t\ttype: \"call\",\n\t\t\t\t\t\t\t\tfunction: funcName,\n\t\t\t\t\t\t\t\targs: Array.from(args),\n\t\t\t\t\t\t\t\tid: id,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tname: workerName,\n\t\t\t\tworker: worker,\n\t\t\t\tinstall: function (target) {\n\t\t\t\t\truntime.assignToNamespace(target, nameSpace, workerName, stubs);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n}\n","///=========================================================================\n/// This module provides the EventSource (SSE) feature for hyperscript\n///=========================================================================\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\t_hyperscript.addFeature(\"eventsource\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"eventsource\")) {\n\t\t\tvar urlElement;\n\t\t\tvar withCredentials = false;\n\n\t\t\t// Get the name we'll assign to this EventSource in the hyperscript context\n\t\t\t/** @type {string} */\n\t\t\tvar name = parser.requireElement(\"dotOrColonPath\", tokens).evaluate();\n\t\t\tvar nameSpace = name.split(\".\");\n\t\t\tvar eventSourceName = nameSpace.pop();\n\n\t\t\t// Get the URL of the EventSource\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\turlElement = parser.requireElement(\"stringLike\", tokens);\n\t\t\t}\n\n\t\t\t// Get option to connect with/without credentials\n\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\tif (tokens.matchToken(\"credentials\")) {\n\t\t\t\t\twithCredentials = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/** @type {EventSourceStub} */\n\t\t\tvar stub = {\n\t\t\t\teventSource: null,\n\t\t\t\tlisteners: [],\n\t\t\t\tretryCount: 0,\n\t\t\t\topen: function (url) {\n\t\t\t\t\t// calculate default values for URL argument.\n\t\t\t\t\tif (url == undefined) {\n\t\t\t\t\t\tif (stub.eventSource != null && stub.eventSource.url != undefined) {\n\t\t\t\t\t\t\turl = stub.eventSource.url;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow \"no url defined for EventSource.\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guard multiple opens on the same EventSource\n\t\t\t\t\tif (stub.eventSource != null) {\n\t\t\t\t\t\t// If we're opening a new URL, then close the old one first.\n\t\t\t\t\t\tif (url != stub.eventSource.url) {\n\t\t\t\t\t\t\tstub.eventSource.close();\n\t\t\t\t\t\t} else if (stub.eventSource.readyState != EventSource.CLOSED) {\n\t\t\t\t\t\t\t// Otherwise, we already have the right connection open, so there's nothing left to do.\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open the EventSource and get ready to populate event handlers\n\t\t\t\t\tstub.eventSource = new EventSource(url, {\n\t\t\t\t\t\twithCredentials: withCredentials,\n\t\t\t\t\t});\n\n\t\t\t\t\t// On successful connection. Reset retry count.\n\t\t\t\t\tstub.eventSource.addEventListener(\"open\", function (event) {\n\t\t\t\t\t\tstub.retryCount = 0;\n\t\t\t\t\t});\n\n\t\t\t\t\t// On connection error, use exponential backoff to retry (random values from 1 second to 2^7 (128) seconds\n\t\t\t\t\tstub.eventSource.addEventListener(\"error\", function (event) {\n\t\t\t\t\t\t// If the EventSource is closed, then try to reopen\n\t\t\t\t\t\tif (stub.eventSource.readyState == EventSource.CLOSED) {\n\t\t\t\t\t\t\tstub.retryCount = Math.min(7, stub.retryCount + 1);\n\t\t\t\t\t\t\tvar timeout = Math.random() * (2 ^ stub.retryCount) * 500;\n\t\t\t\t\t\t\twindow.setTimeout(stub.open, timeout);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Add event listeners\n\t\t\t\t\tfor (var index = 0; index < stub.listeners.length; index++) {\n\t\t\t\t\t\tvar item = stub.listeners[index];\n\t\t\t\t\t\tstub.eventSource.addEventListener(item.type, item.handler, item.options);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tif (stub.eventSource != undefined) {\n\t\t\t\t\t\tstub.eventSource.close();\n\t\t\t\t\t}\n\t\t\t\t\tstub.retryCount = 0;\n\t\t\t\t},\n\t\t\t\taddEventListener: function (type, handler, options) {\n\t\t\t\t\tstub.listeners.push({\n\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\thandler: handler,\n\t\t\t\t\t\toptions: options,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (stub.eventSource != null) {\n\t\t\t\t\t\tstub.eventSource.addEventListener(type, handler, options);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t// Create the \"feature\" that will be returned by this function.\n\n\t\t\t/** @type {EventSourceFeature} */\n\t\t\tvar feature = {\n\t\t\t\tname: eventSourceName,\n\t\t\t\tobject: stub,\n\t\t\t\tinstall: function (target) {\n\t\t\t\t\truntime.assignToNamespace(target, nameSpace, eventSourceName, stub);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t// Parse each event listener and add it into the list\n\t\t\twhile (tokens.matchToken(\"on\")) {\n\t\t\t\t// get event name\n\t\t\t\tvar eventName = parser.requireElement(\"stringLike\", tokens, \"Expected event name\").evaluate(); // OK to evaluate this in real-time?\n\n\t\t\t\t// default encoding is \"\" (autodetect)\n\t\t\t\tvar encoding = \"\";\n\n\t\t\t\t// look for alternate encoding\n\t\t\t\tif (tokens.matchToken(\"as\")) {\n\t\t\t\t\tencoding = parser.requireElement(\"stringLike\", tokens, \"Expected encoding type\").evaluate(); // Ok to evaluate this in real time?\n\t\t\t\t}\n\n\t\t\t\t// get command list for this event handler\n\t\t\t\tvar commandList = parser.requireElement(\"commandList\", tokens);\n\t\t\t\taddImplicitReturnToCommandList(commandList);\n\t\t\t\ttokens.requireToken(\"end\");\n\n\t\t\t\t// Save the event listener into the feature. This lets us\n\t\t\t\t// connect listeners to new EventSources if we have to reconnect.\n\t\t\t\tstub.listeners.push({\n\t\t\t\t\ttype: eventName,\n\t\t\t\t\thandler: makeHandler(encoding, commandList),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttokens.requireToken(\"end\");\n\n\t\t\t// If we have a URL element, then connect to the remote server now.\n\t\t\t// Otherwise, we can connect later with a call to .open()\n\t\t\tif (urlElement != undefined) {\n\t\t\t\tstub.open(urlElement.evaluate());\n\t\t\t}\n\n\t\t\t// Success!\n\t\t\treturn feature;\n\n\t\t\t////////////////////////////////////////////\n\t\t\t// ADDITIONAL HELPER FUNCTIONS HERE...\n\t\t\t////////////////////////////////////////////\n\n\t\t\t/**\n\t\t\t * Makes an eventHandler function that can execute the correct hyperscript commands\n\t\t\t * This is outside of the main loop so that closures don't cause us to run the wrong commands.\n\t\t\t *\n\t\t\t * @param {string} encoding\n\t\t\t * @param {*} commandList\n\t\t\t * @returns {EventHandlerNonNull}\n\t\t\t */\n\t\t\tfunction makeHandler(encoding, commandList) {\n\t\t\t\treturn function (evt) {\n\t\t\t\t\tvar data = decode(evt[\"data\"], encoding);\n\t\t\t\t\tvar context = runtime.makeContext(stub, feature, stub);\n\t\t\t\t\tcontext.event = evt;\n\t\t\t\t\tcontext.result = data;\n\t\t\t\t\tcommandList.execute(context);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Decodes/Unmarshals a string based on the selected encoding. If the\n\t\t\t * encoding is not recognized, attempts to auto-detect based on its content\n\t\t\t *\n\t\t\t * @param {string} data - The original data to be decoded\n\t\t\t * @param {string} encoding - The method that the data is currently encoded (\"string\", \"json\", or unknown)\n\t\t\t * @returns {string} - The decoded data\n\t\t\t */\n\t\t\tfunction decode(data, encoding) {\n\t\t\t\t// Force JSON encoding\n\t\t\t\tif (encoding == \"json\") {\n\t\t\t\t\treturn JSON.parse(data);\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, return the data without modification\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Adds a \"HALT\" command to the commandList.\n\t\t\t * TODO: This seems like something that could be optimized:\n\t\t\t * maybe the parser could do automatically,\n\t\t\t * or could be a public function in the parser available to everyone,\n\t\t\t * or the command-executer-thingy could just handle nulls implicitly.\n\t\t\t *\n\t\t\t * @param {*} commandList\n\t\t\t * @returns void\n\t\t\t */\n\t\t\tfunction addImplicitReturnToCommandList(commandList) {\n\t\t\t\tif (commandList.next) {\n\t\t\t\t\treturn addImplicitReturnToCommandList(commandList.next);\n\t\t\t\t}\n\n\t\t\t\tcommandList.next = {\n\t\t\t\t\ttype: \"implicitReturn\",\n\t\t\t\t\top: function (/** @type {Context} */ _context) {\n\t\t\t\t\t\treturn runtime.HALT;\n\t\t\t\t\t},\n\t\t\t\t\texecute: function (/** @type {Context} */ _context) {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n}","\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\tfunction HDB(ctx, runtime, breakpoint) {\n\t\tthis.ctx = ctx;\n\t\tthis.runtime = runtime;\n\t\tthis.cmd = breakpoint;\n\t\tthis._hyperscript = _hyperscript;\n\n\t\tthis.cmdMap = [];\n\n\t\tthis.bus = new EventTarget();\n\t} // See below for methods\n\n\t_hyperscript.addCommand(\"breakpoint\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"breakpoint\")) return;\n\n\t\tvar hdb;\n\n\t\treturn {\n\t\t\top: function (ctx) {\n\t\t\t\tglobalThis.hdb = hdb = new HDB(ctx, runtime, this);\n\t\t\t\ttry {\n\t\t\t\t\treturn hdb.break(ctx);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e, e.stack);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t});\n\tHDB.prototype.break = function(ctx) {\n\t\tconsole.log(\"=== HDB///_hyperscript/debugger ===\");\n\t\tthis.ui();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.bus.addEventListener(\n\t\t\t\t\"continue\",\n\t\t\t\t() => {\n\t\t\t\t\tif (this.ctx !== ctx) {\n\t\t\t\t\t\t// Context switch\n\t\t\t\t\t\tfor (var attr in ctx) {\n\t\t\t\t\t\t\tdelete ctx[attr];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tObject.assign(ctx, this.ctx);\n\t\t\t\t\t}\n\t\t\t\t\tdelete window['hdb'];\n\t\t\t\t\tresolve(this.runtime.findNext(this.cmd, this.ctx));\n\t\t\t\t},\n\t\t\t\t{ once: true }\n\t\t\t);\n\t\t});\n\t};\n\n\tHDB.prototype.continueExec = function () {\n\t\tthis.bus.dispatchEvent(new Event(\"continue\"));\n\t};\n\n\tHDB.prototype.stepOver = function () {\n\t\tif (!this.cmd) return this.continueExec();\n\t\tvar result =\n\t\t\tthis.cmd && this.cmd.type === \"breakpointCommand\"\n\t\t\t\t? this.runtime.findNext(this.cmd, this.ctx)\n\t\t\t\t: this.runtime.unifiedEval(this.cmd, this.ctx);\n\t\tif (result.type === \"implicitReturn\") return this.stepOut();\n\t\tif (result && result.then instanceof Function) {\n\t\t\treturn result.then(next => {\n\t\t\t\tthis.cmd = next;\n\t\t\t\tthis.bus.dispatchEvent(new Event(\"step\"));\n\t\t\t\tthis.logCommand();\n\t\t\t});\n\t\t} else if (result.halt_flag) {\n\t\t\tthis.bus.dispatchEvent(new Event(\"continue\"));\n\t\t} else {\n\t\t\tthis.cmd = result;\n\t\t\tthis.bus.dispatchEvent(new Event(\"step\"));\n\t\t\tthis.logCommand();\n\t\t}\n\t};\n\n\tHDB.prototype.stepOut = function () {\n\t\tif (!this.ctx.meta.caller) return this.continueExec();\n\t\tvar callingCmd = this.ctx.meta.callingCommand;\n\t\tvar oldMe = this.ctx.me;\n\t\tthis.ctx = this.ctx.meta.caller;\n\t\tconsole.log(\n\t\t\t\"[hdb] stepping out into \" + this.ctx.meta.feature.displayName)\n\t\tif (this.ctx.me instanceof Element && this.ctx.me !== oldMe) {\n\t\t\tconsole.log(\"[hdb] me: \", this.ctx.me)\n\t\t}\n\t\tthis.cmd = this.runtime.findNext(callingCmd, this.ctx);\n\t\tthis.cmd = this.runtime.findNext(this.cmd, this.ctx);\n\t\tthis.logCommand();\n\t\tthis.bus.dispatchEvent(new Event(\"step\"));\n\t};\n\n\tHDB.prototype.skipTo = function (toCmd) {\n\t\tthis.cmd = toCmd.cmd\n\t\tthis.bus.dispatchEvent(new Event(\"skip\"));\n\t}\n\n\tHDB.prototype.rewrite = function (command, newCode) {\n\t\tconsole.log('##', command)\n\t\tconst parent = command.cmd.parent\n\t\tlet prev\n\t\tfor (prev of parent.children) {\n\t\t\tif (prev.next === command.cmd) break;\n\t\t}\n\t\tconst next = command.next\n\n\t\tconst tok = _hyperscript.internals.lexer.tokenize(newCode)\n\t\tconst newcmd = _hyperscript.internals.parser.requireElement('command', tok)\n\n\t\tconsole.log(newcmd)\n\t\tnewcmd.startToken = command.startToken\n\t\tnewcmd.endToken = command.endToken\n\t\tnewcmd.programSource = command.programSource\n\t\tnewcmd.sourceFor = function () { return newCode }\n\n\t\tprev.next = newcmd\n\t\tnewcmd.next = next\n\t\tnewcmd.parent = parent\n\n\t\tthis.bus.dispatchEvent(new Event('step'))\n\t}\n\n\tHDB.prototype.logCommand = function () {\n\t\tvar hasSource = this.cmd.sourceFor instanceof Function;\n\t\tvar cmdSource = hasSource ? this.cmd.sourceFor() : '-- '+this.cmd.type;\n\t\tconsole.log(\"[hdb] current command: \" + cmdSource)\n\t}\n\n\tHDB.prototype.traverse = function (ge) {\n\t\tconst rv = [];\n\n\t\t(function recurse (ge) {\n\t\t\trv.push(ge);\n\t\t\tfor (const child of ge.children) recurse(rv);\n\t\t})(ge);\n\n\t\treturn rv;\n\t}\n\n\tvar ui = `\n<div class=\"hdb\" _=\"\n\ton load trigger update end \n\ton step from hdb.bus trigger update end\n\ton skip from hdb.bus trigger update end\n\ton continue from hdb.bus log 'done' then remove me.getRootNode().host\">\n\n\t<script type=\"text/hyperscript\">\n\n\tdef escapeHTML(unsafe)\n\t\tjs(unsafe) return unsafe\n\t\t\t.replace(/&/g, \"&amp;\")\n\t\t\t.replace(/</g, \"&lt;\")\n\t\t\t.replace(/>/g, \"&gt;\")\n\t\t\t.replace(/\\\\x22/g, \"&quot;\")\n\t\t\t.replace(/\\\\x27/g, \"&#039;\") end\n\t\treturn it\n\tend\n\n\tdef makeCommandWidget(i)\n\t\tget \\`<span data-cmd=\\${i}><button class=skip data-cmd=\\${i}>&rdca;</button>\\`\n\t\tif hdb.EXPERIMENTAL\n\t\t\tappend \\`<button class=rewrite data-cmd=\\${i}>Rewrite</button></span>\\`\n\t\tend\n\t\treturn it\n\tend\n\n\tdef renderCode\n\t\tset hdb.cmdMap to []\n\t\tset src to hdb.cmd.programSource\n\t\t\n\t\t-- Find feature\n\t\tset feat to hdb.cmd\n\t\trepeat until no feat.parent or feat.isFeature set feat to feat.parent end\n\n\t\t-- Traverse, finding starts\n\t\tfor cmd in hdb.traverse(feat)\n\t\t\tif no cmd.startToken continue end\n\t\t\tappend {\n\t\t\t\tindex: cmd.startToken.start,\n\t\t\t\twidget: makeCommandWidget(hdb.cmdMap.length),\n\t\t\t\tcmd: cmd\n\t\t\t} to hdb.cmdMap\n\t\tend\n\n\t\tset rv to src.slice(0, hdb.cmdMap[0].index)\n\t\tfor obj in hdb.cmdMap index i\n\t\t\tif obj.cmd is hdb.cmd\n\t\t\t\tappend obj.widget + '<u class=current>' +\n\t\t\t\t\tescapeHTML(src.slice(obj.index, hdb.cmdMap[i+1].index)) + '</u>' to rv\n\t\t\telse\n\t\t\t\tappend obj.widget + escapeHTML(src.slice(obj.index, hdb.cmdMap[i+1].index)) to rv\n\t\t\tend\n\t\tend\n\t\treturn rv\n\tend\n\n\tdef truncate(str, len)\n\t\tif str.length <= len return str end\n\t\treturn str.substr(0, len) + '…'\n\n\tdef prettyPrint(obj)\n\t\tif obj is null return 'null' end\n\t\tif Element.prototype.isPrototypeOf(obj)\n\t\t\tset rv to '&lt;<span class=\"token tagname\">' +\n\t\t\t\tobj.tagName.toLowerCase() + \"</span>\"\n\t\t\tfor attr in Array.from(obj.attributes)\n\t\t\t\tif attr.specified\n\t\t\t\t\tset rv to rv +\n\t\t\t\t\t\t' <span class=\"token attr\">' + attr.nodeName +\n\t\t\t\t\t\t'</span>=<span class=\"token string\">\"' + truncate(attr.textContent, 10) +\n\t\t\t\t\t\t'\"</span>'\n\t\t\t\tend\n\t\t\tend\n\t\t\tset rv to rv + '>'\n\t\t\treturn rv\n\t\telse if obj.call\n\t\t\tif obj.hyperfunc\n\t\t\t\tget \"def \" + obj.hypername + ' ...'\n\t\t\telse\n\t\t\t\tget \"function \"+obj.name+\"(...) {...}\"\n\t\t\tend\n\t\telse if obj.toString\n\t\t\tcall obj.toString()\n\t\tend\n\t\treturn escapeHTML((it or 'undefined').trim())\n\tend\n\t</script>\n\n\t<header _=\"\n\ton pointerdown(clientX, clientY)\n\t\thalt the event\n\t\tcall event.stopPropagation()\n\t\tget first .hdb\n\t\tmeasure its x, y\n\t\tset xoff to clientX - x\n\t\tset yoff to clientY - y\n\t\trepeat until event pointerup from document\n\t\t\twait for pointermove or pointerup from document\n\t\t\tadd {\n\t\t\t\tleft: \\${its clientX - xoff}px;\n\t\t\t\ttop: \\${its clientY - yoff}px;\n\t\t\t} to .hdb\n\t\tend\n\t\">\n\t\t<h2 class=\"titlebar\">HDB</h2>\n\t\t<ul role=\"toolbar\" class=\"toolbar\" _=\"on pointerdown halt\">\n\t\t\t<li><button _=\"on click call hdb.continueExec()\">\n\t\t\t\t&#x23F5; Continue\n\t\t\t</button>\n\t\t\t<li><button _=\"on click call hdb.stepOver()\">\n\t\t\t\t&#8631; Step Over\n\t\t\t</button>\n\t\t</ul>\n\t</header>\n\n\t<section class=\"sec-code\">\n\n\t\t<div class=\"code-container\">\n\t\t\t<pre class=\"code language-hyperscript\" _=\"\n\t\t\t\ton update from .hdb if hdb.cmd.programSource\n\t\t\t \tput renderCode() into me\n\t\t\t \tif Prism\n\t\t\t \t\tcall Prism.highlightAllUnder(me)\n\t\t\t \tend\n\t\t\t go to bottom of .current in me\n\t\t\t\tend\n\n\t\t\t\ton click\n\t\t\t\t\tif target matches .skip\n\t\t\t\t\t\tget (target's @data-cmd) as Int\n\t\t\t\t\t\tcall hdb.skipTo(hdb.cmdMap[result])\n\t\t\t\t\tend\n\t\t\t\t\tif target matches .rewrite\n\t\t\t\t\t\tset cmdNo to (target's @data-cmd) as Int\n\t\t\t\t\t\tset span to the first <span[data-cmd='\\${cmdNo}'] />\n\t\t\t\t\t\tput \\`<form class=rewrite><input id=cmd></form>\\` into the span\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\ton submit\n\t\t\t\t\thalt the event\n\t\t\t\t\tget (closest @data-cmd to target) as Int\n\t\t\t\t\tcall hdb.rewrite(hdb.cmdMap[result], #cmd's value)\n\t\t\t\tend\n\t\t\t\"><code></code></pre>\n\t\t</div>\n\t</section>\n\n\t<section class=\"sec-console\" _=\"\n\t\t-- Print context at startup\n\t\tinit repeat for var in Object.keys(hdb.ctx) if var is not 'meta'\n\t\t\tsend hdbUI:consoleEntry(input: var, output: hdb.ctx[var]) to #console\">\n\n\t\t<ul id=\"console\" role=\"list\" _=\"\n\t\t\ton hdbUI:consoleEntry(input, output)\n\t\t\t\tif no hdb.consoleHistory set hdb.consoleHistory to [] end\n\t\t\t\tpush(input) on hdb.consoleHistory\n\t\t\t\tset node to #tmpl-console-entry.content.cloneNode(true)\n\t\t\t\tput the node at end of me\n\t\t\t\tset entry to my lastElementChild\n\t\t\t\tgo to bottom of the entry\n\t\t\t\tput escapeHTML(input) into .input in the entry\n\t\t\t\tif no output\n\t\t\t\t\tcall _hyperscript.internals.runtime.parse(input)\n\t\t\t\t\tif its execute is not undefined then call its execute(hdb.ctx)\n\t\t\t\t\telse call its evaluate(hdb.ctx)\n\t\t\t\t\tend\n\t\t\t\t\tset output to it\n\t\t\t\tend\n\t\t\t\tput prettyPrint(output) as Fragment into .output in the entry\n\t\t\t\">\n\t\t\t<template id=\"tmpl-console-entry\">\n\t\t\t\t<li class=\"console-entry\">\n\t\t\t\t\t<kbd><code class=\"input\"></code></kbd>\n\t\t\t\t\t<samp class=\"output\"></samp>\n\t\t\t\t</li>\n\t\t\t</template>\n\t\t</ul>\n\n\t\t<form id=\"console-form\" data-hist=\"0\" _=\"on submit\n\t\t\t\tsend hdbUI:consoleEntry(input: #console-input's value) to #console\n\t\t\t\tset #console-input's value to ''\n\t\t\t\tset @data-hist to 0\n\t\t\t\tset element oldContent to null\n\t\t\t\thalt\n\t\t\ton keydown[key is 'ArrowUp' or key is 'ArrowDown']\n\t\t\t\tif no hdb.consoleHistory or exit end\n\t\t\t\tif element oldContent is null set element oldContent to #console-input.value end\n\t\t\t\tif event.key is 'ArrowUp' and hdb.consoleHistory.length > -@data-hist\n\t\t\t\t\tdecrement @data-hist\n\t\t\t\telse if event.key is 'ArrowDown' and @data-hist < 0\n\t\t\t\t\tincrement @data-hist\n\t\t\t\tend end\n\t\t\t\tset #console-input.value to hdb.consoleHistory[hdb.consoleHistory.length + @data-hist as Int]\n\t\t\t\t\tor oldContent\n\t\t\t\thalt default\n\t\t\ton input if @data-hist is '0' set element oldContent to #console-input.value\">\n\t\t\t<input id=\"console-input\" placeholder=\"Enter an expression&hellip;\"\n\t\t\t\tautocomplete=\"off\">\n\t\t</form>\n\t</section>\n\n\t<style>\n\t.hdb {\n\t\tborder: 1px solid #888;\n\t\tborder-radius: .3em;\n\t\tbox-shadow: 0 .2em .3em #0008;\n\t\tposition: fixed;\n\t\ttop: .5em; right: .5em;\n\t\twidth: min(40ch, calc(100% - 1em));\n\t\tmax-height: calc(100% - 1em);\n\t\tbackground-color: white;\n\t\tfont-family: sans-serif;\n\t\topacity: .9;\n\t\tz-index: 2147483647;\n\t\tcolor: black;\n\t\tdisplay: flex;\n\t\tflex-flow: column;\n\t}\n\n\t* {\n\t\tbox-sizing: border-box;\n\t}\n\n\theader {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\tpadding: .4em;\n\t}\n\n\t.titlebar {\n\t\tmargin: 0;\n\t\tfont-size: 1em;\n\t\ttouch-action: none;\n\t}\n\n\t.toolbar {\n\t\tdisplay: flex;\n\t\tgap: .35em;\n\n\t\tlist-style: none;\n\t\tpadding-left: 0;\n\t\tmargin: 0;\n\t}\n\n\t.toolbar a, .toolbar button {\n\t\tbackground: #2183ff;\n\t\tborder: 1px solid #3465a4;\n\t\tbox-shadow: 0 1px #b3c6ff inset, 0 .06em .06em #000;\n\t\tborder-radius: .2em;\n\t\tfont: inherit;\n\t\tpadding: .2em .3em;\n\t\tcolor: white;\n\t\ttext-shadow: 0 1px black;\n\t\tfont-weight: bold;\n\t}\n\n\t.toolbar a:hover .toolbar a:focus, .toolbar button:hover, .toolbar button:focus {\n\t\tbackground: #94c8ff;\n\t}\n\n\t.toolbar a:active, .toolbar button:active {\n\t\tbackground: #3465a4;\n\t}\n\n\t.sec-code {\n\t\tborder-radius: .3em;\n\t\toverflow: hidden;\n\t\tbox-shadow: 0 1px white inset, 0 .06em .06em #0008;\n\t\tbackground: #bdf;\n\t\tmargin: 0 .4em;\n\t\tborder: 1px solid #3465a4;\n\t}\n\n\t.hdb h3 {\n\t\tmargin: 0;\n\t\tfont-size: 1em;\n\t\tpadding: .2em .4em 0 .4em;\n\t}\n\n\t.code-container {\n\t\tdisplay: grid;\n\t\tline-height: 1.2em;\n\t\theight: calc(12 * 1.2em);\n\t\tborder-radius: 0 0 .2em .2em;\n\t\toverflow: auto;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: #0003 transparent;\n\t}\n\n\t.code, #console, #console-input {\n\t\tfont-family: Consolas, \"Andale Mono WT\", \"Andale Mono\", \"Lucida Console\", \"Lucida Sans Typewriter\", \"DejaVu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Liberation Mono\", \"Nimbus Mono L\", Monaco, \"Courier New\", Courier, monospace;\n\t}\n\n\t.code {\n\t\twidth: 0;\n\t\tmargin: 0;\n\t\tpadding-left: 1ch;\n\t\ttab-size: 2;\n\t\t-moz-tab-size: 2;\n\t\t-o-tab-size: 2;\n\t}\n\n\t.current {\n\t\tfont-weight: bold;\n\t\tbackground: #abf;\n\t}\n\n\t.skip {\n\t\tpadding: 0;\n\t\tmargin: 2px;\n\t\tborder: 1px solid #3465a4;\n\t\tborder-radius: 50%;\n\t\tcolor: #3465a4;\n\t\tbackground: none;\n\t\tfont-weight: bold;\n\t\tfont-size: 1.2em;\n\t\twidth: calc(2ch / 1.2 - 4px);\n\t\theight: calc(2ch / 1.2 - 4px);\n\t\tline-height: 0.6;\n\t}\n\n\t.skip:hover {\n\t\tbackground: #3465a4;\n\t\tcolor: #bdf;\n\t}\n\n\t#console {\n\t\toverflow-y: scroll;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: #afc2db transparent;\n\t\theight: calc(12 * 1.2em);\n\t\tlist-style: none;\n\t\tpadding-left: 0;\n\t\tmargin: 0 .4em .4em .4em;\n\t\tposition: relative;\n\t\tword-wrap: break-word;\n\t}\n\n\t#console>*+* {\n\t\tmargin-top: .5em;\n\t}\n\n\t.console-entry>* {\n\t\tdisplay: block;\n\t}\n\n\t.console-entry .input { color: #3465a4; }\n\t.console-entry .output { color: #333; }\n\n\t.console-entry .input:before { content: '>> ' }\n\t.console-entry .output:before { content: '<- ' }\n\n\t#console-form {\n\t\tmargin: 0 .4em .4em .4em;\n\t}\n\n\t#console-input {\n\t\twidth: 100%;\n\t\tfont-size: inherit;\n\t}\n\n\t.token.tagname { font-weight: bold; }\n\t.token.attr, .token.builtin, .token.italic { font-style: italic; }\n\t.token.string { opacity: .8; }\n\t.token.keyword { color: #3465a4; }\n\t.token.bold, .token.punctuation, .token.operator { font-weight: bold; }\n\t</style>\n\t</div>\n\t`;\n\tHDB.prototype.ui = function () {\n\t\tvar node = document.createElement(\"div\");\n\t\tvar shadow = node.attachShadow({ mode: \"open\" });\n\t\tnode.style.cssText = \"all: initial\";\n\t\tshadow.innerHTML = ui;\n\t\tdocument.body.appendChild(node);\n\t\t_hyperscript.processNode(shadow.querySelector(\".hdb\"));\n\t};\n}\n"],"names":["mergeObjects","obj1","obj2","key","hasOwnProperty","getOrInitObject","root","prop","value","newObj","varargConstructor","Cls","args","bind","apply","concat","_hyperscript","globalScope","globalThis","ElementCollection","css","relativeToElement","escape","this","_css","contains","elt","selectMatches","Symbol","iterator","_runtime","getRootNode","querySelectorAll","escapeSelector","substr","className","length","_lexer","OP_TABLE","$","isValidCSSClassChar","c","isAlpha","isNumeric","isValidCSSIDChar","isWhitespace","isNewline","isIdentifierChar","dollarIsOp","makeTokensObject","tokens","consumed","source","consumeWhitespace","_lastConsumed","token","type","push","shift","raiseError","error","_parser","raiseParseError","matchOpToken","currentToken","op","consumeToken","matchTokenType","type1","type2","type3","type4","indexOf","matchToken","follows","match","consumeUntil","tokenList","n","dontIgnoreWhitespace","i","pushFollow","str","popFollow","pop","clearFollow","tmp","restoreFollow","f","matchAnyToken","op1","op2","op3","arguments","opToken","matchAnyOpToken","requireOpToken","requireTokenType","JSON","stringify","requireToken","list","hasMore","lastMatch","consumeUntilWhitespace","lastWhitespace","sourceFor","substring","startToken","start","endToken","end","lineFor","split","line","isValidSingleQuoteStringStart","previousToken","tokenize","string","template","position","column","lastToken","templateBraceCount","inTemplate","currentChar","nextChar","charAfterThat","possiblePrecedingSymbol","consumeAttributeReference","consumeShortAttributeReference","consumeIdentifier","consumeNumber","consumeOp","makeToken","consumeChar","Error","consumeString","consumeIdReference","consumeClassReference","consumeComment","classRef","attributeRef","idRef","identifier","number","makeOpToken","startChar","charAt","whitespace","GRAMMAR","COMMANDS","FEATURES","LEAF_EXPRESSIONS","INDIRECT_EXPRESSIONS","initElt","parseElement","programSource","undefined","elementDefinition","requireElement","message","result","parseAnyOf","types","expression","addGrammarElement","name","definition","lines","contextLine","repeat","createParserContext","commandStart","featureStart","parser","runtime","featureElement","featureDefinition","commandElement","commandDefinition","cmd","next","indirect","unless","context","conditional","execute","unifiedExec","parent","leaf","setParent","children","Set","add","commandBoundary","parseHyperScript","addCommand","keyword","commandGrammarType","commandDefinitionWrapper","meta","command","addFeature","featureGrammarType","featureDefinitionWrapper","isFeature","addLeafExpression","addIndirectExpression","parseStringTemplate","returnArr","startingBrace","ensureTerminated","commandList","implicitReturn","returned","resolve","HALT","ctx","CONVERSIONS","dynamicResolvers","Number","toFixed","num","parseInt","String","val","toString","Int","Float","parseFloat","Date","Array","from","Object","parse","matchesSelector","selector","matchesFunction","matches","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","call","triggerEvent","eventName","detail","event","evt","Event","bubbles","cancelable","document","createEvent","initCustomEvent","makeEvent","dispatchEvent","isArrayLike","isArray","NodeList","HTMLCollection","shouldAutoIterate","forEach","func","isIterable","ARRAY_SENTINEL","array_sentinel","unwrapAsyncs","values","asyncWrapper","j","valueElement","unifiedEval","async","wrappedAsyncs","argument","arr","element","evaluate","then","Promise","reject","linearized","arg","linearize","all","valueArray","delinearize","e","reason","_scriptAttrs","getScriptAttributes","config","attributes","replace","getScript","scriptAttribute","hasAttribute","getAttribute","HTMLScriptElement","innerText","hyperscriptFeaturesMap","WeakMap","getHyperscriptFeatures","hyperscriptFeatures","get","set","addFeatures","owner","parentElement","makeContext","feature","hyperscriptTarget","lexer","iterators","me","target","body","src","last","initElement","closest","disableSelector","internalData","getInternalData","initialized","script","hyperScript","setTimeout","hyperscript","console","stack","internalDataMap","getElementScope","scopeName","behavior","typeCheck","typeString","nullOk","prototype","slice","implicitLoop","processNode","getScriptSelector","HyperscriptModule","mod","_this","module","id","EventTarget","evaluateNoPromise","map","attribute","join","resolveSymbol","fromMetaContext","fromContext","setSymbol","elementScope","findNext","resolveNext","convertValue","converted","dynamicResolver","converter","handlingFinally","registerHyperTrace","errorHandler","handlingError","errorSymbol","currentException","resolvedNext","finallyHandler","onHalt","resolveProperty","property","component","componentValue","assignToNamespace","nameSpace","propertyName","newRoot","thrown","trace","caller","traceMap","Map","print","logger","maxLen","Math","max","displayName","traceElt","padEnd","getHyperTrace","nullCheck","isEmpty","doesExist","node","Node","rv","Document","ShadowRoot","getEventQueueFor","onFeature","eventQueuesForElt","eventQueues","eventQueueForFeature","queue","executing","hyperscriptUrl","sloppyContains","container","includes","sloppyMatches","toMatch","parseSendCmd","cmdType","details","toExpr","sendCmd","to","expr","stringToken","rawValue","innerTokens","returnStr","tokenArr","t","numberToken","elementId","templateValue","getElementById","TemplatedQueryElementCollection","templateParts","_this2","elements","filter","Element","el","dataset","hsQueryId","removeAttribute","queryTokens","queryValue","outerVal","innerValue","beingTold","keyExpressions","valueExpressions","keys","returnVal","fields","_namedArgList_","scope","eltPrefix","booleanLiteral","arg1","time","factor","_context","rootVal","childOfUrRoot","urRoot","propertyAccess","possessivesDisabled","apostrophe","query","targetElt","results","rootElt","conversion","functionCall","argExressions","rootRoot","hyperfunc","argVals","_ctx","andBefore","andAfter","firstIndex","secondIndex","arrayIndex","typeName","scanForwardArray","array","wrap","first","forwardSearch","thing","withinElt","inSearch","inElt","wrapping","operator","reverse","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","scanForwardQuery","DOCUMENT_POSITION_FOLLOWING","scanBackwardsQuery","rhs","rhsVal","floor","random","mathOp","initialMathOp","lhs","lhsVal","comparisonToken","hasRightValue","logicalOp","initialLogicalOp","features","install","parseEventArgs","every","events","startCountToken","startCount","endCountToken","endCount","unbounded","intersectionSpec","mutationSpec","elsewhere","inExpr","debounceTime","throttleTime","execCount","on","debounced","lastExec","queueLast","queueFirst","queueNone","eventQueueInfo","queued","err","hypertrace","eventSpec","targets","MutationObserver","mutationList","observer","observe","IntersectionObserver","entries","entry","isIntersecting","addEventListener","listener","isConnected","removeEventListener","initialCtx","inElement","clearTimeout","now","nameVal","funcName","functionFeature","argumentVal","callingCommand","promise","theResolve","theReject","returnValue","hypername","setCmd","setFeature","initFeature","path","formalParams","hs","innerArgs","installFeature","behaviorPath","behaviorNamespace","Function","jsSourceStart","jsLastToken","funcNames","expectFunctionDeclaration","peek","exposedFunctionNames","jsSource","jsBody","function","inputs","inp","input","actualResult","slot","tellCmd","index","originalBeingTold","lookahead","resolved","eventInfo","_this3","once","timeValue","_this4","separator","parseReturnFunction","returnAValue","returnCmd","keepExecuting","bubbling","haltDefault","exit","stopPropagation","preventDefault","exprs","withExpr","logCmd","log","throwCmd","parseCallOrGet","callCmd","tagname","classes","re","exec","trim","createElement","classList","functionName","pseudoCommand","makeSetter","symbolWrite","attributeWrite","valueToSet","setAttribute","setter","defaultCmd","obj","objectLiteral","trueBranch","falseBranch","ifCmd","exprValue","parseRepeatExpression","startedWithForToken","innerStartToken","identifierToken","whileExpr","isUntil","forever","times","indexIdentifier","loop","waitATick","repeatCmd","until","whileValue","iteratorInfo","keepLooping","loopVal","eventFired","nextValFromIterator","done","repeatInit","targetExpr","implicitResultSymbol","innerHTML","amount","implicitIncrementOp","targetValue","newValue","implicitDecrementOp","url","fetchCmd","argExpressions","abortController","AbortController","abortListener","abort","signal","finished","timeout","fetch","resp","resultDetails","response","json","text","scripts","res","code","fn","metaConfig","querySelector","jString","msg","parseJSON","content","documentElement","readyState","internals","defaultTransition","conversions","genUUID","r","createSocket","WebSocket","compileTemplate","p1","onExpr","settleCommand","transitionStarted","cssDeclaration","classRefs","attrRef","style","cssText","stringParts","opencurly","tok","part","idx","elementExpr","fromExpr","removeChild","remove","between","classRef2","toggleCmd","toggle","HIDE_SHOW_STRATEGIES","display","originalDisplay","removeProperty","visibility","opacity","parseShowHideTarget","currentTokenValue","resolveStrategy","configDefault","defaultHideShowStrategy","strategies","hideShowStrategies","putInto","valueToPut","HTMLDocument","firstChild","append","parsePseudopossessiveTarget","hideShowStrategy","when","forExpr","forElt","eltColl","clazz","operationToken","operation","rootExpr","before","after","prepend","targetsExpr","properties","over","using","transition","promises","initialTransition","computedStyles","getComputedStyle","initialStyles","initalStyles","fromVal","toVal","propsToMeasure","rect","getBoundingClientRect","scroll","top","scrollTop","left","scrollLeft","topMax","scrollTopMax","leftMax","scrollLeftMax","height","scrollHeight","width","scrollWidth","x","y","right","bottom","bounds","parentSearch","closestExpr","back","newWindow","verticalPosition","horizontalPosition","smoothness","scrollOptions","block","inline","goCmd","window","history","open","location","href","scrollIntoView","getInputInfo","appendValue","info","checked","selected","toHTML","item","HTMLElement","outerHTML","frag","createDocumentFragment","temp","web","invocationIdCounter","workerCode","self","onmessage","data","importScripts","extraScripts","postMessage","blob","Blob","workerUri","URL","createObjectURL","workerName","extraScript","absoluteUrl","bodyStartIndex","bodyEndIndex","bodyTokens","worker","Worker","workerPromise","stubs","returnListener","PROXY_BLACKLIST","socketName","defaultTimeout","jsonMessages","messageHandler","socket","rpcProxy","getProxy","Proxy","uuid","rpcInfo","iid","send","socketObject","raw","sentBy","rpc","socketFeature","dataAsJson","urlElement","makeHandler","encoding","decode","stub","addImplicitReturnToCommandList","withCredentials","eventSourceName","eventSource","listeners","retryCount","close","EventSource","CLOSED","min","handler","options","object","eventsource","template_","templateArgs","buf","assign","__ht_template_result","renderTemplate","escapeType","unescaped","HDB","breakpoint","cmdMap","bus","hdb","ui","attr","continueExec","stepOver","stepOut","logCommand","halt_flag","callingCmd","oldMe","skipTo","toCmd","rewrite","newCode","prev","newcmd","cmdSource","traverse","ge","recurse","shadow","attachShadow","mode","appendChild"],"mappings":"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"}
\No newline at end of file