{"version":3,"file":"app.dfab949a9631f3fa516a.js","mappings":"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","sources":["webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/lib/big.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Numeric.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Util.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Decimal.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/BigInt.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Date.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/RegExp.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Types.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/String.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Option.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Global.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Native.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Array.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/List.js","webpack:///./src/Client/output/fable_modules/Fable.Remoting.Client.7.25.0/Types.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Reflection.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Seq.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/FSharp.Core.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/MapUtil.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/MutableMap.js","webpack:///./src/Client/output/fable_modules/Fable.SimpleJson.3.24.0/TypeInfo.Converter.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/AsyncBuilder.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Choice.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Async.js","webpack:///./src/Client/output/fable_modules/Fable.Remoting.Client.7.25.0/Extensions.fs","webpack:///./src/Client/output/fable_modules/Fable.Remoting.Client.7.25.0/Http.fs","webpack:///./src/Client/output/fable_modules/Fable.Parsimmon.4.0.0/Parsimmon.js","webpack:///./src/Client/output/fable_modules/Fable.Parsimmon.4.0.0/Parsimmon.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Double.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Map.js","webpack:///./src/Client/output/fable_modules/Fable.SimpleJson.3.24.0/Parser.fs","webpack:///./src/Client/output/fable_modules/Fable.SimpleJson.3.24.0/SimpleJson.fs","webpack:///./src/Client/output/fable_modules/Fable.SimpleJson.3.24.0/TypeCheck.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Int32.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Uri.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Long.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/DateOffset.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/DateOnly.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Guid.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/BitConverter.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Set.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/MutableSet.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/TimeSpan.js","webpack:///./src/Client/output/fable_modules/Fable.SimpleJson.3.24.0/isBrowser.js","webpack:///./src/Client/output/fable_modules/Fable.SimpleJson.3.24.0/Json.Converter.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/TimeOnly.js","webpack:///./src/Client/output/fable_modules/Fable.SimpleJson.3.24.0/quote.js","webpack:///./src/Client/output/fable_modules/Fable.Remoting.Client.7.25.0/Proxy.fs","webpack:///./src/Client/output/fable_modules/Fable.Remoting.Client.7.25.0/Remoting.fs","webpack:///./src/Shared/PrimitiveTypes.fs","webpack:///./src/Shared/Api/IAuthApi.fs","webpack:///./src/Client/output/fable_modules/Fable.Elmish.UrlParser.1.0.1/prelude.fs","webpack:///./src/Client/output/fable_modules/Fable.Elmish.UrlParser.1.0.1/parser.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Event.js","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Observable.js","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Cmd.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Timer.js","webpack:///./src/Client/Extensions.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Types.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Logging.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Range.js","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Helpers.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Interop.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/DomHelpers.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Core.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/CoreElements.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/ObservableStore.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Observable.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Store.fs","webpack:///./src/Client/Modules/Auth/Challenge.fs","webpack:///./src/Client/output/fable_modules/Sutil.Toastr.1.0.4/Toastr.fs","webpack:///./src/Client/Toastr.fs","webpack:///./src/Client/output/fable_modules/Feliz.Engine.1.0.0-beta-004/HtmlEngine.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Easing.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Styling.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Transition.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Bindings.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Bind.fs","webpack:///./src/Client/output/fable_modules/Feliz.Engine.1.0.0-beta-004/AttrEngine.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Html.fs","webpack:///./src/Client/output/fable_modules/Feliz.Engine.Event.1.0.0-beta-004/EventEngine.fs","webpack:///./src/Client/output/fable_modules/Feliz.Engine.1.0.0-beta-004/CssEngine.fs","webpack:///./src/Client/Modules/Auth/Login.fs","webpack:///./src/Client/Modules/Auth/Default.fs","webpack:///./src/Client/Modules/AppDocs/Types.fs","webpack:///./src/Shared/Api/IApplicationApi.fs","webpack:///./src/Client/UI.fs","webpack:///./src/Client/Modules/AppDocs/Feedback.fs","webpack:///./src/Client/Modules/AppDocs/About.fs","webpack:///./src/Client/Modules/AppDocs/Default.fs","webpack:///./src/Client/Modules/Organizations/Types.fs","webpack:///./src/Client/output/fable_modules/fable-library.4.1.4/Random.js","webpack:///./src/Shared/Uild.fs","webpack:///./src/Shared/Domain/Organization.fs","webpack:///./src/Shared/Api/IOrganizationsApi.fs","webpack:///./src/Client/output/fable_modules/Thoth.Json.9.0.0/Types.fs","webpack:///./src/Client/output/fable_modules/Thoth.Json.9.0.0/Decode.fs","webpack:///./src/Client/output/fable_modules/Thoth.Json.9.0.0/Encode.fs","webpack:///./src/Client/Util.fs","webpack:///./src/Client/LocalStorage.fs","webpack:///./src/Client/Modules/Organizations/Create.fs","webpack:///./src/Client/Modules/Organizations/Edit.fs","webpack:///./src/Client/Modules/Organizations/Home.fs","webpack:///./src/Client/Modules/Organizations/Default.fs","webpack:///./src/Client/Modules/Members/Types.fs","webpack:///./src/Shared/Domain/Member.fs","webpack:///./src/Shared/Api/IMembersApi.fs","webpack:///./src/Client/Modules/Members/Create.fs","webpack:///./src/Client/Modules/Members/Edit.fs","webpack:///./src/Client/Modules/Members/Home.fs","webpack:///./src/Client/Modules/Members/Default.fs","webpack:///./src/Client/Modules/Employees/Types.fs","webpack:///./src/Shared/Api/IEmployeesApi.fs","webpack:///./src/Client/Modules/Employees/Utils.fs","webpack:///./src/Client/Modules/Employees/UI.fs","webpack:///./src/Client/Modules/Employees/Create.fs","webpack:///./src/Shared/Domain/Employee.fs","webpack:///./src/Client/Modules/Employees/Edit.fs","webpack:///./src/Client/Modules/Employees/Home.fs","webpack:///./src/Client/Modules/Employees/Default.fs","webpack:///./src/Client/Modules/Salaries/Type.fs","webpack:///./src/Shared/Api/ISalariesApi.fs","webpack:///./src/Client/Modules/Salaries/Details.fs","webpack:///./src/Client/Modules/Salaries/Home.fs","webpack:///./src/Shared/Types.fs","webpack:///./src/Client/Modules/Salaries/Default.fs","webpack:///./src/Client/Modules/Inventories/Type.fs","webpack:///./src/Shared/Api/IInventoriesApi.fs","webpack:///./src/Client/Modules/Inventories/Home.fs","webpack:///./src/Client/Modules/Inventories/Default.fs","webpack:///./src/Client/Modules/AppAdmin/Types.fs","webpack:///./src/Client/Modules/AppAdmin/WaitingList.fs","webpack:///./src/Client/Modules/AppAdmin/Feedback.fs","webpack:///./src/Client/Modules/AppAdmin/Home.fs","webpack:///./src/Client/Modules/AppAdmin/Default.fs","webpack:///./src/Client/Modules/Absences/Type.fs","webpack:///./src/Shared/Api/IAbsencesApi.fs","webpack:///./src/Client/Modules/Absences/Home.fs","webpack:///./src/Client/Modules/Absences/Default.fs","webpack:///./src/Client/Router.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Navigable.fs","webpack:///./src/Client/Modules/Home/AuthHome.fs","webpack:///./src/Client/Modules/Home/AnonHome.fs","webpack:///./src/Client/DomHelper.fs","webpack:///./src/Client/View.fs","webpack:///./src/Client/Modules/AppDocs/Team.fs","webpack:///./src/Shared/Claims.fs","webpack:///./src/Client/output/fable_modules/Sutil.2.0.10/Program.fs","webpack:///./src/Client/App.fs","webpack:///./src/Client/output/fable_modules/ConstructStyleSheetsPolyfill.1.0.0-beta-001/adoptedStyleSheets.js"],"sourcesContent":["// Adapted from https://github.com/MikeMcl/big.js/blob/0f94dc9110d55c4f324a47ba6a2e832ce23ac589/big.mjs\n/* tslint:disable */\nvar P = {};\n/*\n * big.js v6.0.3\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\n * Copyright (c) 2020 Michael Mclaughlin\n * https://github.com/MikeMcl/big.js/LICENCE.md\n */\n/************************************** EDITABLE DEFAULTS *****************************************/\n// The default values below must be integers within the stated ranges.\n/*\n * The maximum number of decimal places (DP) of the results of operations involving division:\n * div and sqrt, and pow with negative exponents.\n */\nvar DP = 28, // 0 to MAX_DP\n/*\n * The rounding mode (RM) used when rounding to the above decimal places.\n *\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\n * 3 Away from zero. (ROUND_UP)\n */\nRM = 1, // 0, 1, 2 or 3\n// The maximum value of DP and Big.DP.\nMAX_DP = 1E6, // 0 to 1000000\n// The maximum magnitude of the exponent argument to the pow method.\nMAX_POWER = 1E6, // 1 to 1000000\n/*\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\n * (JavaScript numbers: -7)\n * -1000000 is the minimum recommended exponent value of a Big.\n */\nNE = -29, // 0 to -1000000\n/*\n * The positive exponent (PE) at and above which toString returns exponential notation.\n * (JavaScript numbers: 21)\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\n */\nPE = 29, // 0 to 1000000\n/*\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\n * primitive number without a loss of precision.\n */\nSTRICT = false, // true or false\n/**************************************************************************************************/\n// Error messages.\nNAME = '[big.js] ', INVALID = NAME + 'Invalid ', INVALID_DP = INVALID + 'decimal places', INVALID_RM = INVALID + 'rounding mode', DIV_BY_ZERO = NAME + 'Division by zero', UNDEFINED = void 0, NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\n/*\n * Create and return a Big constructor.\n */\nfunction _Big_() {\n /*\n * The Big constructor and exported function.\n * Create and return a new instance of a Big number object.\n *\n * n {number|string|Big} A numeric value.\n */\n function Big(n) {\n var x = this;\n // Enable constructor usage without new.\n if (!(x instanceof Big))\n return n === UNDEFINED ? _Big_() : new Big(n);\n // Duplicate.\n if (n instanceof Big) {\n x.s = n.s;\n x.e = n.e;\n x.c = n.c.slice();\n normalize(x);\n }\n else {\n if (typeof n !== 'string') {\n if (Big.strict === true) {\n throw TypeError(INVALID + 'number');\n }\n // Minus zero?\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\n }\n parse(x, n);\n }\n // Retain a reference to this Big constructor.\n // Shadow Big.prototype.constructor which points to Object.\n x.constructor = Big;\n }\n Big.prototype = P;\n Big.DP = DP;\n Big.RM = RM;\n Big.NE = NE;\n Big.PE = PE;\n Big.strict = STRICT;\n return Big;\n}\nfunction normalize(x) {\n // x = round(x, DP, 0);\n if (x.c.length > 1 && !x.c[0]) {\n let i = x.c.findIndex(x => x);\n x.c = x.c.slice(i);\n x.e = x.e - i;\n }\n}\n/*\n * Parse the number or string value passed to a Big constructor.\n *\n * x {Big} A Big number instance.\n * n {number|string} A numeric value.\n */\nfunction parse(x, n) {\n var e, i, nl;\n if (!NUMERIC.test(n)) {\n throw Error(INVALID + 'number');\n }\n // Determine sign.\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\n // Decimal point?\n if ((e = n.indexOf('.')) > -1)\n n = n.replace('.', '');\n // Exponential form?\n if ((i = n.search(/e/i)) > 0) {\n // Determine exponent.\n if (e < 0)\n e = i;\n e += +n.slice(i + 1);\n n = n.substring(0, i);\n }\n else if (e < 0) {\n // Integer.\n e = n.length;\n }\n nl = n.length;\n // Determine leading zeros before decimal point.\n for (i = 0; i < e && i < nl && n.charAt(i) == '0';)\n ++i;\n // original version (ignores decimal point).\n // // Determine leading zeros.\n // for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\n if (i == nl) {\n // Zero.\n x.c = [x.e = 0];\n }\n else {\n x.e = e - i - 1;\n x.c = [];\n // Convert string to array of digits without leading zeros\n for (e = 0; i < nl;)\n x.c[e++] = +n.charAt(i++);\n // older version (doesn't keep trailing zeroes).\n // // Determine trailing zeros.\n // for (; nl > 0 && n.charAt(--nl) == '0';);\n // // Convert string to array of digits without leading/trailing zeros.\n // for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\n }\n x = round(x, Big.DP + 1, Big.RM);\n return x;\n}\n/*\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\n *\n * x {Big} The Big to round.\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\n * [more] {boolean} Whether the result of division was truncated.\n */\nfunction round(x, sd, rm, more) {\n var xc = x.c;\n if (rm === UNDEFINED)\n rm = Big.RM;\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\n throw Error(INVALID_RM);\n }\n if (sd < 1) {\n more =\n rm === 3 && (more || !!xc[0]) || sd === 0 && (rm === 1 && xc[0] >= 5 ||\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED)));\n xc.length = 1;\n if (more) {\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\n x.e = x.e - sd + 1;\n xc[0] = 1;\n }\n else {\n // Zero.\n xc[0] = x.e = 0;\n }\n }\n else if (sd < xc.length) {\n // xc[sd] is the digit after the digit that may be rounded up.\n const isZero = xc.findIndex((xci, idx) => idx >= sd && xci > 0) < 0;\n more =\n rm === 1 && xc[sd] >= 5 ||\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\n rm === 3 && (more || !isZero);\n // Remove any digits after the required precision.\n xc.length = sd--;\n // Round up?\n if (more) {\n // Rounding up may mean the previous digit has to be rounded up.\n for (; ++xc[sd] > 9;) {\n xc[sd] = 0;\n if (!sd--) {\n ++x.e;\n xc.unshift(1);\n }\n }\n }\n // Remove trailing zeros.\n for (sd = xc.length; !xc[--sd];)\n xc.pop();\n }\n return x;\n}\n/*\n * Return a string representing the value of Big x in normal or exponential notation.\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\n */\nfunction stringify(x, doExponential, isNonzero) {\n var e = x.e, s = x.c.join(''), n = s.length;\n // Exponential notation?\n if (doExponential) {\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\n // Normal notation.\n }\n else if (e < 0) {\n for (; ++e;)\n s = '0' + s;\n s = '0.' + s;\n }\n else if (e > 0) {\n if (++e > n) {\n for (e -= n; e--;)\n s += '0';\n }\n else if (e < n) {\n s = s.slice(0, e) + '.' + s.slice(e);\n }\n }\n else if (n > 1) {\n s = s.charAt(0) + '.' + s.slice(1);\n }\n return x.s < 0 && isNonzero ? '-' + s : s;\n}\n// Prototype/instance methods\n/*\n * Return a new Big whose value is the absolute value of this Big.\n */\nP.abs = function () {\n var x = new this.constructor(this);\n x.s = 1;\n return x;\n};\n/*\n * Return 1 if the value of this Big is greater than the value of Big y,\n * -1 if the value of this Big is less than the value of Big y, or\n * 0 if they have the same value.\n */\nP.cmp = function (y) {\n var isneg, Big = this.constructor, x = new Big(this), y = new Big(y), xc = x.c, yc = y.c, i = x.s, j = y.s, k = x.e, l = y.e;\n // Either zero?\n if (!xc[0] || !yc[0])\n return !xc[0] ? !yc[0] ? 0 : -j : i;\n // Signs differ?\n if (i != j)\n return i;\n isneg = i < 0;\n // Compare exponents.\n if (k != l)\n return k > l ^ isneg ? 1 : -1;\n // Compare digit by digit.\n j = Math.max(xc.length, yc.length);\n for (i = 0; i < j; i++) {\n k = i < xc.length ? xc[i] : 0;\n l = i < yc.length ? yc[i] : 0;\n if (k != l)\n return k > l ^ isneg ? 1 : -1;\n }\n return 0;\n // original version (doesn't compare well trailing zeroes, e.g. 1.0 with 1.00)\n // j = (k = xc.length) < (l = yc.length) ? k : l;\n // // Compare digit by digit.\n // for (i = -1; ++i < j;) {\n // if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\n // }\n // // Compare lengths.\n // return k == l ? 0 : k > l ^ isneg ? 1 : -1;\n};\n/*\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\n */\nP.div = function (y) {\n var Big = this.constructor, x = new Big(this), y = new Big(y), a = x.c, // dividend\n b = y.c, // divisor\n k = x.s == y.s ? 1 : -1, dp = Big.DP;\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\n throw Error(INVALID_DP);\n }\n // Divisor is zero?\n if (!b[0]) {\n throw Error(DIV_BY_ZERO);\n }\n // Dividend is 0? Return +-0.\n if (!a[0]) {\n y.s = k;\n y.c = [y.e = 0];\n return y;\n }\n var bl, bt, n, cmp, ri, bz = b.slice(), ai = bl = b.length, al = a.length, r = a.slice(0, bl), // remainder\n rl = r.length, q = y, // quotient\n qc = q.c = [], qi = 0, p = dp + (q.e = x.e - y.e) + 1; // precision of the result\n q.s = k;\n k = p < 0 ? 0 : p;\n // Create version of divisor with leading zero.\n bz.unshift(0);\n // Add zeros to make remainder as long as divisor.\n for (; rl++ < bl;)\n r.push(0);\n do {\n // n is how many times the divisor goes into current remainder.\n for (n = 0; n < 10; n++) {\n // Compare divisor and remainder.\n if (bl != (rl = r.length)) {\n cmp = bl > rl ? 1 : -1;\n }\n else {\n for (ri = -1, cmp = 0; ++ri < bl;) {\n if (b[ri] != r[ri]) {\n cmp = b[ri] > r[ri] ? 1 : -1;\n break;\n }\n }\n }\n // If divisor < remainder, subtract divisor from remainder.\n if (cmp < 0) {\n // Remainder can't be more than 1 digit longer than divisor.\n // Equalise lengths using divisor with extra leading zero?\n for (bt = rl == bl ? b : bz; rl;) {\n if (r[--rl] < bt[rl]) {\n ri = rl;\n for (; ri && !r[--ri];)\n r[ri] = 9;\n --r[ri];\n r[rl] += 10;\n }\n r[rl] -= bt[rl];\n }\n for (; !r[0];)\n r.shift();\n }\n else {\n break;\n }\n }\n // Add the digit n to the result array.\n qc[qi++] = cmp ? n : ++n;\n // Update the remainder.\n if (r[0] && cmp)\n r[rl] = a[ai] || 0;\n else\n r = [a[ai]];\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\n // Leading zero? Do not remove if result is simply zero (qi == 1).\n if (!qc[0] && qi != 1) {\n // There can't be more than one zero.\n qc.shift();\n q.e--;\n p--;\n }\n // Round?\n if (qi > p)\n round(q, p, Big.RM, r[0] !== UNDEFINED);\n return q;\n};\n/*\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\n */\nP.eq = function (y) {\n return this.cmp(y) === 0;\n};\n/*\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\n * false.\n */\nP.gt = function (y) {\n return this.cmp(y) > 0;\n};\n/*\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\n * return false.\n */\nP.gte = function (y) {\n return this.cmp(y) > -1;\n};\n/*\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\n */\nP.lt = function (y) {\n return this.cmp(y) < 0;\n};\n/*\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\n * return false.\n */\nP.lte = function (y) {\n return this.cmp(y) < 1;\n};\n/*\n * Return a new Big whose value is the value of this Big minus the value of Big y.\n */\nP.minus = P.sub = function (y) {\n var i, j, t, xlty, Big = this.constructor, x = new Big(this), y = new Big(y), a = x.s, b = y.s;\n // Signs differ?\n if (a != b) {\n y.s = -b;\n return x.plus(y);\n }\n var xc = x.c.slice(), xe = x.e, yc = y.c, ye = y.e;\n // Either zero?\n if (!xc[0] || !yc[0]) {\n if (yc[0]) {\n y.s = -b;\n }\n else if (xc[0]) {\n y = new Big(x);\n }\n else {\n y.s = 1;\n }\n return y;\n }\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\n if (a = xe - ye) {\n if (xlty = a < 0) {\n a = -a;\n t = xc;\n }\n else {\n ye = xe;\n t = yc;\n }\n t.reverse();\n for (b = a; b--;)\n t.push(0);\n t.reverse();\n }\n else {\n // Exponents equal. Check digit by digit.\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\n for (a = b = 0; b < j; b++) {\n if (xc[b] != yc[b]) {\n xlty = xc[b] < yc[b];\n break;\n }\n }\n }\n // x < y? Point xc to the array of the bigger number.\n if (xlty) {\n t = xc;\n xc = yc;\n yc = t;\n y.s = -y.s;\n }\n /*\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\n * needs to start at yc.length.\n */\n if ((b = (j = yc.length) - (i = xc.length)) > 0)\n for (; b--;)\n xc[i++] = 0;\n // Subtract yc from xc.\n for (b = i; j > a;) {\n if (xc[--j] < yc[j]) {\n for (i = j; i && !xc[--i];)\n xc[i] = 9;\n --xc[i];\n xc[j] += 10;\n }\n xc[j] -= yc[j];\n }\n // Remove trailing zeros.\n for (; xc[--b] === 0;)\n xc.pop();\n // Remove leading zeros and adjust exponent accordingly.\n for (; xc[0] === 0;) {\n xc.shift();\n --ye;\n }\n if (!xc[0]) {\n // n - n = +0\n y.s = 1;\n // Result must be zero.\n xc = [ye = 0];\n }\n y.c = xc;\n y.e = ye;\n return y;\n};\n/*\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\n */\nP.mod = function (y) {\n var ygtx, Big = this.constructor, x = new Big(this), y = new Big(y), a = x.s, b = y.s;\n if (!y.c[0]) {\n throw Error(DIV_BY_ZERO);\n }\n x.s = y.s = 1;\n ygtx = y.cmp(x) == 1;\n x.s = a;\n y.s = b;\n if (ygtx)\n return new Big(x);\n a = Big.DP;\n b = Big.RM;\n Big.DP = Big.RM = 0;\n x = x.div(y);\n Big.DP = a;\n Big.RM = b;\n return this.minus(x.times(y));\n};\n/*\n * Return a new Big whose value is the value of this Big plus the value of Big y.\n */\nP.plus = P.add = function (y) {\n var e, k, t, Big = this.constructor, x = new Big(this), y = new Big(y);\n // Signs differ?\n if (x.s != y.s) {\n y.s = -y.s;\n return x.minus(y);\n }\n var xe = x.e, xc = x.c, ye = y.e, yc = y.c;\n // Either zero?\n if (!xc[0] || !yc[0]) {\n if (!yc[0]) {\n if (xc[0]) {\n y = new Big(x);\n }\n else {\n y.s = x.s;\n }\n }\n return y;\n }\n xc = xc.slice();\n // Prepend zeros to equalise exponents.\n // Note: reverse faster than unshifts.\n if (e = xe - ye) {\n if (e > 0) {\n ye = xe;\n t = yc;\n }\n else {\n e = -e;\n t = xc;\n }\n t.reverse();\n for (; e--;)\n t.push(0);\n t.reverse();\n }\n // Point xc to the longer array.\n if (xc.length - yc.length < 0) {\n t = yc;\n yc = xc;\n xc = t;\n }\n e = yc.length;\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\n for (k = 0; e; xc[e] %= 10)\n k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\n if (k) {\n xc.unshift(k);\n ++ye;\n }\n // Remove trailing zeros.\n for (e = xc.length; xc[--e] === 0;)\n xc.pop();\n y.c = xc;\n y.e = ye;\n return y;\n};\n/*\n * Return a Big whose value is the value of this Big raised to the power n.\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\n * mode Big.RM.\n *\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\n */\nP.pow = function (n) {\n var Big = this.constructor, x = new Big(this), y = new Big('1'), one = new Big('1'), isneg = n < 0;\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\n throw Error(INVALID + 'exponent');\n }\n if (isneg)\n n = -n;\n for (;;) {\n if (n & 1)\n y = y.times(x);\n n >>= 1;\n if (!n)\n break;\n x = x.times(x);\n }\n return isneg ? one.div(y) : y;\n};\n/*\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\n *\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\n */\nP.prec = function (sd, rm) {\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\n throw Error(INVALID + 'precision');\n }\n return round(new this.constructor(this), sd, rm);\n};\n/*\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\n * using rounding mode rm, or Big.RM if rm is not specified.\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\n * If dp is not specified, round to 0 decimal places.\n *\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\n */\nP.round = function (dp, rm) {\n if (dp === UNDEFINED)\n dp = 0;\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\n throw Error(INVALID_DP);\n }\n return round(new this.constructor(this), dp + this.e + 1, rm);\n};\n/*\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\n */\nP.sqrt = function () {\n var r, c, t, Big = this.constructor, x = new Big(this), s = x.s, e = x.e, half = new Big('0.5');\n // Zero?\n if (!x.c[0])\n return new Big(x);\n // Negative?\n if (s < 0) {\n throw Error(NAME + 'No square root');\n }\n // Estimate.\n s = Math.sqrt(x + '');\n // Math.sqrt underflow/overflow?\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\n if (s === 0 || s === 1 / 0) {\n c = x.c.join('');\n if (!(c.length + e & 1))\n c += '0';\n s = Math.sqrt(c);\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\n }\n else {\n r = new Big(s + '');\n }\n e = r.e + (Big.DP += 4);\n // Newton-Raphson iteration.\n do {\n t = r;\n r = half.times(t.plus(x.div(t)));\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\n};\n/*\n * Return a new Big whose value is the value of this Big times the value of Big y.\n */\nP.times = P.mul = function (y) {\n var c, Big = this.constructor, x = new Big(this), y = new Big(y), xc = x.c, yc = y.c, a = xc.length, b = yc.length, i = x.e, j = y.e;\n // Determine sign of result.\n y.s = x.s == y.s ? 1 : -1;\n // Return signed 0 if either 0.\n if (!xc[0] || !yc[0]) {\n y.c = [y.e = 0];\n return y;\n }\n // Initialise exponent of result as x.e + y.e.\n y.e = i + j;\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\n if (a < b) {\n c = xc;\n xc = yc;\n yc = c;\n j = a;\n a = b;\n b = j;\n }\n // Initialise coefficient array of result with zeros.\n for (c = new Array(j = a + b); j--;)\n c[j] = 0;\n // Multiply.\n // i is initially xc.length.\n for (i = b; i--;) {\n b = 0;\n // a is yc.length.\n for (j = a + i; j > i;) {\n // Current sum of products at this digit position, plus carry.\n b = c[j] + yc[i] * xc[j - i - 1] + b;\n c[j--] = b % 10;\n // carry\n b = b / 10 | 0;\n }\n c[j] = b;\n }\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\n if (b)\n ++y.e;\n else\n c.shift();\n // Remove trailing zeros.\n for (i = c.length; !c[--i];)\n c.pop();\n y.c = c;\n return y;\n};\n/*\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\n *\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\n */\nP.toExponential = function (dp, rm) {\n var x = this, n = x.c[0];\n if (dp !== UNDEFINED) {\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\n throw Error(INVALID_DP);\n }\n x = round(new x.constructor(x), ++dp, rm);\n for (; x.c.length < dp;)\n x.c.push(0);\n }\n return stringify(x, true, !!n);\n};\n/*\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\n *\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\n *\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\n */\nP.toFixed = function (dp, rm) {\n var x = this, n = x.c[0];\n if (dp !== UNDEFINED) {\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\n throw Error(INVALID_DP);\n }\n x = round(new x.constructor(x), dp + x.e + 1, rm);\n // x.e may have changed if the value is rounded up.\n for (dp = dp + x.e + 1; x.c.length < dp;)\n x.c.push(0);\n }\n return stringify(x, false, !!n);\n};\n/*\n * Return a string representing the value of this Big.\n * Return exponential notation if this Big has a positive exponent equal to or greater than\n * Big.PE, or a negative exponent equal to or less than Big.NE.\n * Omit the sign for negative zero.\n */\nP.toJSON = P.toString = function () {\n var x = this, Big = x.constructor;\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\n};\n/*\n * Return the value of this Big as a primitve number.\n */\nP.toNumber = function () {\n var n = Number(stringify(this, true, true));\n if (this.constructor.strict === true && !this.eq(n.toString())) {\n throw Error(NAME + 'Imprecise conversion');\n }\n return n;\n};\n/*\n * Return a string representing the value of this Big rounded to sd significant digits using\n * rounding mode rm, or Big.RM if rm is not specified.\n * Use exponential notation if sd is less than the number of digits necessary to represent\n * the integer part of the value in normal notation.\n *\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\n */\nP.toPrecision = function (sd, rm) {\n var x = this, Big = x.constructor, n = x.c[0];\n if (sd !== UNDEFINED) {\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\n throw Error(INVALID + 'precision');\n }\n x = round(new Big(x), sd, rm);\n for (; x.c.length < sd;)\n x.c.push(0);\n }\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\n};\n/*\n * Return a string representing the value of this Big.\n * Return exponential notation if this Big has a positive exponent equal to or greater than\n * Big.PE, or a negative exponent equal to or less than Big.NE.\n * Include the sign for negative zero.\n */\nP.valueOf = function () {\n var x = this, Big = x.constructor;\n if (Big.strict === true) {\n throw Error(NAME + 'valueOf disallowed');\n }\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\n};\n// Export\n/**\n * @type object\n */\nexport var Big = _Big_();\n/// \nexport default Big;\n","export const symbol = Symbol(\"numeric\");\nexport function isNumeric(x) {\n return typeof x === \"number\" || typeof x === \"bigint\" || x?.[symbol];\n}\nexport function compare(x, y) {\n if (typeof x === \"number\") {\n return x < y ? -1 : (x > y ? 1 : 0);\n }\n else if (typeof x === \"bigint\") {\n return x < y ? -1 : (x > y ? 1 : 0);\n }\n else {\n return x.CompareTo(y);\n }\n}\nexport function multiply(x, y) {\n if (typeof x === \"number\") {\n return x * y;\n }\n else if (typeof x === \"bigint\") {\n return x * BigInt(y);\n }\n else {\n return x[symbol]().multiply(y);\n }\n}\nexport function toFixed(x, dp) {\n if (typeof x === \"number\") {\n return x.toFixed(dp);\n }\n else if (typeof x === \"bigint\") {\n return x;\n }\n else {\n return x[symbol]().toFixed(dp);\n }\n}\nexport function toPrecision(x, sd) {\n if (typeof x === \"number\") {\n return x.toPrecision(sd);\n }\n else if (typeof x === \"bigint\") {\n return x;\n }\n else {\n return x[symbol]().toPrecision(sd);\n }\n}\nexport function toExponential(x, dp) {\n if (typeof x === \"number\") {\n return x.toExponential(dp);\n }\n else if (typeof x === \"bigint\") {\n return x;\n }\n else {\n return x[symbol]().toExponential(dp);\n }\n}\nexport function toHex(x) {\n if (typeof x === \"number\") {\n return (Number(x) >>> 0).toString(16);\n }\n else if (typeof x === \"bigint\") {\n // TODO: properly handle other bit sizes\n return BigInt.asUintN(64, x).toString(16);\n }\n else {\n return x[symbol]().toHex();\n }\n}\n","// tslint:disable:ban-types\nexport function isArrayLike(x) {\n return Array.isArray(x) || ArrayBuffer.isView(x);\n}\nexport function isIterable(x) {\n return x != null && typeof x === \"object\" && Symbol.iterator in x;\n}\nexport function isEnumerable(x) {\n return x != null && typeof x.GetEnumerator === \"function\";\n}\nexport function isComparer(x) {\n return x != null && typeof x.Compare === \"function\";\n}\nexport function isComparable(x) {\n return x != null && typeof x.CompareTo === \"function\";\n}\nexport function isEquatable(x) {\n return x != null && typeof x.Equals === \"function\";\n}\nexport function isHashable(x) {\n return x != null && typeof x.GetHashCode === \"function\";\n}\nexport function isDisposable(x) {\n return x != null && typeof x.Dispose === \"function\";\n}\nexport function disposeSafe(x) {\n if (isDisposable(x)) {\n x.Dispose();\n }\n}\nexport function defaultOf() {\n return null;\n}\nexport function sameConstructor(x, y) {\n return Object.getPrototypeOf(x)?.constructor === Object.getPrototypeOf(y)?.constructor;\n}\nexport class Enumerable {\n constructor(en) {\n this.en = en;\n }\n GetEnumerator() { return this.en; }\n \"System.Collections.IEnumerable.GetEnumerator\"() { return this.en; }\n [Symbol.iterator]() {\n return this;\n }\n next() {\n const hasNext = this.en[\"System.Collections.IEnumerator.MoveNext\"]();\n const current = hasNext ? this.en[\"System.Collections.Generic.IEnumerator`1.get_Current\"]() : undefined;\n return { done: !hasNext, value: current };\n }\n}\nexport class Enumerator {\n constructor(iter) {\n this.iter = iter;\n this.current = defaultOf();\n }\n [\"System.Collections.Generic.IEnumerator`1.get_Current\"]() {\n return this.current;\n }\n [\"System.Collections.IEnumerator.get_Current\"]() {\n return this.current;\n }\n [\"System.Collections.IEnumerator.MoveNext\"]() {\n const cur = this.iter.next();\n this.current = cur.value;\n return !cur.done;\n }\n [\"System.Collections.IEnumerator.Reset\"]() {\n throw new Error(\"JS iterators cannot be reset\");\n }\n Dispose() {\n return;\n }\n}\nexport function toEnumerable(e) {\n if (isEnumerable(e)) {\n return e;\n }\n else {\n return new Enumerable(new Enumerator(e[Symbol.iterator]()));\n }\n}\nexport function getEnumerator(e) {\n if (isEnumerable(e)) {\n return e.GetEnumerator();\n }\n else {\n return new Enumerator(e[Symbol.iterator]());\n }\n}\nexport function toIterator(en) {\n return {\n next() {\n const hasNext = en[\"System.Collections.IEnumerator.MoveNext\"]();\n const current = hasNext ? en[\"System.Collections.Generic.IEnumerator`1.get_Current\"]() : undefined;\n return { done: !hasNext, value: current };\n },\n };\n}\nexport function enumerableToIterator(e) {\n return toIterator(toEnumerable(e).GetEnumerator());\n}\nexport class Comparer {\n constructor(f) {\n this.Compare = f || compare;\n }\n}\nexport function comparerFromEqualityComparer(comparer) {\n // Sometimes IEqualityComparer also implements IComparer\n if (isComparer(comparer)) {\n return new Comparer(comparer.Compare);\n }\n else {\n return new Comparer((x, y) => {\n const xhash = comparer.GetHashCode(x);\n const yhash = comparer.GetHashCode(y);\n if (xhash === yhash) {\n return comparer.Equals(x, y) ? 0 : -1;\n }\n else {\n return xhash < yhash ? -1 : 1;\n }\n });\n }\n}\nexport function assertEqual(actual, expected, msg) {\n if (!equals(actual, expected)) {\n throw Object.assign(new Error(msg || `Expected: ${expected} - Actual: ${actual}`), {\n actual,\n expected,\n });\n }\n}\nexport function assertNotEqual(actual, expected, msg) {\n if (equals(actual, expected)) {\n throw Object.assign(new Error(msg || `Expected: ${expected} - Actual: ${actual}`), {\n actual,\n expected,\n });\n }\n}\nexport class Lazy {\n constructor(factory) {\n this.factory = factory;\n this.isValueCreated = false;\n }\n get Value() {\n if (!this.isValueCreated) {\n this.createdValue = this.factory();\n this.isValueCreated = true;\n }\n return this.createdValue;\n }\n get IsValueCreated() {\n return this.isValueCreated;\n }\n}\nexport function lazyFromValue(v) {\n return new Lazy(() => v);\n}\nexport function padWithZeros(i, length) {\n let str = i.toString(10);\n while (str.length < length) {\n str = \"0\" + str;\n }\n return str;\n}\nexport function padLeftAndRightWithZeros(i, lengthLeft, lengthRight) {\n let str = i.toString(10);\n while (str.length < lengthLeft) {\n str = \"0\" + str;\n }\n while (str.length < lengthRight) {\n str = str + \"0\";\n }\n return str;\n}\nexport function dateOffset(date) {\n const date1 = date;\n return typeof date1.offset === \"number\"\n ? date1.offset\n : (date.kind === 1 /* DateKind.UTC */\n ? 0 : date.getTimezoneOffset() * -60000);\n}\nexport function int16ToString(i, radix) {\n i = i < 0 && radix != null && radix !== 10 ? 0xFFFF + i + 1 : i;\n return i.toString(radix);\n}\nexport function int32ToString(i, radix) {\n i = i < 0 && radix != null && radix !== 10 ? 0xFFFFFFFF + i + 1 : i;\n return i.toString(radix);\n}\nexport function int64ToString(i, radix) {\n i = i < 0 && radix != null && radix !== 10 ? 0xffffffffffffffffn + i + 1n : i;\n return i.toString(radix);\n}\nclass ObjectRef {\n static id(o) {\n if (!ObjectRef.idMap.has(o)) {\n ObjectRef.idMap.set(o, ++ObjectRef.count);\n }\n return ObjectRef.idMap.get(o);\n }\n}\nObjectRef.idMap = new WeakMap();\nObjectRef.count = 0;\nexport { ObjectRef };\nexport function stringHash(s) {\n let i = 0;\n let h = 5381;\n const len = s.length;\n while (i < len) {\n h = (h * 33) ^ s.charCodeAt(i++);\n }\n return h;\n}\nexport function numberHash(x) {\n return x * 2654435761 | 0;\n}\nexport function bigintHash(x) {\n return stringHash(x.toString(32));\n}\n// From https://stackoverflow.com/a/37449594\nexport function combineHashCodes(hashes) {\n let h1 = 0;\n const len = hashes.length;\n for (let i = 0; i < len; i++) {\n const h2 = hashes[i];\n h1 = ((h1 << 5) + h1) ^ h2;\n }\n return h1;\n}\nexport function physicalHash(x) {\n if (x == null) {\n return 0;\n }\n switch (typeof x) {\n case \"boolean\":\n return x ? 1 : 0;\n case \"number\":\n return numberHash(x);\n case \"bigint\":\n return bigintHash(x);\n case \"string\":\n return stringHash(x);\n default:\n return numberHash(ObjectRef.id(x));\n }\n}\nexport function identityHash(x) {\n if (isHashable(x)) {\n return x.GetHashCode();\n }\n else {\n return physicalHash(x);\n }\n}\nexport function dateHash(x) {\n return x.getTime();\n}\nexport function arrayHash(x) {\n const len = x.length;\n const hashes = new Array(len);\n for (let i = 0; i < len; i++) {\n hashes[i] = structuralHash(x[i]);\n }\n return combineHashCodes(hashes);\n}\nexport function structuralHash(x) {\n if (x == null) {\n return 0;\n }\n switch (typeof x) {\n case \"boolean\":\n return x ? 1 : 0;\n case \"number\":\n return numberHash(x);\n case \"bigint\":\n return bigintHash(x);\n case \"string\":\n return stringHash(x);\n default: {\n if (isHashable(x)) {\n return x.GetHashCode();\n }\n else if (isArrayLike(x)) {\n return arrayHash(x);\n }\n else if (x instanceof Date) {\n return dateHash(x);\n }\n else if (Object.getPrototypeOf(x)?.constructor === Object) {\n // TODO: check call-stack to prevent cyclic objects?\n const hashes = Object.values(x).map((v) => structuralHash(v));\n return combineHashCodes(hashes);\n }\n else {\n // Classes don't implement GetHashCode by default, but must use identity hashing\n return numberHash(ObjectRef.id(x));\n // return stringHash(String(x));\n }\n }\n }\n}\n// Intended for custom numeric types, like long or decimal\nexport function fastStructuralHash(x) {\n return stringHash(String(x));\n}\n// Intended for declared types that may or may not implement GetHashCode\nexport function safeHash(x) {\n // return x == null ? 0 : isHashable(x) ? x.GetHashCode() : numberHash(ObjectRef.id(x));\n return identityHash(x);\n}\nexport function equalArraysWith(x, y, eq) {\n if (x == null) {\n return y == null;\n }\n if (y == null) {\n return false;\n }\n if (x.length !== y.length) {\n return false;\n }\n for (let i = 0; i < x.length; i++) {\n if (!eq(x[i], y[i])) {\n return false;\n }\n }\n return true;\n}\nexport function equalArrays(x, y) {\n return equalArraysWith(x, y, equals);\n}\nfunction equalObjects(x, y) {\n const xKeys = Object.keys(x);\n const yKeys = Object.keys(y);\n if (xKeys.length !== yKeys.length) {\n return false;\n }\n xKeys.sort();\n yKeys.sort();\n for (let i = 0; i < xKeys.length; i++) {\n if (xKeys[i] !== yKeys[i] || !equals(x[xKeys[i]], y[yKeys[i]])) {\n return false;\n }\n }\n return true;\n}\nexport function physicalEquality(x, y) {\n return x === y;\n}\nexport function equals(x, y) {\n if (x === y) {\n return true;\n }\n else if (x == null) {\n return y == null;\n }\n else if (y == null) {\n return false;\n }\n else if (isEquatable(x)) {\n return x.Equals(y);\n }\n else if (isArrayLike(x)) {\n return isArrayLike(y) && equalArrays(x, y);\n }\n else if (typeof x !== \"object\") {\n return false;\n }\n else if (x instanceof Date) {\n return (y instanceof Date) && compareDates(x, y) === 0;\n }\n else {\n return Object.getPrototypeOf(x)?.constructor === Object && equalObjects(x, y);\n }\n}\nexport function compareDates(x, y) {\n let xtime;\n let ytime;\n // DateTimeOffset and DateTime deals with equality differently.\n if (\"offset\" in x && \"offset\" in y) {\n xtime = x.getTime();\n ytime = y.getTime();\n }\n else {\n xtime = x.getTime() + dateOffset(x);\n ytime = y.getTime() + dateOffset(y);\n }\n return xtime === ytime ? 0 : (xtime < ytime ? -1 : 1);\n}\nexport function comparePrimitives(x, y) {\n return x === y ? 0 : (x < y ? -1 : 1);\n}\nexport function compareArraysWith(x, y, comp) {\n if (x == null) {\n return y == null ? 0 : 1;\n }\n if (y == null) {\n return -1;\n }\n if (x.length !== y.length) {\n return x.length < y.length ? -1 : 1;\n }\n for (let i = 0, j = 0; i < x.length; i++) {\n j = comp(x[i], y[i]);\n if (j !== 0) {\n return j;\n }\n }\n return 0;\n}\nexport function compareArrays(x, y) {\n return compareArraysWith(x, y, compare);\n}\nfunction compareObjects(x, y) {\n const xKeys = Object.keys(x);\n const yKeys = Object.keys(y);\n if (xKeys.length !== yKeys.length) {\n return xKeys.length < yKeys.length ? -1 : 1;\n }\n xKeys.sort();\n yKeys.sort();\n for (let i = 0, j = 0; i < xKeys.length; i++) {\n const key = xKeys[i];\n if (key !== yKeys[i]) {\n return key < yKeys[i] ? -1 : 1;\n }\n else {\n j = compare(x[key], y[key]);\n if (j !== 0) {\n return j;\n }\n }\n }\n return 0;\n}\nexport function compare(x, y) {\n if (x === y) {\n return 0;\n }\n else if (x == null) {\n return y == null ? 0 : -1;\n }\n else if (y == null) {\n return 1;\n }\n else if (isComparable(x)) {\n return x.CompareTo(y);\n }\n else if (isArrayLike(x)) {\n return isArrayLike(y) ? compareArrays(x, y) : -1;\n }\n else if (typeof x !== \"object\") {\n return x < y ? -1 : 1;\n }\n else if (x instanceof Date) {\n return y instanceof Date ? compareDates(x, y) : -1;\n }\n else {\n return Object.getPrototypeOf(x)?.constructor === Object ? compareObjects(x, y) : -1;\n }\n}\nexport function min(comparer, x, y) {\n return comparer(x, y) < 0 ? x : y;\n}\nexport function max(comparer, x, y) {\n return comparer(x, y) > 0 ? x : y;\n}\nexport function clamp(comparer, value, min, max) {\n return (comparer(value, min) < 0) ? min : (comparer(value, max) > 0) ? max : value;\n}\nexport function createAtom(value) {\n let atom = value;\n return (...args) => {\n if (args.length === 0) {\n return atom;\n }\n else {\n atom = args[0];\n }\n };\n}\nexport function createObj(fields) {\n const obj = {};\n for (const kv of fields) {\n obj[kv[0]] = kv[1];\n }\n return obj;\n}\nexport function jsOptions(mutator) {\n const opts = {};\n mutator(opts);\n return opts;\n}\nexport function round(value, digits = 0) {\n const m = Math.pow(10, digits);\n const n = +(digits ? value * m : value).toFixed(8);\n const i = Math.floor(n);\n const f = n - i;\n const e = 1e-8;\n const r = (f > 0.5 - e && f < 0.5 + e) ? ((i % 2 === 0) ? i : i + 1) : Math.round(n);\n return digits ? r / m : r;\n}\nexport function sign(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n}\nexport function unescapeDataString(s) {\n // https://stackoverflow.com/a/4458580/524236\n return decodeURIComponent((s).replace(/\\+/g, \"%20\"));\n}\nexport function escapeDataString(s) {\n return encodeURIComponent(s).replace(/!/g, \"%21\")\n .replace(/'/g, \"%27\")\n .replace(/\\(/g, \"%28\")\n .replace(/\\)/g, \"%29\")\n .replace(/\\*/g, \"%2A\");\n}\nexport function escapeUriString(s) {\n return encodeURI(s);\n}\n// ICollection.Clear and Count members can be called on Arrays\n// or Dictionaries so we need a runtime check (see #1120)\nexport function count(col) {\n if (isArrayLike(col)) {\n return col.length;\n }\n else {\n let count = 0;\n for (const _ of col) {\n count++;\n }\n return count;\n }\n}\nexport function clear(col) {\n if (isArrayLike(col)) {\n col.splice(0);\n }\n else {\n col.clear();\n }\n}\nconst curried = new WeakMap();\nexport function uncurry2(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2) => f(a1)(a2);\n curried.set(f2, f);\n return f2;\n}\nexport function curry2(f) {\n return curried.get(f) ?? ((a1) => (a2) => f(a1, a2));\n}\nexport function uncurry3(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2, a3) => f(a1)(a2)(a3);\n curried.set(f2, f);\n return f2;\n}\nexport function curry3(f) {\n return curried.get(f)\n ?? ((a1) => (a2) => (a3) => f(a1, a2, a3));\n}\nexport function uncurry4(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2, a3, a4) => f(a1)(a2)(a3)(a4);\n curried.set(f2, f);\n return f2;\n}\nexport function curry4(f) {\n return curried.get(f)\n ?? ((a1) => (a2) => (a3) => (a4) => f(a1, a2, a3, a4));\n}\nexport function uncurry5(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2, a3, a4, a5) => f(a1)(a2)(a3)(a4)(a5);\n curried.set(f2, f);\n return f2;\n}\nexport function curry5(f) {\n return curried.get(f)\n ?? ((a1) => (a2) => (a3) => (a4) => (a5) => f(a1, a2, a3, a4, a5));\n}\nexport function uncurry6(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2, a3, a4, a5, a6) => f(a1)(a2)(a3)(a4)(a5)(a6);\n curried.set(f2, f);\n return f2;\n}\nexport function curry6(f) {\n return curried.get(f)\n ?? ((a1) => (a2) => (a3) => (a4) => (a5) => (a6) => f(a1, a2, a3, a4, a5, a6));\n}\nexport function uncurry7(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2, a3, a4, a5, a6, a7) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7);\n curried.set(f2, f);\n return f2;\n}\nexport function curry7(f) {\n return curried.get(f)\n ?? ((a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => f(a1, a2, a3, a4, a5, a6, a7));\n}\nexport function uncurry8(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2, a3, a4, a5, a6, a7, a8) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8);\n curried.set(f2, f);\n return f2;\n}\nexport function curry8(f) {\n return curried.get(f)\n ?? ((a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => (a8) => f(a1, a2, a3, a4, a5, a6, a7, a8));\n}\nexport function uncurry9(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2, a3, a4, a5, a6, a7, a8, a9) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9);\n curried.set(f2, f);\n return f2;\n}\nexport function curry9(f) {\n return curried.get(f)\n ?? ((a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => (a8) => (a9) => f(a1, a2, a3, a4, a5, a6, a7, a8, a9));\n}\nexport function uncurry10(f) {\n if (f == null) {\n return null;\n }\n const f2 = (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8)(a9)(a10);\n curried.set(f2, f);\n return f2;\n}\nexport function curry10(f) {\n return curried.get(f)\n ?? ((a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => (a8) => (a9) => (a10) => f(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10));\n}\n// More performant method to copy arrays, see #2352\nexport function copyToArray(source, sourceIndex, target, targetIndex, count) {\n if (ArrayBuffer.isView(source) && ArrayBuffer.isView(target)) {\n target.set(source.subarray(sourceIndex, sourceIndex + count), targetIndex);\n }\n else {\n for (let i = 0; i < count; ++i) {\n target[targetIndex + i] = source[sourceIndex + i];\n }\n }\n}\n","import Decimal from \"./lib/big.js\";\nimport { symbol } from \"./Numeric.js\";\nimport { FSharpRef } from \"./Types.js\";\nimport { combineHashCodes } from \"./Util.js\";\nDecimal.prototype.GetHashCode = function () {\n return combineHashCodes([this.s, this.e].concat(this.c));\n};\nDecimal.prototype.Equals = function (x) {\n return !this.cmp(x);\n};\nDecimal.prototype.CompareTo = function (x) {\n return this.cmp(x);\n};\nDecimal.prototype[symbol] = function () {\n const _this = this;\n return {\n multiply: (y) => _this.mul(y),\n toPrecision: (sd) => _this.toPrecision(sd),\n toExponential: (dp) => _this.toExponential(dp),\n toFixed: (dp) => _this.toFixed(dp),\n toHex: () => (Number(_this) >>> 0).toString(16),\n };\n};\nexport default Decimal;\nexport const get_Zero = new Decimal(0);\nexport const get_One = new Decimal(1);\nexport const get_MinusOne = new Decimal(-1);\nexport const get_MaxValue = new Decimal(\"79228162514264337593543950335\");\nexport const get_MinValue = new Decimal(\"-79228162514264337593543950335\");\nexport function compare(x, y) {\n return x.cmp(y);\n}\nexport function equals(x, y) {\n return !x.cmp(y);\n}\nexport function abs(x) { return x.abs(); }\nexport function sign(x) { return x < get_Zero ? -1 : x > get_Zero ? 1 : 0; }\nexport function max(x, y) { return x > y ? x : y; }\nexport function min(x, y) { return x < y ? x : y; }\nexport function maxMagnitude(x, y) { return abs(x) > abs(y) ? x : y; }\nexport function minMagnitude(x, y) { return abs(x) < abs(y) ? x : y; }\nexport function clamp(x, min, max) {\n return x < min ? min : x > max ? max : x;\n}\nexport function round(x, digits = 0) {\n return x.round(digits, 2 /* ROUND_HALF_EVEN */);\n}\nexport function truncate(x) {\n return x.round(0, 0 /* ROUND_DOWN */);\n}\nexport function ceiling(x) {\n return x.round(0, x.cmp(0) >= 0 ? 3 /* ROUND_UP */ : 0 /* ROUND_DOWN */);\n}\nexport function floor(x) {\n return x.round(0, x.cmp(0) >= 0 ? 0 /* ROUND_DOWN */ : 3 /* ROUND_UP */);\n}\nexport function pow(x, n) {\n return x.pow(n);\n}\nexport function sqrt(x) {\n return x.sqrt();\n}\nexport function op_Addition(x, y) {\n return x.add(y);\n}\nexport function op_Subtraction(x, y) {\n return x.sub(y);\n}\nexport function op_Multiply(x, y) {\n return x.mul(y);\n}\nexport function op_Division(x, y) {\n return x.div(y);\n}\nexport function op_Modulus(x, y) {\n return x.mod(y);\n}\nexport function op_UnaryNegation(x) {\n const x2 = new Decimal(x);\n x2.s = -x2.s || 0;\n return x2;\n}\nexport function op_UnaryPlus(x) {\n return x;\n}\nexport const add = op_Addition;\nexport const subtract = op_Subtraction;\nexport const multiply = op_Multiply;\nexport const divide = op_Division;\nexport const remainder = op_Modulus;\nexport const negate = op_UnaryNegation;\nexport function toString(x) {\n return x.toString();\n}\nexport function tryParse(str, defValue) {\n try {\n defValue.contents = new Decimal(str.trim());\n return true;\n }\n catch {\n return false;\n }\n}\nexport function parse(str) {\n const defValue = new FSharpRef(get_Zero);\n if (tryParse(str, defValue)) {\n return defValue.contents;\n }\n else {\n throw new Error(\"Input string was not in a correct format.\");\n }\n}\nexport function toNumber(x) {\n return +x;\n}\nfunction decimalToHex(dec, bitSize) {\n const hex = new Uint8Array(bitSize / 4 | 0);\n let hexCount = 1;\n for (let d = 0; d < dec.length; d++) {\n let value = dec[d];\n for (let i = 0; i < hexCount; i++) {\n const digit = hex[i] * 10 + value | 0;\n hex[i] = digit & 0xF;\n value = digit >> 4;\n }\n if (value !== 0) {\n hex[hexCount++] = value;\n }\n }\n return hex.slice(0, hexCount); // digits in reverse order\n}\nfunction hexToDecimal(hex, bitSize) {\n const dec = new Uint8Array(bitSize * 301 / 1000 + 1 | 0);\n let decCount = 1;\n for (let d = hex.length - 1; d >= 0; d--) {\n let carry = hex[d];\n for (let i = 0; i < decCount; i++) {\n const val = dec[i] * 16 + carry | 0;\n dec[i] = (val % 10) | 0;\n carry = (val / 10) | 0;\n }\n while (carry > 0) {\n dec[decCount++] = (carry % 10) | 0;\n carry = (carry / 10) | 0;\n }\n }\n return dec.slice(0, decCount); // digits in reverse order\n}\nfunction setInt32Bits(hexDigits, bits, offset) {\n for (let i = 0; i < 8; i++) {\n hexDigits[offset + i] = (bits >> (i * 4)) & 0xF;\n }\n}\nfunction getInt32Bits(hexDigits, offset) {\n let bits = 0;\n for (let i = 0; i < 8; i++) {\n bits = bits | (hexDigits[offset + i] << (i * 4));\n }\n return bits;\n}\nexport function fromIntArray(bits) {\n return fromInts(bits[0], bits[1], bits[2], bits[3]);\n}\nexport function fromInts(low, mid, high, signExp) {\n const isNegative = signExp < 0;\n const scale = (signExp >> 16) & 0x7F;\n return fromParts(low, mid, high, isNegative, scale);\n}\nexport function fromParts(low, mid, high, isNegative, scale) {\n const bitSize = 96;\n const hexDigits = new Uint8Array(bitSize / 4);\n setInt32Bits(hexDigits, low, 0);\n setInt32Bits(hexDigits, mid, 8);\n setInt32Bits(hexDigits, high, 16);\n const decDigits = hexToDecimal(hexDigits, bitSize);\n scale = scale & 0x7F;\n const big = new Decimal(0);\n big.c = Array.from(decDigits.reverse());\n big.e = decDigits.length - scale - 1;\n big.s = isNegative ? -1 : 1;\n const d = new Decimal(big);\n return d;\n}\nexport function getBits(d) {\n const bitSize = 96;\n const decDigits = Uint8Array.from(d.c);\n const hexDigits = decimalToHex(decDigits, bitSize);\n const low = getInt32Bits(hexDigits, 0);\n const mid = getInt32Bits(hexDigits, 8);\n const high = getInt32Bits(hexDigits, 16);\n const decStr = d.toString();\n const dotPos = decStr.indexOf(\".\");\n const scale = dotPos < 0 ? 0 : decStr.length - dotPos - 1;\n const signExp = ((scale & 0x7F) << 16) | (d.s < 0 ? 0x80000000 : 0);\n return [low, mid, high, signExp];\n}\n// export function makeRangeStepFunction(step: Decimal, last: Decimal) {\n// const stepComparedWithZero = step.cmp(get_Zero);\n// if (stepComparedWithZero === 0) {\n// throw new Error(\"The step of a range cannot be zero\");\n// }\n// const stepGreaterThanZero = stepComparedWithZero > 0;\n// return (x: Decimal) => {\n// const comparedWithLast = x.cmp(last);\n// if ((stepGreaterThanZero && comparedWithLast <= 0)\n// || (!stepGreaterThanZero && comparedWithLast >= 0)) {\n// return [x, op_Addition(x, step)];\n// } else {\n// return undefined;\n// }\n// };\n// }\n","import { fromParts, truncate } from \"./Decimal.js\";\nimport { bigintHash } from \"./Util.js\";\nconst isBigEndian = false;\nBigInt.prototype.toJSON = function () {\n return `${this.toString()}`;\n};\nconst zero = 0n;\nconst one = 1n;\nconst two = 2n;\nconst minusOne = -1n;\nexport function isBigInt(x) {\n return typeof x === \"bigint\";\n}\nexport function hash(x) {\n return bigintHash(x);\n}\nexport function equals(x, y) {\n return x === y;\n}\nexport function compare(x, y) {\n return x < y ? -1 : x > y ? 1 : 0;\n}\nexport function abs(x) { return x < zero ? -x : x; }\nexport function sign(x) { return x < zero ? -1 : x > zero ? 1 : 0; }\nexport function max(x, y) { return x > y ? x : y; }\nexport function min(x, y) { return x < y ? x : y; }\nexport function maxMagnitude(x, y) { return abs(x) > abs(y) ? x : y; }\nexport function minMagnitude(x, y) { return abs(x) < abs(y) ? x : y; }\nexport function clamp(x, min, max) {\n return x < min ? min : x > max ? max : x;\n}\nexport function add(x, y) { return x + y; }\nexport function subtract(x, y) { return x - y; }\nexport function multiply(x, y) { return x * y; }\nexport function divide(x, y) { return x / y; }\nexport function remainder(x, y) { return x % y; }\nexport function negate(x) { return -x; }\nexport function op_UnaryNegation(x) { return -x; }\nexport function op_LogicalNot(x) { return ~x; }\nexport function op_UnaryPlus(x) { return x; }\nexport function op_Addition(x, y) { return x + y; }\nexport function op_Subtraction(x, y) { return x - y; }\nexport function op_Multiply(x, y) { return x * y; }\nexport function op_Division(x, y) { return x / y; }\nexport function op_Modulus(x, y) { return x % y; }\nexport function op_RightShift(x, n) { return x >> BigInt(n); }\nexport function op_LeftShift(x, n) { return x << BigInt(n); }\nexport function op_BitwiseAnd(x, y) { return x & y; }\nexport function op_BitwiseOr(x, y) { return x | y; }\nexport function op_ExclusiveOr(x, y) { return x ^ y; }\nexport function op_LessThan(x, y) { return x < y; }\nexport function op_LessThanOrEqual(x, y) { return x <= y; }\nexport function op_GreaterThan(x, y) { return x > y; }\nexport function op_GreaterThanOrEqual(x, y) { return x >= y; }\nexport function op_Equality(x, y) { return x === y; }\nexport function op_Inequality(x, y) { return x !== y; }\nexport function get_Zero() { return zero; }\nexport function get_One() { return one; }\nexport function get_MinusOne() { return minusOne; }\nexport function get_IsZero(x) { return x === zero; }\nexport function get_IsOne(x) { return x === one; }\nexport function get_IsEven(x) { return isEvenInteger(x); }\nexport function get_IsPowerOfTwo(x) { return isPow2(x); }\nexport function get_Sign(x) { return sign(x); }\nexport function isNegative(x) { return x < zero; }\nexport function isPositive(x) { return x > zero; }\nexport function isEvenInteger(x) { return (x % two) === zero; }\nexport function isOddInteger(x) { return (x % two) !== zero; }\nexport function isPow2(x) { return (x & (x - one)) === zero; }\nexport function fromZero() { return zero; }\nexport function fromOne() { return one; }\nexport function fromInt8(n) { return BigInt(n); }\nexport function fromUInt8(n) { return BigInt(n); }\nexport function fromInt16(n) { return BigInt(n); }\nexport function fromUInt16(n) { return BigInt(n); }\nexport function fromInt32(n) { return BigInt(n); }\nexport function fromUInt32(n) { return BigInt(n); }\nexport function fromInt64(n) { return n; }\nexport function fromUInt64(n) { return n; }\nexport function fromInt128(n) { return n; }\nexport function fromUInt128(n) { return n; }\nexport function fromNativeInt(n) { return n; }\nexport function fromUNativeInt(n) { return n; }\nexport function fromFloat16(n) { return BigInt(Math.trunc(n)); }\nexport function fromFloat32(n) { return BigInt(Math.trunc(n)); }\nexport function fromFloat64(n) { return BigInt(Math.trunc(n)); }\nexport function fromDecimal(d) { return BigInt(truncate(d).toString()); }\nexport function fromBigInt(x) { return x; }\nexport function fromBoolean(b) { return BigInt(b); }\nexport function fromChar(c) { return BigInt(c.charCodeAt(0)); }\nexport function fromString(s) { return BigInt(s); }\nexport function fromByteArray(bytes) {\n return fromSignedBytes(bytes, isBigEndian);\n}\nexport function toByteArray(value) {\n return toSignedBytes(value, isBigEndian);\n}\nexport function toInt8(x) { return Number(BigInt.asIntN(8, x)); }\nexport function toUInt8(x) { return Number(BigInt.asUintN(8, x)); }\nexport function toInt16(x) { return Number(BigInt.asIntN(16, x)); }\nexport function toUInt16(x) { return Number(BigInt.asUintN(16, x)); }\nexport function toInt32(x) { return Number(BigInt.asIntN(32, x)); }\nexport function toUInt32(x) { return Number(BigInt.asUintN(32, x)); }\nexport function toInt64(x) { return BigInt.asIntN(64, x); }\nexport function toUInt64(x) { return BigInt.asUintN(64, x); }\nexport function toInt128(x) { return BigInt.asIntN(128, x); }\nexport function toUInt128(x) { return BigInt.asUintN(128, x); }\nexport function toNativeInt(x) { return BigInt.asIntN(64, x); }\nexport function toUNativeInt(x) { return BigInt.asUintN(64, x); }\nexport function toFloat16(x) { return Number(x); }\nexport function toFloat32(x) { return Number(x); }\nexport function toFloat64(x) { return Number(x); }\nexport function toDecimal(x) {\n const low = Number(BigInt.asUintN(32, x));\n const mid = Number(BigInt.asUintN(32, x >> 32n));\n const high = Number(BigInt.asUintN(32, x >> 64n));\n const isNegative = x < zero;\n const scale = 0;\n return fromParts(low, mid, high, isNegative, scale);\n}\nexport function toBigInt(x) { return x; }\nexport function toBoolean(x) { return x !== zero; }\nexport function toChar(x) {\n return String.fromCharCode(toUInt16(x));\n}\nexport function toString(x) { return x.toString(); }\nexport function tryParse(s, res) {\n try {\n res.contents = BigInt(s);\n return true;\n }\n catch (err) {\n return false;\n }\n}\nexport function parse(s) {\n return BigInt(s);\n}\nexport function pow(x, n) {\n return x ** BigInt(n);\n}\nexport function modPow(x, e, m) {\n return (x ** e) % m;\n}\nexport function divRem(x, y, out) {\n const div = x / y;\n const rem = x % y;\n if (out === void 0) {\n return [div, rem];\n }\n else {\n out.contents = rem;\n return div;\n }\n}\nexport function greatestCommonDivisor(x, y) {\n while (y > zero) {\n const q = x / y;\n const r = x - q * y;\n x = y;\n y = r;\n }\n return x;\n}\nexport function getBitLength(x) {\n return fromFloat64(x === zero ? 1 : log2(abs(x)) + 1);\n}\nexport function log2(x) {\n const n = Number(x);\n if (Number.isFinite(n))\n return Math.log2(n); // fast path\n if (x < zero)\n return Number.NaN;\n let shift = one;\n while (x >= (one << shift)) {\n shift = shift << one;\n }\n let log = zero;\n while (shift > one) {\n shift = shift >> one;\n if (x >= (one << shift)) {\n log = log + shift;\n x = x >> shift;\n }\n }\n return Number(log);\n}\nexport function log10(x) {\n return log2(x) * Math.log10(2);\n}\nexport function ln(x) {\n return log2(x) * Math.log(2);\n}\nexport function log(x, base) {\n return log2(x) / Math.log2(base);\n}\nexport function ilog2(x) {\n return BigInt(log2(x));\n}\n// export function copySign\n// export function createChecked\n// export function createSaturating\n// export function createTruncating\n// export function getByteCount\n// export function leadingZeroCount\n// export function popCount\n// export function rotateLeft\n// export function rotateRight\n// export function trailingZeroCount\n// export function tryFormat\n// export function tryWriteBytes\n// -------------------------------------------------\n// Binary serialization\n// -------------------------------------------------\nconst hexCodes = new Uint8Array([48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 97, 98, 99, 100, 101, 102]);\nfunction fromHexCode(code) {\n if (48 <= code && code <= 57)\n return code - 48;\n if (97 <= code && code <= 102)\n return code - 97 + 10;\n if (65 <= code && code <= 70)\n return code - 65 + 10;\n throw Error(`Invalid hex code: ${code}`);\n}\nfunction toSignedBytes(x, isBigEndian) {\n const isNeg = x < 0n;\n if (isNeg) {\n const len = log2(-x);\n const bits = len + (8 - len % 8);\n const pow2 = (1n << BigInt(bits));\n x = x + pow2; // two's complement\n }\n const hex = x.toString(16);\n const len = hex.length;\n const odd = len % 2;\n const first = hex.charCodeAt(0);\n const isLow = 48 <= first && first <= 55; // 0..7\n const start = (isNeg && isLow) || (!isNeg && !isLow) ? 1 : 0;\n const bytes = new Uint8Array(start + (len + odd) / 2);\n const inc = isBigEndian ? 1 : -1;\n let pos = isBigEndian ? 0 : bytes.length - 1;\n if (start > 0) {\n bytes[pos] = isNeg ? 255 : 0;\n pos += inc;\n }\n if (odd > 0) {\n bytes[pos] = fromHexCode(first);\n pos += inc;\n }\n for (let i = odd; i < len; i += 2, pos += inc) {\n const a = fromHexCode(hex.charCodeAt(i));\n const b = fromHexCode(hex.charCodeAt(i + 1));\n bytes[pos] = (a << 4) | b;\n }\n return bytes;\n}\nfunction fromSignedBytes(bytes, isBigEndian) {\n if (bytes == null) {\n throw new Error(\"bytes is null\");\n }\n const len = bytes.length;\n const first = isBigEndian ? 0 : len - 1;\n const isNeg = bytes[first] > 127;\n const codes = new Uint16Array(len * 2 + 2);\n codes[0] = 48; // 0\n codes[1] = 120; // x\n const inc = isBigEndian ? 1 : -1;\n let pos = isBigEndian ? 0 : len - 1;\n for (let i = 0; i < bytes.length; i++, pos += inc) {\n const byte = bytes[pos];\n codes[2 * i + 2] = hexCodes[byte >> 4];\n codes[2 * i + 3] = hexCodes[byte & 15];\n }\n const str = String.fromCharCode.apply(null, codes);\n let x = BigInt(str);\n if (isNeg) {\n const bits = len * 8;\n const pow2 = (1n << BigInt(bits));\n x = x - pow2; // two's complement\n }\n return x;\n}\n","/**\n * DateTimeOffset functions.\n *\n * Note: Date instances are always DateObjects in local\n * timezone (because JS dates are all kinds of messed up).\n * A local date returns UTC epoch when `.getTime()` is called.\n *\n * Basically; invariant: date.getTime() always return UTC time.\n */\nimport { toInt64, toFloat64 } from \"./BigInt.js\";\nimport { compareDates, dateOffset, padWithZeros } from \"./Util.js\";\nexport function kind(value) {\n return value.kind || 0;\n}\nexport function unixEpochMillisecondsToTicks(ms, offset) {\n return toInt64(((BigInt(ms) + 62135596800000n) + BigInt(offset)) * 10000n);\n}\nexport function ticksToUnixEpochMilliseconds(ticks) {\n return Number(((BigInt(ticks) / 10000n) - 62135596800000n));\n}\nexport function dateOffsetToString(offset) {\n const isMinus = offset < 0;\n offset = Math.abs(offset);\n const hours = ~~(offset / 3600000);\n const minutes = (offset % 3600000) / 60000;\n return (isMinus ? \"-\" : \"+\") +\n padWithZeros(hours, 2) + \":\" +\n padWithZeros(minutes, 2);\n}\nexport function dateToHalfUTCString(date, half) {\n const str = date.toISOString();\n return half === \"first\"\n ? str.substring(0, str.indexOf(\"T\"))\n : str.substring(str.indexOf(\"T\") + 1, str.length - 1);\n}\nfunction dateToISOString(d, utc) {\n if (utc) {\n return d.toISOString();\n }\n else {\n // JS Date is always local\n const printOffset = d.kind == null ? true : d.kind === 2 /* DateKind.Local */;\n return padWithZeros(d.getFullYear(), 4) + \"-\" +\n padWithZeros(d.getMonth() + 1, 2) + \"-\" +\n padWithZeros(d.getDate(), 2) + \"T\" +\n padWithZeros(d.getHours(), 2) + \":\" +\n padWithZeros(d.getMinutes(), 2) + \":\" +\n padWithZeros(d.getSeconds(), 2) + \".\" +\n padWithZeros(d.getMilliseconds(), 3) +\n (printOffset ? dateOffsetToString(d.getTimezoneOffset() * -60000) : \"\");\n }\n}\nfunction dateToISOStringWithOffset(dateWithOffset, offset) {\n const str = dateWithOffset.toISOString();\n return str.substring(0, str.length - 1) + dateOffsetToString(offset);\n}\nfunction dateToStringWithCustomFormat(date, format, utc) {\n return format.replace(/(\\w)\\1*/g, (match) => {\n let rep = Number.NaN;\n switch (match.substring(0, 1)) {\n case \"y\":\n const y = utc ? date.getUTCFullYear() : date.getFullYear();\n rep = match.length < 4 ? y % 100 : y;\n break;\n case \"M\":\n rep = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n break;\n case \"d\":\n rep = utc ? date.getUTCDate() : date.getDate();\n break;\n case \"H\":\n rep = utc ? date.getUTCHours() : date.getHours();\n break;\n case \"h\":\n const h = utc ? date.getUTCHours() : date.getHours();\n rep = h > 12 ? h % 12 : h;\n break;\n case \"m\":\n rep = utc ? date.getUTCMinutes() : date.getMinutes();\n break;\n case \"s\":\n rep = utc ? date.getUTCSeconds() : date.getSeconds();\n break;\n case \"f\":\n rep = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n break;\n }\n if (Number.isNaN(rep)) {\n return match;\n }\n else {\n return padWithZeros(rep, match.length);\n }\n });\n}\nfunction dateToStringWithOffset(date, format) {\n const d = new Date(date.getTime() + (date.offset ?? 0));\n if (typeof format !== \"string\") {\n return d.toISOString().replace(/\\.\\d+/, \"\").replace(/[A-Z]|\\.\\d+/g, \" \") + dateOffsetToString((date.offset ?? 0));\n }\n else if (format.length === 1) {\n switch (format) {\n case \"D\":\n case \"d\": return dateToHalfUTCString(d, \"first\");\n case \"T\":\n case \"t\": return dateToHalfUTCString(d, \"second\");\n case \"O\":\n case \"o\": return dateToISOStringWithOffset(d, (date.offset ?? 0));\n default: throw new Error(\"Unrecognized Date print format\");\n }\n }\n else {\n return dateToStringWithCustomFormat(d, format, true);\n }\n}\nfunction dateToStringWithKind(date, format) {\n const utc = date.kind === 1 /* DateKind.UTC */;\n if (typeof format !== \"string\") {\n return utc ? date.toUTCString() : date.toLocaleString();\n }\n else if (format.length === 1) {\n switch (format) {\n case \"D\":\n case \"d\":\n return utc ? dateToHalfUTCString(date, \"first\") : date.toLocaleDateString();\n case \"T\":\n case \"t\":\n return utc ? dateToHalfUTCString(date, \"second\") : date.toLocaleTimeString();\n case \"O\":\n case \"o\":\n return dateToISOString(date, utc);\n default:\n throw new Error(\"Unrecognized Date print format\");\n }\n }\n else {\n return dateToStringWithCustomFormat(date, format, utc);\n }\n}\nexport function toString(date, format, _provider) {\n return date.offset != null\n ? dateToStringWithOffset(date, format)\n : dateToStringWithKind(date, format);\n}\nexport function DateTime(value, kind) {\n const d = new Date(value);\n d.kind = (kind == null ? 0 /* DateKind.Unspecified */ : kind) | 0;\n return d;\n}\nexport function fromTicks(ticks, kind) {\n kind = kind != null ? kind : 2 /* DateKind.Local */; // better default than Unspecified\n let date = DateTime(ticksToUnixEpochMilliseconds(ticks), kind);\n // Ticks are local to offset (in this case, either UTC or Local/Unknown).\n // If kind is anything but UTC, that means that the tick number was not\n // in utc, thus getTime() cannot return UTC, and needs to be shifted.\n if (kind !== 1 /* DateKind.UTC */) {\n date = DateTime(date.getTime() - dateOffset(date), kind);\n }\n return date;\n}\nexport function fromDateTimeOffset(date, kind) {\n switch (kind) {\n case 1 /* DateKind.UTC */: return DateTime(date.getTime(), 1 /* DateKind.UTC */);\n case 2 /* DateKind.Local */: return DateTime(date.getTime(), 2 /* DateKind.Local */);\n default:\n const d = DateTime(date.getTime() + (date.offset ?? 0), kind);\n return DateTime(d.getTime() - dateOffset(d), kind);\n }\n}\nexport function getTicks(date) {\n return unixEpochMillisecondsToTicks(date.getTime(), dateOffset(date));\n}\nexport function minValue() {\n // This is \"0001-01-01T00:00:00.000Z\", actual JS min value is -8640000000000000\n return DateTime(-62135596800000, 0 /* DateKind.Unspecified */);\n}\nexport function maxValue() {\n // This is \"9999-12-31T23:59:59.999Z\", actual JS max value is 8640000000000000\n return DateTime(253402300799999, 0 /* DateKind.Unspecified */);\n}\nexport function parseRaw(input) {\n function fail() {\n throw new Error(`The string is not a valid Date: ${input}`);\n }\n if (input == null || input.trim() === \"\") {\n fail();\n }\n // ISO dates without TZ are parsed as UTC. Adding time without TZ keeps them local.\n if (input.length === 10 && input[4] === \"-\" && input[7] === \"-\") {\n input += \"T00:00:00\";\n }\n let date = new Date(input);\n let offset = null;\n if (isNaN(date.getTime())) {\n // Try to check strings JS Date cannot parse (see #1045, #1422)\n // tslint:disable-next-line:max-line-length\n const m = /^\\s*(\\d+[^\\w\\s:]\\d+[^\\w\\s:]\\d+)?\\s*(\\d+:\\d+(?::\\d+(?:\\.\\d+)?)?)?\\s*([AaPp][Mm])?\\s*(Z|[+-]([01]?\\d):?([0-5]?\\d)?)?\\s*$/.exec(input);\n if (m != null) {\n let baseDate;\n let timeInSeconds = 0;\n if (m[2] != null) {\n const timeParts = m[2].split(\":\");\n timeInSeconds =\n parseInt(timeParts[0], 10) * 3600 +\n parseInt(timeParts[1] || \"0\", 10) * 60 +\n parseFloat(timeParts[2] || \"0\");\n if (m[3] != null && m[3].toUpperCase() === \"PM\") {\n timeInSeconds += 720;\n }\n }\n if (m[4] != null) { // There's an offset, parse as UTC\n if (m[1] != null) {\n baseDate = new Date(m[1] + \" UTC\");\n }\n else {\n const d = new Date();\n baseDate = new Date(d.getUTCFullYear() + \"/\" + (d.getUTCMonth() + 1) + \"/\" + d.getUTCDate());\n }\n if (m[4] === \"Z\") {\n offset = \"Z\";\n }\n else {\n let offsetInMinutes = parseInt(m[5], 10) * 60 + parseInt(m[6] || \"0\", 10);\n if (m[4][0] === \"-\") {\n offsetInMinutes *= -1;\n }\n offset = offsetInMinutes;\n timeInSeconds -= offsetInMinutes * 60;\n }\n }\n else {\n if (m[1] != null) {\n baseDate = new Date(m[1]);\n }\n else {\n const d = new Date();\n baseDate = new Date(d.getFullYear() + \"/\" + (d.getMonth() + 1) + \"/\" + d.getDate());\n }\n }\n date = new Date(baseDate.getTime() + timeInSeconds * 1000);\n // correct for daylight savings time\n date = new Date(date.getTime() + (date.getTimezoneOffset() - baseDate.getTimezoneOffset()) * 60000);\n }\n else {\n fail();\n }\n // Check again the date is valid after transformations, see #2229\n if (isNaN(date.getTime())) {\n fail();\n }\n }\n return [date, offset];\n}\nexport function parse(str, detectUTC = false) {\n const [date, offset] = parseRaw(str);\n // .NET always parses DateTime as Local if there's offset info (even \"Z\")\n // Newtonsoft.Json uses UTC if the offset is \"Z\"\n const kind = offset != null\n ? (detectUTC && offset === \"Z\" ? 1 /* DateKind.UTC */ : 2 /* DateKind.Local */)\n : 0 /* DateKind.Unspecified */;\n return DateTime(date.getTime(), kind);\n}\nexport function tryParse(v, defValue) {\n try {\n defValue.contents = parse(v);\n return true;\n }\n catch (_err) {\n return false;\n }\n}\nexport function create(year, month, day, h = 0, m = 0, s = 0, ms = 0, kind) {\n const date = kind === 1 /* DateKind.UTC */\n ? new Date(Date.UTC(year, month - 1, day, h, m, s, ms))\n : new Date(year, month - 1, day, h, m, s, ms);\n if (year <= 99) {\n if (kind === 1 /* DateKind.UTC */) {\n date.setUTCFullYear(year, month - 1, day);\n }\n else {\n date.setFullYear(year, month - 1, day);\n }\n }\n const dateValue = date.getTime();\n if (isNaN(dateValue)) {\n throw new Error(\"The parameters describe an unrepresentable Date.\");\n }\n return DateTime(dateValue, kind);\n}\nexport function now() {\n return DateTime(Date.now(), 2 /* DateKind.Local */);\n}\nexport function utcNow() {\n return DateTime(Date.now(), 1 /* DateKind.UTC */);\n}\nexport function today() {\n return date(now());\n}\nexport function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\nexport function daysInMonth(year, month) {\n return month === 2\n ? (isLeapYear(year) ? 29 : 28)\n : (month >= 8 ? (month % 2 === 0 ? 31 : 30) : (month % 2 === 0 ? 30 : 31));\n}\nexport function toUniversalTime(date) {\n return date.kind === 1 /* DateKind.UTC */ ? date : DateTime(date.getTime(), 1 /* DateKind.UTC */);\n}\nexport function toLocalTime(date) {\n return date.kind === 2 /* DateKind.Local */ ? date : DateTime(date.getTime(), 2 /* DateKind.Local */);\n}\nexport function specifyKind(d, kind) {\n return create(year(d), month(d), day(d), hour(d), minute(d), second(d), millisecond(d), kind);\n}\nexport function timeOfDay(d) {\n return hour(d) * 3600000\n + minute(d) * 60000\n + second(d) * 1000\n + millisecond(d);\n}\nexport function date(d) {\n return create(year(d), month(d), day(d), 0, 0, 0, 0, d.kind);\n}\nexport function day(d) {\n return d.kind === 1 /* DateKind.UTC */ ? d.getUTCDate() : d.getDate();\n}\nexport function hour(d) {\n return d.kind === 1 /* DateKind.UTC */ ? d.getUTCHours() : d.getHours();\n}\nexport function millisecond(d) {\n return d.kind === 1 /* DateKind.UTC */ ? d.getUTCMilliseconds() : d.getMilliseconds();\n}\nexport function minute(d) {\n return d.kind === 1 /* DateKind.UTC */ ? d.getUTCMinutes() : d.getMinutes();\n}\nexport function month(d) {\n return (d.kind === 1 /* DateKind.UTC */ ? d.getUTCMonth() : d.getMonth()) + 1;\n}\nexport function second(d) {\n return d.kind === 1 /* DateKind.UTC */ ? d.getUTCSeconds() : d.getSeconds();\n}\nexport function year(d) {\n return d.kind === 1 /* DateKind.UTC */ ? d.getUTCFullYear() : d.getFullYear();\n}\nexport function dayOfWeek(d) {\n return d.kind === 1 /* DateKind.UTC */ ? d.getUTCDay() : d.getDay();\n}\nexport function dayOfYear(d) {\n const _year = year(d);\n const _month = month(d);\n let _day = day(d);\n for (let i = 1; i < _month; i++) {\n _day += daysInMonth(_year, i);\n }\n return _day;\n}\nexport function add(d, ts) {\n const newDate = DateTime(d.getTime() + ts, d.kind);\n if (d.kind === 2 /* DateKind.Local */) {\n const oldTzOffset = d.getTimezoneOffset();\n const newTzOffset = newDate.getTimezoneOffset();\n return oldTzOffset !== newTzOffset\n ? DateTime(newDate.getTime() + (newTzOffset - oldTzOffset) * 60000, d.kind)\n : newDate;\n }\n else {\n return newDate;\n }\n}\nexport function addDays(d, v) {\n return add(d, v * 86400000);\n}\nexport function addHours(d, v) {\n return add(d, v * 3600000);\n}\nexport function addMinutes(d, v) {\n return add(d, v * 60000);\n}\nexport function addSeconds(d, v) {\n return add(d, v * 1000);\n}\nexport function addMilliseconds(d, v) {\n return add(d, v);\n}\nexport function addTicks(d, v) {\n return add(d, toFloat64(v / 10000n));\n}\nexport function addYears(d, v) {\n const newMonth = month(d);\n const newYear = year(d) + v;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, day(d));\n return create(newYear, newMonth, newDay, hour(d), minute(d), second(d), millisecond(d), d.kind);\n}\nexport function addMonths(d, v) {\n let newMonth = month(d) + v;\n let newMonth_ = 0;\n let yearOffset = 0;\n if (newMonth > 12) {\n newMonth_ = newMonth % 12;\n yearOffset = Math.floor(newMonth / 12);\n newMonth = newMonth_;\n }\n else if (newMonth < 1) {\n newMonth_ = 12 + newMonth % 12;\n yearOffset = Math.floor(newMonth / 12) + (newMonth_ === 12 ? -1 : 0);\n newMonth = newMonth_;\n }\n const newYear = year(d) + yearOffset;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, day(d));\n return create(newYear, newMonth, newDay, hour(d), minute(d), second(d), millisecond(d), d.kind);\n}\nexport function subtract(d, that) {\n return typeof that === \"number\"\n ? add(d, -that)\n : d.getTime() - that.getTime();\n}\nexport function toLongDateString(d) {\n return d.toDateString();\n}\nexport function toShortDateString(d) {\n return d.toLocaleDateString();\n}\nexport function toLongTimeString(d) {\n return d.toLocaleTimeString();\n}\nexport function toShortTimeString(d) {\n return d.toLocaleTimeString().replace(/:\\d\\d(?!:)/, \"\");\n}\nexport function equals(d1, d2) {\n return d1.getTime() === d2.getTime();\n}\nexport const compare = compareDates;\nexport const compareTo = compareDates;\nexport function op_Addition(x, y) {\n return add(x, y);\n}\nexport function op_Subtraction(x, y) {\n return subtract(x, y);\n}\nexport function isDaylightSavingTime(x) {\n const jan = new Date(x.getFullYear(), 0, 1);\n const jul = new Date(x.getFullYear(), 6, 1);\n return isDST(jan.getTimezoneOffset(), jul.getTimezoneOffset(), x.getTimezoneOffset());\n}\nfunction isDST(janOffset, julOffset, tOffset) {\n return Math.min(janOffset, julOffset) === tOffset;\n}\nexport default DateTime;\n","export function create(pattern, options = 0) {\n // Supported RegexOptions\n // * IgnoreCase: 0x0001\n // * Multiline: 0x0002\n // * Compiled: 0x0008 (ignored)\n // * Singleline: 0x0010\n // * ECMAScript: 0x0100 (ignored)\n if ((options & ~(1 ^ 2 ^ 8 ^ 16 ^ 256)) !== 0) {\n throw new Error(\"RegexOptions only supports: IgnoreCase, Multiline, Compiled, Singleline and ECMAScript\");\n }\n // Set always global and unicode flags for compatibility with dotnet, see #2925\n let flags = \"gu\";\n flags += options & 1 ? \"i\" : \"\"; // 0x0001 RegexOptions.IgnoreCase\n flags += options & 2 ? \"m\" : \"\";\n flags += options & 16 ? \"s\" : \"\";\n return new RegExp(pattern, flags);\n}\n// From http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\nexport function escape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n}\nexport function unescape(str) {\n return str.replace(/\\\\([\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|])/g, \"$1\");\n}\nexport function isMatch(reg, input, startAt = 0) {\n reg.lastIndex = startAt;\n return reg.test(input);\n}\nexport function match(reg, input, startAt = 0) {\n reg.lastIndex = startAt;\n return reg.exec(input);\n}\nexport function matches(reg, input, startAt = 0) {\n if (input == null) {\n throw new Error(\"Input cannot ve null\");\n }\n if (!reg.global) {\n throw new Error(\"Non-global RegExp\"); // Prevent infinite loop\n }\n reg.lastIndex = startAt;\n const matches = [];\n let m;\n let lastMatchIndex = -1;\n // tslint:disable-next-line:no-conditional-assignment\n while ((m = reg.exec(input)) != null) {\n // It can happen even global regex get stuck, see #2845\n if (m.index === lastMatchIndex) {\n reg.lastIndex++;\n }\n else {\n lastMatchIndex = m.index;\n matches.push(m);\n }\n }\n return matches;\n}\nexport function options(reg) {\n let options = 256; // ECMAScript\n options |= reg.ignoreCase ? 1 : 0;\n options |= reg.multiline ? 2 : 0;\n return options;\n}\nexport function replace(reg, input, replacement, limit, offset = 0) {\n function replacer() {\n let res = arguments[0];\n if (limit) {\n limit--;\n const match = [];\n const len = arguments.length;\n // arguments: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_function_as_a_parameter\n // * match: matched substring\n // * p1, p2, ...: nth capture group string\n // * offset: offset of matched substring\n // * string: whole string examined\n // * groups: named capturing groups\n // ONLY if regex contains a named capture group AND browser supports named groups\n // -> last element can be groups OR input string\n // -> check if last element is string\n const withGroups = typeof arguments[len - 1] !== \"string\";\n let pLast = withGroups ? len - 3 : len - 2;\n for (let i = 0; i < pLast; i++) {\n match.push(arguments[i]);\n }\n match.index = arguments[pLast++];\n match.input = arguments[pLast++];\n if (withGroups) {\n match.groups = arguments[pLast];\n }\n res = replacement(match);\n }\n return res;\n }\n if (typeof reg === \"string\") {\n const tmp = reg;\n reg = create(input, limit ?? 0);\n input = tmp;\n limit = undefined;\n }\n if (typeof replacement === \"function\") {\n limit = limit == null ? -1 : limit;\n return input.substring(0, offset) + input.substring(offset).replace(reg, replacer);\n }\n else {\n replacement =\n replacement\n // $0 doesn't work with JS regex, see #1155\n .replace(/\\$0/g, (_s) => \"$&\")\n // named groups in replacement are `${name}` in .Net, but `$` in JS (in regex: groups are `(?...)` in both)\n .replace(/\\${([^}]+)}/g, \"\\$<$1>\");\n if (limit != null) {\n let m;\n const sub1 = input.substring(offset);\n const _matches = matches(reg, sub1);\n const sub2 = matches.length > limit ? (m = _matches[limit - 1], sub1.substring(0, m.index + m[0].length)) : sub1;\n return input.substring(0, offset) + sub2.replace(reg, replacement)\n + input.substring(offset + sub2.length);\n }\n else {\n return input.replace(reg, replacement);\n }\n }\n}\nexport function split(reg, input, limit, offset = 0) {\n if (typeof reg === \"string\") {\n const tmp = reg;\n reg = create(input, limit ?? 0);\n input = tmp;\n limit = undefined;\n }\n input = input.substring(offset);\n return input.split(reg, limit);\n}\n","import { combineHashCodes, compare, compareArrays, equalArrays, equals, sameConstructor, numberHash, structuralHash } from \"./Util.js\";\nexport function seqToString(self) {\n let count = 0;\n let str = \"[\";\n for (const x of self) {\n if (count === 0) {\n str += toString(x);\n }\n else if (count === 100) {\n str += \"; ...\";\n break;\n }\n else {\n str += \"; \" + toString(x);\n }\n count++;\n }\n return str + \"]\";\n}\nexport function toString(x, callStack = 0) {\n if (x != null && typeof x === \"object\") {\n if (typeof x.toString === \"function\") {\n return x.toString();\n }\n else if (Symbol.iterator in x) {\n return seqToString(x);\n }\n else { // TODO: Date?\n const cons = Object.getPrototypeOf(x)?.constructor;\n return cons === Object && callStack < 10\n // Same format as recordToString\n ? \"{ \" + Object.entries(x).map(([k, v]) => k + \" = \" + toString(v, callStack + 1)).join(\"\\n \") + \" }\"\n : cons?.name ?? \"\";\n }\n }\n return String(x);\n}\nexport function unionToString(name, fields) {\n if (fields.length === 0) {\n return name;\n }\n else {\n let fieldStr;\n let withParens = true;\n if (fields.length === 1) {\n fieldStr = toString(fields[0]);\n withParens = fieldStr.indexOf(\" \") >= 0;\n }\n else {\n fieldStr = fields.map((x) => toString(x)).join(\", \");\n }\n return name + (withParens ? \" (\" : \" \") + fieldStr + (withParens ? \")\" : \"\");\n }\n}\nexport class Union {\n get name() {\n return this.cases()[this.tag];\n }\n toJSON() {\n return this.fields.length === 0 ? this.name : [this.name].concat(this.fields);\n }\n toString() {\n return unionToString(this.name, this.fields);\n }\n GetHashCode() {\n const hashes = this.fields.map((x) => structuralHash(x));\n hashes.splice(0, 0, numberHash(this.tag));\n return combineHashCodes(hashes);\n }\n Equals(other) {\n if (this === other) {\n return true;\n }\n else if (!sameConstructor(this, other)) {\n return false;\n }\n else if (this.tag === other.tag) {\n return equalArrays(this.fields, other.fields);\n }\n else {\n return false;\n }\n }\n CompareTo(other) {\n if (this === other) {\n return 0;\n }\n else if (!sameConstructor(this, other)) {\n return -1;\n }\n else if (this.tag === other.tag) {\n return compareArrays(this.fields, other.fields);\n }\n else {\n return this.tag < other.tag ? -1 : 1;\n }\n }\n}\nfunction recordToJSON(self) {\n const o = {};\n const keys = Object.keys(self);\n for (let i = 0; i < keys.length; i++) {\n o[keys[i]] = self[keys[i]];\n }\n return o;\n}\nfunction recordToString(self) {\n return \"{ \" + Object.entries(self).map(([k, v]) => k + \" = \" + toString(v)).join(\"\\n \") + \" }\";\n}\nfunction recordGetHashCode(self) {\n const hashes = Object.values(self).map((v) => structuralHash(v));\n return combineHashCodes(hashes);\n}\nfunction recordEquals(self, other) {\n if (self === other) {\n return true;\n }\n else if (!sameConstructor(self, other)) {\n return false;\n }\n else {\n const thisNames = Object.keys(self);\n for (let i = 0; i < thisNames.length; i++) {\n if (!equals(self[thisNames[i]], other[thisNames[i]])) {\n return false;\n }\n }\n return true;\n }\n}\nfunction recordCompareTo(self, other) {\n if (self === other) {\n return 0;\n }\n else if (!sameConstructor(self, other)) {\n return -1;\n }\n else {\n const thisNames = Object.keys(self);\n for (let i = 0; i < thisNames.length; i++) {\n const result = compare(self[thisNames[i]], other[thisNames[i]]);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n }\n}\nexport class Record {\n toJSON() { return recordToJSON(this); }\n toString() { return recordToString(this); }\n GetHashCode() { return recordGetHashCode(this); }\n Equals(other) { return recordEquals(this, other); }\n CompareTo(other) { return recordCompareTo(this, other); }\n}\nexport class FSharpRef {\n get contents() {\n return this.getter();\n }\n set contents(v) {\n this.setter(v);\n }\n constructor(contentsOrGetter, setter) {\n if (typeof setter === \"function\") {\n this.getter = contentsOrGetter;\n this.setter = setter;\n }\n else {\n this.getter = () => contentsOrGetter;\n this.setter = (v) => { contentsOrGetter = v; };\n }\n }\n}\n// EXCEPTIONS\n// Exception is intentionally not derived from Error, for performance reasons (see #2160)\nexport class Exception {\n constructor(message) {\n this.message = message;\n }\n}\nexport function isException(x) {\n return x instanceof Exception || x instanceof Error;\n}\nexport function isPromise(x) {\n return x instanceof Promise;\n}\nexport function ensureErrorOrException(e) {\n // Exceptionally admitting promises as errors for compatibility with React.suspense (see #3298)\n return (isException(e) || isPromise(e)) ? e : new Error(String(e));\n}\nexport class FSharpException extends Exception {\n toJSON() { return recordToJSON(this); }\n toString() { return recordToString(this); }\n GetHashCode() { return recordGetHashCode(this); }\n Equals(other) { return recordEquals(this, other); }\n CompareTo(other) { return recordCompareTo(this, other); }\n}\nexport class MatchFailureException extends FSharpException {\n constructor(arg1, arg2, arg3) {\n super();\n this.arg1 = arg1;\n this.arg2 = arg2 | 0;\n this.arg3 = arg3 | 0;\n this.message = \"The match cases were incomplete\";\n }\n}\nexport class Attribute {\n}\n","import { toString as dateToString } from \"./Date.js\";\nimport { compare as numericCompare, isNumeric, multiply, toExponential, toFixed, toHex, toPrecision } from \"./Numeric.js\";\nimport { escape } from \"./RegExp.js\";\nimport { toString } from \"./Types.js\";\nconst fsFormatRegExp = /(^|[^%])%([0+\\- ]*)(\\*|\\d+)?(?:\\.(\\d+))?(\\w)/g;\nconst interpolateRegExp = /(?:(^|[^%])%([0+\\- ]*)(\\d+)?(?:\\.(\\d+))?(\\w))?%P\\(\\)/g;\nconst formatRegExp = /\\{(\\d+)(,-?\\d+)?(?:\\:([a-zA-Z])(\\d{0,2})|\\:(.+?))?\\}/g;\nfunction isLessThan(x, y) {\n return numericCompare(x, y) < 0;\n}\nfunction cmp(x, y, ic) {\n function isIgnoreCase(i) {\n return i === true ||\n i === 1 /* StringComparison.CurrentCultureIgnoreCase */ ||\n i === 3 /* StringComparison.InvariantCultureIgnoreCase */ ||\n i === 5 /* StringComparison.OrdinalIgnoreCase */;\n }\n function isOrdinal(i) {\n return i === 4 /* StringComparison.Ordinal */ ||\n i === 5 /* StringComparison.OrdinalIgnoreCase */;\n }\n if (x == null) {\n return y == null ? 0 : -1;\n }\n if (y == null) {\n return 1;\n } // everything is bigger than null\n if (isOrdinal(ic)) {\n if (isIgnoreCase(ic)) {\n x = x.toLowerCase();\n y = y.toLowerCase();\n }\n return (x === y) ? 0 : (x < y ? -1 : 1);\n }\n else {\n if (isIgnoreCase(ic)) {\n x = x.toLocaleLowerCase();\n y = y.toLocaleLowerCase();\n }\n return x.localeCompare(y);\n }\n}\nexport function compare(...args) {\n switch (args.length) {\n case 2: return cmp(args[0], args[1], false);\n case 3: return cmp(args[0], args[1], args[2]);\n case 4: return cmp(args[0], args[1], args[2] === true);\n case 5: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), false);\n case 6: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), args[5]);\n case 7: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), args[5] === true);\n default: throw new Error(\"String.compare: Unsupported number of parameters\");\n }\n}\nexport function compareOrdinal(x, y) {\n return cmp(x, y, 4 /* StringComparison.Ordinal */);\n}\nexport function compareTo(x, y) {\n return cmp(x, y, 0 /* StringComparison.CurrentCulture */);\n}\nexport function startsWith(str, pattern, ic) {\n if (str.length >= pattern.length) {\n return cmp(str.substr(0, pattern.length), pattern, ic) === 0;\n }\n return false;\n}\nexport function indexOfAny(str, anyOf, ...args) {\n if (str == null || str === \"\") {\n return -1;\n }\n const startIndex = (args.length > 0) ? args[0] : 0;\n if (startIndex < 0) {\n throw new Error(\"Start index cannot be negative\");\n }\n const length = (args.length > 1) ? args[1] : str.length - startIndex;\n if (length < 0) {\n throw new Error(\"Length cannot be negative\");\n }\n if (startIndex + length > str.length) {\n throw new Error(\"Invalid startIndex and length\");\n }\n str = str.substring(startIndex, startIndex + length);\n for (const c of anyOf) {\n const index = str.indexOf(c);\n if (index > -1) {\n return index + startIndex;\n }\n }\n return -1;\n}\nexport function printf(input) {\n return {\n input,\n cont: fsFormat(input),\n };\n}\nexport function interpolate(str, values) {\n let valIdx = 0;\n let strIdx = 0;\n let result = \"\";\n interpolateRegExp.lastIndex = 0;\n let match = interpolateRegExp.exec(str);\n while (match) {\n // The first group corresponds to the no-escape char (^|[^%]), the actual pattern starts in the next char\n // Note: we don't use negative lookbehind because some browsers don't support it yet\n const matchIndex = match.index + (match[1] || \"\").length;\n result += str.substring(strIdx, matchIndex).replace(/%%/g, \"%\");\n const [, , flags, padLength, precision, format] = match;\n // Save interpolateRegExp.lastIndex before running formatReplacement because the values\n // may also involve interpolation and make use of interpolateRegExp (see #3078)\n strIdx = interpolateRegExp.lastIndex;\n result += formatReplacement(values[valIdx++], flags, padLength, precision, format);\n // Move interpolateRegExp.lastIndex one char behind to make sure we match the no-escape char next time\n interpolateRegExp.lastIndex = strIdx - 1;\n match = interpolateRegExp.exec(str);\n }\n result += str.substring(strIdx).replace(/%%/g, \"%\");\n return result;\n}\nfunction continuePrint(cont, arg) {\n return typeof arg === \"string\" ? cont(arg) : arg.cont(cont);\n}\nexport function toConsole(arg) {\n // Don't remove the lambda here, see #1357\n return continuePrint((x) => console.log(x), arg);\n}\nexport function toConsoleError(arg) {\n return continuePrint((x) => console.error(x), arg);\n}\nexport function toText(arg) {\n return continuePrint((x) => x, arg);\n}\nexport function toFail(arg) {\n return continuePrint((x) => {\n throw new Error(x);\n }, arg);\n}\nfunction formatReplacement(rep, flags, padLength, precision, format) {\n let sign = \"\";\n flags = flags || \"\";\n format = format || \"\";\n if (isNumeric(rep)) {\n if (format.toLowerCase() !== \"x\") {\n if (isLessThan(rep, 0)) {\n rep = multiply(rep, -1);\n sign = \"-\";\n }\n else {\n if (flags.indexOf(\" \") >= 0) {\n sign = \" \";\n }\n else if (flags.indexOf(\"+\") >= 0) {\n sign = \"+\";\n }\n }\n }\n precision = precision == null ? null : parseInt(precision, 10);\n switch (format) {\n case \"f\":\n case \"F\":\n precision = precision != null ? precision : 6;\n rep = toFixed(rep, precision);\n break;\n case \"g\":\n case \"G\":\n rep = precision != null ? toPrecision(rep, precision) : toPrecision(rep);\n break;\n case \"e\":\n case \"E\":\n rep = precision != null ? toExponential(rep, precision) : toExponential(rep);\n break;\n case \"x\":\n rep = toHex(rep);\n break;\n case \"X\":\n rep = toHex(rep).toUpperCase();\n break;\n default: // AOid\n rep = String(rep);\n break;\n }\n }\n else if (rep instanceof Date) {\n rep = dateToString(rep);\n }\n else {\n rep = toString(rep);\n }\n padLength = typeof padLength === \"number\" ? padLength : parseInt(padLength, 10);\n if (!isNaN(padLength)) {\n const zeroFlag = flags.indexOf(\"0\") >= 0; // Use '0' for left padding\n const minusFlag = flags.indexOf(\"-\") >= 0; // Right padding\n const ch = minusFlag || !zeroFlag ? \" \" : \"0\";\n if (ch === \"0\") {\n rep = pad(rep, padLength - sign.length, ch, minusFlag);\n rep = sign + rep;\n }\n else {\n rep = pad(sign + rep, padLength, ch, minusFlag);\n }\n }\n else {\n rep = sign + rep;\n }\n return rep;\n}\nfunction createPrinter(cont, _strParts, _matches, _result = \"\", padArg = -1) {\n return (...args) => {\n // Make copies of the values passed by reference because the function can be used multiple times\n let result = _result;\n const strParts = _strParts.slice();\n const matches = _matches.slice();\n for (const arg of args) {\n const [, , flags, _padLength, precision, format] = matches[0];\n let padLength = _padLength;\n if (padArg >= 0) {\n padLength = padArg;\n padArg = -1;\n }\n else if (padLength === \"*\") {\n if (arg < 0) {\n throw new Error(\"Non-negative number required\");\n }\n padArg = arg;\n continue;\n }\n result += strParts[0];\n result += formatReplacement(arg, flags, padLength, precision, format);\n strParts.splice(0, 1);\n matches.splice(0, 1);\n }\n if (matches.length === 0) {\n result += strParts[0];\n return cont(result);\n }\n else {\n return createPrinter(cont, strParts, matches, result, padArg);\n }\n };\n}\nexport function fsFormat(str) {\n return (cont) => {\n fsFormatRegExp.lastIndex = 0;\n const strParts = [];\n const matches = [];\n let strIdx = 0;\n let match = fsFormatRegExp.exec(str);\n while (match) {\n // The first group corresponds to the no-escape char (^|[^%]), the actual pattern starts in the next char\n // Note: we don't use negative lookbehind because some browsers don't support it yet\n const matchIndex = match.index + (match[1] || \"\").length;\n strParts.push(str.substring(strIdx, matchIndex).replace(/%%/g, \"%\"));\n matches.push(match);\n strIdx = fsFormatRegExp.lastIndex;\n // Likewise we need to move fsFormatRegExp.lastIndex one char behind to make sure we match the no-escape char next time\n fsFormatRegExp.lastIndex -= 1;\n match = fsFormatRegExp.exec(str);\n }\n if (strParts.length === 0) {\n return cont(str.replace(/%%/g, \"%\"));\n }\n else {\n strParts.push(str.substring(strIdx).replace(/%%/g, \"%\"));\n return createPrinter(cont, strParts, matches);\n }\n };\n}\nexport function format(str, ...args) {\n let str2;\n if (typeof str === \"object\") {\n // Called with culture info\n str2 = String(args[0]);\n args.shift();\n }\n else {\n str2 = str;\n }\n return str2.replace(formatRegExp, (_, idx, padLength, format, precision, pattern) => {\n if (idx < 0 || idx >= args.length) {\n throw new Error(\"Index must be greater or equal to zero and less than the arguments' length.\");\n }\n let rep = args[idx];\n if (isNumeric(rep)) {\n precision = precision == null ? null : parseInt(precision, 10);\n switch (format) {\n case \"f\":\n case \"F\":\n precision = precision != null ? precision : 2;\n rep = toFixed(rep, precision);\n break;\n case \"g\":\n case \"G\":\n rep = precision != null ? toPrecision(rep, precision) : toPrecision(rep);\n break;\n case \"e\":\n case \"E\":\n rep = precision != null ? toExponential(rep, precision) : toExponential(rep);\n break;\n case \"p\":\n case \"P\":\n precision = precision != null ? precision : 2;\n rep = toFixed(multiply(rep, 100), precision) + \" %\";\n break;\n case \"d\":\n case \"D\":\n rep = precision != null ? padLeft(String(rep), precision, \"0\") : String(rep);\n break;\n case \"x\":\n case \"X\":\n rep = precision != null ? padLeft(toHex(rep), precision, \"0\") : toHex(rep);\n if (format === \"X\") {\n rep = rep.toUpperCase();\n }\n break;\n default:\n if (pattern) {\n let sign = \"\";\n rep = pattern.replace(/([0#,]+)(\\.[0#]+)?/, (_, intPart, decimalPart) => {\n if (isLessThan(rep, 0)) {\n rep = multiply(rep, -1);\n sign = \"-\";\n }\n decimalPart = decimalPart == null ? \"\" : decimalPart.substring(1);\n rep = toFixed(rep, Math.max(decimalPart.length, 0));\n let [repInt, repDecimal] = rep.split(\".\");\n repDecimal || (repDecimal = \"\");\n const leftZeroes = intPart.replace(/,/g, \"\").replace(/^#+/, \"\").length;\n repInt = padLeft(repInt, leftZeroes, \"0\");\n const rightZeros = decimalPart.replace(/#+$/, \"\").length;\n if (rightZeros > repDecimal.length) {\n repDecimal = padRight(repDecimal, rightZeros, \"0\");\n }\n else if (rightZeros < repDecimal.length) {\n repDecimal = repDecimal.substring(0, rightZeros) + repDecimal.substring(rightZeros).replace(/0+$/, \"\");\n }\n // Thousands separator\n if (intPart.indexOf(\",\") > 0) {\n const i = repInt.length % 3;\n const thousandGroups = Math.floor(repInt.length / 3);\n let thousands = i > 0 ? repInt.substr(0, i) + (thousandGroups > 0 ? \",\" : \"\") : \"\";\n for (let j = 0; j < thousandGroups; j++) {\n thousands += repInt.substr(i + j * 3, 3) + (j < thousandGroups - 1 ? \",\" : \"\");\n }\n repInt = thousands;\n }\n return repDecimal.length > 0 ? repInt + \".\" + repDecimal : repInt;\n });\n rep = sign + rep;\n }\n }\n }\n else if (rep instanceof Date) {\n rep = dateToString(rep, pattern || format);\n }\n else {\n rep = toString(rep);\n }\n padLength = parseInt((padLength || \" \").substring(1), 10);\n if (!isNaN(padLength)) {\n rep = pad(String(rep), Math.abs(padLength), \" \", padLength < 0);\n }\n return rep;\n });\n}\nexport function endsWith(str, search) {\n const idx = str.lastIndexOf(search);\n return idx >= 0 && idx === str.length - search.length;\n}\nexport function initialize(n, f) {\n if (n < 0) {\n throw new Error(\"String length must be non-negative\");\n }\n const xs = new Array(n);\n for (let i = 0; i < n; i++) {\n xs[i] = f(i);\n }\n return xs.join(\"\");\n}\nexport function insert(str, startIndex, value) {\n if (startIndex < 0 || startIndex > str.length) {\n throw new Error(\"startIndex is negative or greater than the length of this instance.\");\n }\n return str.substring(0, startIndex) + value + str.substring(startIndex);\n}\nexport function isNullOrEmpty(str) {\n return typeof str !== \"string\" || str.length === 0;\n}\nexport function isNullOrWhiteSpace(str) {\n return typeof str !== \"string\" || /^\\s*$/.test(str);\n}\nexport function concat(...xs) {\n return xs.map((x) => String(x)).join(\"\");\n}\nexport function join(delimiter, xs) {\n if (Array.isArray(xs)) {\n return xs.join(delimiter);\n }\n else {\n return Array.from(xs).join(delimiter);\n }\n}\nexport function joinWithIndices(delimiter, xs, startIndex, count) {\n const endIndexPlusOne = startIndex + count;\n if (endIndexPlusOne > xs.length) {\n throw new Error(\"Index and count must refer to a location within the buffer.\");\n }\n return xs.slice(startIndex, endIndexPlusOne).join(delimiter);\n}\nfunction notSupported(name) {\n throw new Error(\"The environment doesn't support '\" + name + \"', please use a polyfill.\");\n}\nexport function toBase64String(inArray) {\n let str = \"\";\n for (let i = 0; i < inArray.length; i++) {\n str += String.fromCharCode(inArray[i]);\n }\n return typeof btoa === \"function\" ? btoa(str) : notSupported(\"btoa\");\n}\nexport function fromBase64String(b64Encoded) {\n const binary = typeof atob === \"function\" ? atob(b64Encoded) : notSupported(\"atob\");\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\nfunction pad(str, len, ch, isRight) {\n ch = ch || \" \";\n len = len - str.length;\n for (let i = 0; i < len; i++) {\n str = isRight ? str + ch : ch + str;\n }\n return str;\n}\nexport function padLeft(str, len, ch) {\n return pad(str, len, ch);\n}\nexport function padRight(str, len, ch) {\n return pad(str, len, ch, true);\n}\nexport function remove(str, startIndex, count) {\n if (startIndex >= str.length) {\n throw new Error(\"startIndex must be less than length of string\");\n }\n if (typeof count === \"number\" && (startIndex + count) > str.length) {\n throw new Error(\"Index and count must refer to a location within the string.\");\n }\n return str.slice(0, startIndex) + (typeof count === \"number\" ? str.substr(startIndex + count) : \"\");\n}\nexport function replace(str, search, replace) {\n return str.replace(new RegExp(escape(search), \"g\"), replace);\n}\nexport function replicate(n, x) {\n return initialize(n, () => x);\n}\nexport function getCharAtIndex(input, index) {\n if (index < 0 || index >= input.length) {\n throw new Error(\"Index was outside the bounds of the array.\");\n }\n return input[index];\n}\nexport function split(str, splitters, count, options) {\n count = typeof count === \"number\" ? count : undefined;\n options = typeof options === \"number\" ? options : 0;\n if (count && count < 0) {\n throw new Error(\"Count cannot be less than zero\");\n }\n if (count === 0) {\n return [];\n }\n const removeEmpty = (options & 1) === 1;\n const trim = (options & 2) === 2;\n splitters = splitters || [];\n splitters = splitters.filter(x => x).map(escape);\n splitters = splitters.length > 0 ? splitters : [\"\\\\s\"];\n const splits = [];\n const reg = new RegExp(splitters.join(\"|\"), \"g\");\n let findSplits = true;\n let i = 0;\n do {\n const match = reg.exec(str);\n if (match === null) {\n const candidate = trim ? str.substring(i).trim() : str.substring(i);\n if (!removeEmpty || candidate.length > 0) {\n splits.push(candidate);\n }\n findSplits = false;\n }\n else {\n const candidate = trim ? str.substring(i, match.index).trim() : str.substring(i, match.index);\n if (!removeEmpty || candidate.length > 0) {\n if (count != null && splits.length + 1 === count) {\n splits.push(trim ? str.substring(i).trim() : str.substring(i));\n findSplits = false;\n }\n else {\n splits.push(candidate);\n }\n }\n i = reg.lastIndex;\n }\n } while (findSplits);\n return splits;\n}\nexport function trim(str, ...chars) {\n if (chars.length === 0) {\n return str.trim();\n }\n const pattern = \"[\" + escape(chars.join(\"\")) + \"]+\";\n return str.replace(new RegExp(\"^\" + pattern), \"\").replace(new RegExp(pattern + \"$\"), \"\");\n}\nexport function trimStart(str, ...chars) {\n return chars.length === 0\n ? str.trimStart()\n : str.replace(new RegExp(\"^[\" + escape(chars.join(\"\")) + \"]+\"), \"\");\n}\nexport function trimEnd(str, ...chars) {\n return chars.length === 0\n ? str.trimEnd()\n : str.replace(new RegExp(\"[\" + escape(chars.join(\"\")) + \"]+$\"), \"\");\n}\nexport function filter(pred, x) {\n return x.split(\"\").filter((c) => pred(c)).join(\"\");\n}\nexport function substring(str, startIndex, length) {\n if ((startIndex + (length || 0) > str.length)) {\n throw new Error(\"Invalid startIndex and/or length\");\n }\n return length != null ? str.substr(startIndex, length) : str.substr(startIndex);\n}\nexport function fmt(strs, ...args) {\n return ({ strs, args });\n}\nexport function fmtWith(fmts) {\n return (strs, ...args) => ({ strs, args, fmts });\n}\nexport function getFormat(s) {\n return s.fmts\n ? s.strs.reduce((acc, newPart, index) => acc + `{${String(index - 1) + s.fmts[index - 1]}}` + newPart)\n : s.strs.reduce((acc, newPart, index) => acc + `{${index - 1}}` + newPart);\n}\n","import { structuralHash, equals, compare } from \"./Util.js\";\n// Using a class here for better compatibility with TS files importing Some\nexport class Some {\n constructor(value) {\n this.value = value;\n }\n toJSON() {\n return this.value;\n }\n // Don't add \"Some\" for consistency with erased options\n toString() {\n return String(this.value);\n }\n GetHashCode() {\n return structuralHash(this.value);\n }\n Equals(other) {\n if (other == null) {\n return false;\n }\n else {\n return equals(this.value, other instanceof Some ? other.value : other);\n }\n }\n CompareTo(other) {\n if (other == null) {\n return 1;\n }\n else {\n return compare(this.value, other instanceof Some ? other.value : other);\n }\n }\n}\nexport function value(x) {\n if (x == null) {\n throw new Error(\"Option has no value\");\n }\n else {\n return x instanceof Some ? x.value : x;\n }\n}\nexport function unwrap(opt) {\n return opt instanceof Some ? opt.value : opt;\n}\nexport function some(x) {\n return x == null || x instanceof Some ? new Some(x) : x;\n}\nexport function ofNullable(x) {\n // This will fail with unit probably, an alternative would be:\n // return x === null ? undefined : (x === undefined ? new Some(x) : x);\n return x == null ? undefined : x;\n}\nexport function toNullable(x) {\n return x == null ? null : value(x);\n}\nexport function flatten(x) {\n return x == null ? undefined : value(x);\n}\nexport function toArray(opt) {\n return (opt == null) ? [] : [value(opt)];\n}\nexport function defaultArg(opt, defaultValue) {\n return (opt != null) ? value(opt) : defaultValue;\n}\nexport function defaultArgWith(opt, defThunk) {\n return (opt != null) ? value(opt) : defThunk();\n}\nexport function orElse(opt, ifNone) {\n return opt == null ? ifNone : opt;\n}\nexport function orElseWith(opt, ifNoneThunk) {\n return opt == null ? ifNoneThunk() : opt;\n}\nexport function filter(predicate, opt) {\n return (opt != null) ? (predicate(value(opt)) ? opt : undefined) : opt;\n}\nexport function map(mapping, opt) {\n return (opt != null) ? some(mapping(value(opt))) : undefined;\n}\nexport function map2(mapping, opt1, opt2) {\n return (opt1 != null && opt2 != null) ? mapping(value(opt1), value(opt2)) : undefined;\n}\nexport function map3(mapping, opt1, opt2, opt3) {\n return (opt1 != null && opt2 != null && opt3 != null) ? mapping(value(opt1), value(opt2), value(opt3)) : undefined;\n}\nexport function bind(binder, opt) {\n return opt != null ? binder(value(opt)) : undefined;\n}\nexport function tryOp(op, arg) {\n try {\n return some(op(arg));\n }\n catch {\n return undefined;\n }\n}\n","export const SR_indexOutOfBounds = \"The index was outside the range of elements in the collection.\";\nexport const SR_inputWasEmpty = \"Collection was empty.\";\nexport const SR_inputMustBeNonNegative = \"The input must be non-negative.\";\nexport const SR_inputSequenceEmpty = \"The input sequence was empty.\";\nexport const SR_inputSequenceTooLong = \"The input sequence contains more than one element.\";\nexport const SR_keyNotFoundAlt = \"An index satisfying the predicate was not found in the collection.\";\nexport const SR_differentLengths = \"The collections had different lengths.\";\nexport const SR_notEnoughElements = \"The input sequence has an insufficient number of elements.\";\n","export function Helpers_allocateArrayFromCons(cons, len) {\n if ((typeof cons) === \"function\") {\n return new cons(len);\n }\n else {\n return new Array(len);\n }\n}\n","import { Helpers_allocateArrayFromCons } from \"./Native.js\";\nimport { value as value_2, map as map_1, defaultArg, some } from \"./Option.js\";\nimport { min as min_1, max as max_1 } from \"./Double.js\";\nimport { equals as equals_1, disposeSafe, getEnumerator, copyToArray, defaultOf } from \"./Util.js\";\nimport { SR_indexOutOfBounds } from \"./Global.js\";\nfunction indexNotFound() {\n throw new Error(\"An index satisfying the predicate was not found in the collection.\");\n}\nfunction differentLengths() {\n throw new Error(\"Arrays had different lengths\");\n}\nexport function append(array1, array2, cons) {\n const len1 = array1.length | 0;\n const len2 = array2.length | 0;\n const newArray = Helpers_allocateArrayFromCons(cons, len1 + len2);\n for (let i = 0; i <= (len1 - 1); i++) {\n newArray[i] = array1[i];\n }\n for (let i_1 = 0; i_1 <= (len2 - 1); i_1++) {\n newArray[i_1 + len1] = array2[i_1];\n }\n return newArray;\n}\nexport function filter(predicate, array) {\n return array.filter(predicate);\n}\nexport function fill(target, targetIndex, count, value) {\n const start = targetIndex | 0;\n return target.fill(value, start, (start + count));\n}\nexport function getSubArray(array, start, count) {\n const start_1 = start | 0;\n return array.slice(start_1, (start_1 + count));\n}\nexport function last(array) {\n if (array.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n return array[array.length - 1];\n}\nexport function tryLast(array) {\n if (array.length === 0) {\n return void 0;\n }\n else {\n return some(array[array.length - 1]);\n }\n}\nexport function mapIndexed(f, source, cons) {\n const len = source.length | 0;\n const target = Helpers_allocateArrayFromCons(cons, len);\n for (let i = 0; i <= (len - 1); i++) {\n target[i] = f(i, source[i]);\n }\n return target;\n}\nexport function map(f, source, cons) {\n const len = source.length | 0;\n const target = Helpers_allocateArrayFromCons(cons, len);\n for (let i = 0; i <= (len - 1); i++) {\n target[i] = f(source[i]);\n }\n return target;\n}\nexport function mapIndexed2(f, source1, source2, cons) {\n if (source1.length !== source2.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n const result = Helpers_allocateArrayFromCons(cons, source1.length);\n for (let i = 0; i <= (source1.length - 1); i++) {\n result[i] = f(i, source1[i], source2[i]);\n }\n return result;\n}\nexport function map2(f, source1, source2, cons) {\n if (source1.length !== source2.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n const result = Helpers_allocateArrayFromCons(cons, source1.length);\n for (let i = 0; i <= (source1.length - 1); i++) {\n result[i] = f(source1[i], source2[i]);\n }\n return result;\n}\nexport function mapIndexed3(f, source1, source2, source3, cons) {\n if ((source1.length !== source2.length) ? true : (source2.length !== source3.length)) {\n throw new Error(\"Arrays had different lengths\");\n }\n const result = Helpers_allocateArrayFromCons(cons, source1.length);\n for (let i = 0; i <= (source1.length - 1); i++) {\n result[i] = f(i, source1[i], source2[i], source3[i]);\n }\n return result;\n}\nexport function map3(f, source1, source2, source3, cons) {\n if ((source1.length !== source2.length) ? true : (source2.length !== source3.length)) {\n throw new Error(\"Arrays had different lengths\");\n }\n const result = Helpers_allocateArrayFromCons(cons, source1.length);\n for (let i = 0; i <= (source1.length - 1); i++) {\n result[i] = f(source1[i], source2[i], source3[i]);\n }\n return result;\n}\nexport function mapFold(mapping, state, array, cons) {\n const matchValue = array.length | 0;\n if (matchValue === 0) {\n return [[], state];\n }\n else {\n let acc = state;\n const res = Helpers_allocateArrayFromCons(cons, matchValue);\n for (let i = 0; i <= (array.length - 1); i++) {\n const patternInput = mapping(acc, array[i]);\n res[i] = patternInput[0];\n acc = patternInput[1];\n }\n return [res, acc];\n }\n}\nexport function mapFoldBack(mapping, array, state, cons) {\n const matchValue = array.length | 0;\n if (matchValue === 0) {\n return [[], state];\n }\n else {\n let acc = state;\n const res = Helpers_allocateArrayFromCons(cons, matchValue);\n for (let i = array.length - 1; i >= 0; i--) {\n const patternInput = mapping(array[i], acc);\n res[i] = patternInput[0];\n acc = patternInput[1];\n }\n return [res, acc];\n }\n}\nexport function indexed(source) {\n const len = source.length | 0;\n const target = new Array(len);\n for (let i = 0; i <= (len - 1); i++) {\n target[i] = [i, source[i]];\n }\n return target;\n}\nexport function truncate(count, array) {\n const count_1 = max_1(0, count) | 0;\n return array.slice(0, (0 + count_1));\n}\nexport function concat(arrays, cons) {\n const arrays_1 = Array.isArray(arrays) ? arrays : (Array.from(arrays));\n const matchValue = arrays_1.length | 0;\n switch (matchValue) {\n case 0:\n return Helpers_allocateArrayFromCons(cons, 0);\n case 1:\n return arrays_1[0];\n default: {\n let totalIdx = 0;\n let totalLength = 0;\n for (let idx = 0; idx <= (arrays_1.length - 1); idx++) {\n const arr_1 = arrays_1[idx];\n totalLength = ((totalLength + arr_1.length) | 0);\n }\n const result = Helpers_allocateArrayFromCons(cons, totalLength);\n for (let idx_1 = 0; idx_1 <= (arrays_1.length - 1); idx_1++) {\n const arr_2 = arrays_1[idx_1];\n for (let j = 0; j <= (arr_2.length - 1); j++) {\n result[totalIdx] = arr_2[j];\n totalIdx = ((totalIdx + 1) | 0);\n }\n }\n return result;\n }\n }\n}\nexport function collect(mapping, array, cons) {\n return concat(map(mapping, array, defaultOf()), cons);\n}\nexport function where(predicate, array) {\n return array.filter(predicate);\n}\nexport function indexOf(array, item_1, start, count, eq) {\n const start_1 = defaultArg(start, 0) | 0;\n const end$0027 = defaultArg(map_1((c) => (start_1 + c), count), array.length) | 0;\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (i >= end$0027) {\n return -1;\n }\n else if (eq.Equals(item_1, array[i])) {\n return i | 0;\n }\n else {\n i_mut = (i + 1);\n continue loop;\n }\n break;\n }\n };\n return loop(start_1) | 0;\n}\nexport function contains(value, array, eq) {\n return indexOf(array, value, void 0, void 0, eq) >= 0;\n}\nexport function empty(cons) {\n return Helpers_allocateArrayFromCons(cons, 0);\n}\nexport function singleton(value, cons) {\n const ar = Helpers_allocateArrayFromCons(cons, 1);\n ar[0] = value;\n return ar;\n}\nexport function initialize(count, initializer, cons) {\n if (count < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n const result = Helpers_allocateArrayFromCons(cons, count);\n for (let i = 0; i <= (count - 1); i++) {\n result[i] = initializer(i);\n }\n return result;\n}\nexport function pairwise(array) {\n if (array.length < 2) {\n return [];\n }\n else {\n const count = (array.length - 1) | 0;\n const result = new Array(count);\n for (let i = 0; i <= (count - 1); i++) {\n result[i] = [array[i], array[i + 1]];\n }\n return result;\n }\n}\nexport function replicate(count, initial, cons) {\n if (count < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n const result = Helpers_allocateArrayFromCons(cons, count);\n for (let i = 0; i <= (result.length - 1); i++) {\n result[i] = initial;\n }\n return result;\n}\nexport function copy(array) {\n return array.slice();\n}\nexport function copyTo(source, sourceIndex, target, targetIndex, count) {\n copyToArray(source, sourceIndex, target, targetIndex, count);\n}\nexport function reverse(array) {\n const array_2 = array.slice();\n return array_2.reverse();\n}\nexport function scan(folder, state, array, cons) {\n const res = Helpers_allocateArrayFromCons(cons, array.length + 1);\n res[0] = state;\n for (let i = 0; i <= (array.length - 1); i++) {\n res[i + 1] = folder(res[i], array[i]);\n }\n return res;\n}\nexport function scanBack(folder, array, state, cons) {\n const res = Helpers_allocateArrayFromCons(cons, array.length + 1);\n res[array.length] = state;\n for (let i = array.length - 1; i >= 0; i--) {\n res[i] = folder(array[i], res[i + 1]);\n }\n return res;\n}\nexport function skip(count, array, cons) {\n if (count > array.length) {\n throw new Error(\"count is greater than array length\\\\nParameter name: count\");\n }\n if (count === array.length) {\n return Helpers_allocateArrayFromCons(cons, 0);\n }\n else {\n const count_1 = ((count < 0) ? 0 : count) | 0;\n return array.slice(count_1);\n }\n}\nexport function skipWhile(predicate, array, cons) {\n let count = 0;\n while ((count < array.length) && predicate(array[count])) {\n count = ((count + 1) | 0);\n }\n if (count === array.length) {\n return Helpers_allocateArrayFromCons(cons, 0);\n }\n else {\n const count_1 = count | 0;\n return array.slice(count_1);\n }\n}\nexport function take(count, array, cons) {\n if (count < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n if (count > array.length) {\n throw new Error(\"count is greater than array length\\\\nParameter name: count\");\n }\n if (count === 0) {\n return Helpers_allocateArrayFromCons(cons, 0);\n }\n else {\n return array.slice(0, (0 + count));\n }\n}\nexport function takeWhile(predicate, array, cons) {\n let count = 0;\n while ((count < array.length) && predicate(array[count])) {\n count = ((count + 1) | 0);\n }\n if (count === 0) {\n return Helpers_allocateArrayFromCons(cons, 0);\n }\n else {\n const count_1 = count | 0;\n return array.slice(0, (0 + count_1));\n }\n}\nexport function addInPlace(x, array) {\n array.push(x);\n}\nexport function addRangeInPlace(range, array) {\n const enumerator = getEnumerator(range);\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n addInPlace(enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), array);\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n}\nexport function insertRangeInPlace(index, range, array) {\n let index_1;\n let i = index;\n const enumerator = getEnumerator(range);\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const x = enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n (index_1 = (i | 0), array.splice(index_1, 0, x));\n i = ((i + 1) | 0);\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n}\nexport function removeInPlace(item_1, array, eq) {\n const i = indexOf(array, item_1, void 0, void 0, eq) | 0;\n if (i > -1) {\n array.splice(i, 1);\n return true;\n }\n else {\n return false;\n }\n}\nexport function removeAllInPlace(predicate, array) {\n const countRemoveAll = (count) => {\n const i = (array.findIndex(predicate)) | 0;\n if (i > -1) {\n array.splice(i, 1);\n return (countRemoveAll(count) + 1) | 0;\n }\n else {\n return count | 0;\n }\n };\n return countRemoveAll(0) | 0;\n}\nexport function partition(f, source, cons) {\n const len = source.length | 0;\n const res1 = Helpers_allocateArrayFromCons(cons, len);\n const res2 = Helpers_allocateArrayFromCons(cons, len);\n let iTrue = 0;\n let iFalse = 0;\n for (let i = 0; i <= (len - 1); i++) {\n if (f(source[i])) {\n res1[iTrue] = source[i];\n iTrue = ((iTrue + 1) | 0);\n }\n else {\n res2[iFalse] = source[i];\n iFalse = ((iFalse + 1) | 0);\n }\n }\n return [truncate(iTrue, res1), truncate(iFalse, res2)];\n}\nexport function find(predicate, array) {\n const matchValue = array.find(predicate);\n if (matchValue == null) {\n return indexNotFound();\n }\n else {\n return value_2(matchValue);\n }\n}\nexport function tryFind(predicate, array) {\n return array.find(predicate);\n}\nexport function findIndex(predicate, array) {\n const matchValue = (array.findIndex(predicate)) | 0;\n if (matchValue > -1) {\n return matchValue | 0;\n }\n else {\n indexNotFound();\n return -1;\n }\n}\nexport function tryFindIndex(predicate, array) {\n const matchValue = (array.findIndex(predicate)) | 0;\n if (matchValue > -1) {\n return matchValue;\n }\n else {\n return void 0;\n }\n}\nexport function pick(chooser, array) {\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (i >= array.length) {\n return indexNotFound();\n }\n else {\n const matchValue = chooser(array[i]);\n if (matchValue != null) {\n return value_2(matchValue);\n }\n else {\n i_mut = (i + 1);\n continue loop;\n }\n }\n break;\n }\n };\n return loop(0);\n}\nexport function tryPick(chooser, array) {\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (i >= array.length) {\n return void 0;\n }\n else {\n const matchValue = chooser(array[i]);\n if (matchValue == null) {\n i_mut = (i + 1);\n continue loop;\n }\n else {\n return matchValue;\n }\n }\n break;\n }\n };\n return loop(0);\n}\nexport function findBack(predicate, array) {\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (i < 0) {\n return indexNotFound();\n }\n else if (predicate(array[i])) {\n return array[i];\n }\n else {\n i_mut = (i - 1);\n continue loop;\n }\n break;\n }\n };\n return loop(array.length - 1);\n}\nexport function tryFindBack(predicate, array) {\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (i < 0) {\n return void 0;\n }\n else if (predicate(array[i])) {\n return some(array[i]);\n }\n else {\n i_mut = (i - 1);\n continue loop;\n }\n break;\n }\n };\n return loop(array.length - 1);\n}\nexport function findLastIndex(predicate, array) {\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (i < 0) {\n return -1;\n }\n else if (predicate(array[i])) {\n return i | 0;\n }\n else {\n i_mut = (i - 1);\n continue loop;\n }\n break;\n }\n };\n return loop(array.length - 1) | 0;\n}\nexport function findIndexBack(predicate, array) {\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (i < 0) {\n indexNotFound();\n return -1;\n }\n else if (predicate(array[i])) {\n return i | 0;\n }\n else {\n i_mut = (i - 1);\n continue loop;\n }\n break;\n }\n };\n return loop(array.length - 1) | 0;\n}\nexport function tryFindIndexBack(predicate, array) {\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (i < 0) {\n return void 0;\n }\n else if (predicate(array[i])) {\n return i;\n }\n else {\n i_mut = (i - 1);\n continue loop;\n }\n break;\n }\n };\n return loop(array.length - 1);\n}\nexport function choose(chooser, array, cons) {\n const res = [];\n for (let i = 0; i <= (array.length - 1); i++) {\n const matchValue = chooser(array[i]);\n if (matchValue != null) {\n const y = value_2(matchValue);\n res.push(y);\n }\n }\n if (equals_1(cons, defaultOf())) {\n return res;\n }\n else {\n return map((x) => x, res, cons);\n }\n}\nexport function foldIndexed(folder, state, array) {\n return array.reduce(((delegateArg, delegateArg_1, delegateArg_2) => folder(delegateArg_2, delegateArg, delegateArg_1)), state);\n}\nexport function fold(folder, state, array) {\n return array.reduce((folder), state);\n}\nexport function iterate(action, array) {\n for (let i = 0; i <= (array.length - 1); i++) {\n action(array[i]);\n }\n}\nexport function iterateIndexed(action, array) {\n for (let i = 0; i <= (array.length - 1); i++) {\n action(i, array[i]);\n }\n}\nexport function iterate2(action, array1, array2) {\n if (array1.length !== array2.length) {\n differentLengths();\n }\n for (let i = 0; i <= (array1.length - 1); i++) {\n action(array1[i], array2[i]);\n }\n}\nexport function iterateIndexed2(action, array1, array2) {\n if (array1.length !== array2.length) {\n differentLengths();\n }\n for (let i = 0; i <= (array1.length - 1); i++) {\n action(i, array1[i], array2[i]);\n }\n}\nexport function isEmpty(array) {\n return array.length === 0;\n}\nexport function forAll(predicate, array) {\n return array.every(predicate);\n}\nexport function permute(f, array) {\n const size = array.length | 0;\n const res = array.slice();\n const checkFlags = new Array(size);\n iterateIndexed((i, x) => {\n const j = f(i) | 0;\n if ((j < 0) ? true : (j >= size)) {\n throw new Error(\"Not a valid permutation\");\n }\n res[j] = x;\n checkFlags[j] = 1;\n }, array);\n if (!(checkFlags.every((y) => (1 === y)))) {\n throw new Error(\"Not a valid permutation\");\n }\n return res;\n}\nexport function setSlice(target, lower, upper, source) {\n const lower_1 = defaultArg(lower, 0) | 0;\n const upper_1 = defaultArg(upper, -1) | 0;\n const length = (((upper_1 >= 0) ? upper_1 : (target.length - 1)) - lower_1) | 0;\n for (let i = 0; i <= length; i++) {\n target[i + lower_1] = source[i];\n }\n}\nexport function sortInPlaceBy(projection, xs, comparer) {\n xs.sort((x, y) => comparer.Compare(projection(x), projection(y)));\n}\nexport function sortInPlace(xs, comparer) {\n xs.sort((x, y) => comparer.Compare(x, y));\n}\nexport function sort(xs, comparer) {\n const xs_1 = xs.slice();\n xs_1.sort((x, y) => comparer.Compare(x, y));\n return xs_1;\n}\nexport function sortBy(projection, xs, comparer) {\n const xs_1 = xs.slice();\n xs_1.sort((x, y) => comparer.Compare(projection(x), projection(y)));\n return xs_1;\n}\nexport function sortDescending(xs, comparer) {\n const xs_1 = xs.slice();\n xs_1.sort((x, y) => (comparer.Compare(x, y) * -1));\n return xs_1;\n}\nexport function sortByDescending(projection, xs, comparer) {\n const xs_1 = xs.slice();\n xs_1.sort((x, y) => (comparer.Compare(projection(x), projection(y)) * -1));\n return xs_1;\n}\nexport function sortWith(comparer, xs) {\n const comparer_1 = comparer;\n const xs_1 = xs.slice();\n xs_1.sort(comparer_1);\n return xs_1;\n}\nexport function allPairs(xs, ys) {\n const len1 = xs.length | 0;\n const len2 = ys.length | 0;\n const res = new Array(len1 * len2);\n for (let i = 0; i <= (xs.length - 1); i++) {\n for (let j = 0; j <= (ys.length - 1); j++) {\n res[(i * len2) + j] = [xs[i], ys[j]];\n }\n }\n return res;\n}\nexport function unfold(generator, state) {\n const res = [];\n const loop = (state_1_mut) => {\n loop: while (true) {\n const state_1 = state_1_mut;\n const matchValue = generator(state_1);\n if (matchValue != null) {\n const x = value_2(matchValue)[0];\n const s = value_2(matchValue)[1];\n res.push(x);\n state_1_mut = s;\n continue loop;\n }\n break;\n }\n };\n loop(state);\n return res;\n}\nexport function unzip(array) {\n const len = array.length | 0;\n const res1 = new Array(len);\n const res2 = new Array(len);\n iterateIndexed((i, tupledArg) => {\n res1[i] = tupledArg[0];\n res2[i] = tupledArg[1];\n }, array);\n return [res1, res2];\n}\nexport function unzip3(array) {\n const len = array.length | 0;\n const res1 = new Array(len);\n const res2 = new Array(len);\n const res3 = new Array(len);\n iterateIndexed((i, tupledArg) => {\n res1[i] = tupledArg[0];\n res2[i] = tupledArg[1];\n res3[i] = tupledArg[2];\n }, array);\n return [res1, res2, res3];\n}\nexport function zip(array1, array2) {\n if (array1.length !== array2.length) {\n differentLengths();\n }\n const result = new Array(array1.length);\n for (let i = 0; i <= (array1.length - 1); i++) {\n result[i] = [array1[i], array2[i]];\n }\n return result;\n}\nexport function zip3(array1, array2, array3) {\n if ((array1.length !== array2.length) ? true : (array2.length !== array3.length)) {\n differentLengths();\n }\n const result = new Array(array1.length);\n for (let i = 0; i <= (array1.length - 1); i++) {\n result[i] = [array1[i], array2[i], array3[i]];\n }\n return result;\n}\nexport function chunkBySize(chunkSize, array) {\n if (chunkSize < 1) {\n throw new Error(\"The input must be positive.\\\\nParameter name: size\");\n }\n if (array.length === 0) {\n return [[]];\n }\n else {\n const result = [];\n for (let x = 0; x <= (~~Math.ceil(array.length / chunkSize) - 1); x++) {\n let slice;\n const start_1 = (x * chunkSize) | 0;\n slice = (array.slice(start_1, (start_1 + chunkSize)));\n result.push(slice);\n }\n return result;\n }\n}\nexport function splitAt(index, array) {\n if ((index < 0) ? true : (index > array.length)) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return [array.slice(0, (0 + index)), array.slice(index)];\n}\nexport function compareWith(comparer, source1, source2) {\n if (source1 == null) {\n if (source2 == null) {\n return 0;\n }\n else {\n return -1;\n }\n }\n else if (source2 == null) {\n return 1;\n }\n else {\n const len1 = source1.length | 0;\n const len2 = source2.length | 0;\n const len = ((len1 < len2) ? len1 : len2) | 0;\n let i = 0;\n let res = 0;\n while ((res === 0) && (i < len)) {\n res = (comparer(source1[i], source2[i]) | 0);\n i = ((i + 1) | 0);\n }\n if (res !== 0) {\n return res | 0;\n }\n else if (len1 > len2) {\n return 1;\n }\n else if (len1 < len2) {\n return -1;\n }\n else {\n return 0;\n }\n }\n}\nexport function compareTo(comparer, source1, source2) {\n if (source1 == null) {\n if (source2 == null) {\n return 0;\n }\n else {\n return -1;\n }\n }\n else if (source2 == null) {\n return 1;\n }\n else {\n const len1 = source1.length | 0;\n const len2 = source2.length | 0;\n if (len1 > len2) {\n return 1;\n }\n else if (len1 < len2) {\n return -1;\n }\n else {\n let i = 0;\n let res = 0;\n while ((res === 0) && (i < len1)) {\n res = (comparer(source1[i], source2[i]) | 0);\n i = ((i + 1) | 0);\n }\n return res | 0;\n }\n }\n}\nexport function equalsWith(equals, array1, array2) {\n if (array1 == null) {\n if (array2 == null) {\n return true;\n }\n else {\n return false;\n }\n }\n else if (array2 == null) {\n return false;\n }\n else {\n let i = 0;\n let result = true;\n const length1 = array1.length | 0;\n const length2 = array2.length | 0;\n if (length1 > length2) {\n return false;\n }\n else if (length1 < length2) {\n return false;\n }\n else {\n while ((i < length1) && result) {\n result = equals(array1[i], array2[i]);\n i = ((i + 1) | 0);\n }\n return result;\n }\n }\n}\nexport function exactlyOne(array) {\n switch (array.length) {\n case 1:\n return array[0];\n case 0:\n throw new Error(\"The input sequence was empty\\\\nParameter name: array\");\n default:\n throw new Error(\"Input array too long\\\\nParameter name: array\");\n }\n}\nexport function tryExactlyOne(array) {\n if (array.length === 1) {\n return some(array[0]);\n }\n else {\n return void 0;\n }\n}\nexport function head(array) {\n if (array.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n else {\n return array[0];\n }\n}\nexport function tryHead(array) {\n if (array.length === 0) {\n return void 0;\n }\n else {\n return some(array[0]);\n }\n}\nexport function tail(array) {\n if (array.length === 0) {\n throw new Error(\"Not enough elements\\\\nParameter name: array\");\n }\n return array.slice(1);\n}\nexport function item(index, array) {\n return array[index];\n}\nexport function tryItem(index, array) {\n if ((index < 0) ? true : (index >= array.length)) {\n return void 0;\n }\n else {\n return some(array[index]);\n }\n}\nexport function foldBackIndexed(folder, array, state) {\n return array.reduceRight(((delegateArg, delegateArg_1, delegateArg_2) => folder(delegateArg_2, delegateArg_1, delegateArg)), state);\n}\nexport function foldBack(folder, array, state) {\n return array.reduceRight(((delegateArg, delegateArg_1) => folder(delegateArg_1, delegateArg)), state);\n}\nexport function foldIndexed2(folder, state, array1, array2) {\n let acc = state;\n if (array1.length !== array2.length) {\n throw new Error(\"Arrays have different lengths\");\n }\n for (let i = 0; i <= (array1.length - 1); i++) {\n acc = folder(i, acc, array1[i], array2[i]);\n }\n return acc;\n}\nexport function fold2(folder, state, array1, array2) {\n return foldIndexed2((_arg, acc, x, y) => folder(acc, x, y), state, array1, array2);\n}\nexport function foldBackIndexed2(folder, array1, array2, state) {\n let acc = state;\n if (array1.length !== array2.length) {\n differentLengths();\n }\n const size = array1.length | 0;\n for (let i = 1; i <= size; i++) {\n acc = folder(i - 1, array1[size - i], array2[size - i], acc);\n }\n return acc;\n}\nexport function foldBack2(f, array1, array2, state) {\n return foldBackIndexed2((_arg, x, y, acc) => f(x, y, acc), array1, array2, state);\n}\nexport function reduce(reduction, array) {\n if (array.length === 0) {\n throw new Error(\"The input array was empty\");\n }\n const reduction_1 = reduction;\n return array.reduce(reduction_1);\n}\nexport function reduceBack(reduction, array) {\n if (array.length === 0) {\n throw new Error(\"The input array was empty\");\n }\n const reduction_1 = reduction;\n return array.reduceRight(reduction_1);\n}\nexport function forAll2(predicate, array1, array2) {\n return fold2((acc, x, y) => (acc && predicate(x, y)), true, array1, array2);\n}\nexport function existsOffset(predicate_mut, array_mut, index_mut) {\n existsOffset: while (true) {\n const predicate = predicate_mut, array = array_mut, index = index_mut;\n if (index === array.length) {\n return false;\n }\n else if (predicate(array[index])) {\n return true;\n }\n else {\n predicate_mut = predicate;\n array_mut = array;\n index_mut = (index + 1);\n continue existsOffset;\n }\n break;\n }\n}\nexport function exists(predicate, array) {\n return existsOffset(predicate, array, 0);\n}\nexport function existsOffset2(predicate_mut, array1_mut, array2_mut, index_mut) {\n existsOffset2: while (true) {\n const predicate = predicate_mut, array1 = array1_mut, array2 = array2_mut, index = index_mut;\n if (index === array1.length) {\n return false;\n }\n else if (predicate(array1[index], array2[index])) {\n return true;\n }\n else {\n predicate_mut = predicate;\n array1_mut = array1;\n array2_mut = array2;\n index_mut = (index + 1);\n continue existsOffset2;\n }\n break;\n }\n}\nexport function exists2(predicate, array1, array2) {\n if (array1.length !== array2.length) {\n differentLengths();\n }\n return existsOffset2(predicate, array1, array2, 0);\n}\nexport function sum(array, adder) {\n let acc = adder.GetZero();\n for (let i = 0; i <= (array.length - 1); i++) {\n acc = adder.Add(acc, array[i]);\n }\n return acc;\n}\nexport function sumBy(projection, array, adder) {\n let acc = adder.GetZero();\n for (let i = 0; i <= (array.length - 1); i++) {\n acc = adder.Add(acc, projection(array[i]));\n }\n return acc;\n}\nexport function maxBy(projection, xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(projection(y), projection(x)) > 0) ? y : x), xs);\n}\nexport function max(xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(y, x) > 0) ? y : x), xs);\n}\nexport function minBy(projection, xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(projection(y), projection(x)) > 0) ? x : y), xs);\n}\nexport function min(xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(y, x) > 0) ? x : y), xs);\n}\nexport function average(array, averager) {\n if (array.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n let total = averager.GetZero();\n for (let i = 0; i <= (array.length - 1); i++) {\n total = averager.Add(total, array[i]);\n }\n return averager.DivideByInt(total, array.length);\n}\nexport function averageBy(projection, array, averager) {\n if (array.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n let total = averager.GetZero();\n for (let i = 0; i <= (array.length - 1); i++) {\n total = averager.Add(total, projection(array[i]));\n }\n return averager.DivideByInt(total, array.length);\n}\nexport function windowed(windowSize, source) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n }\n let res;\n const len = max_1(0, (source.length - windowSize) + 1) | 0;\n res = (new Array(len));\n for (let i = windowSize; i <= source.length; i++) {\n res[i - windowSize] = source.slice(i - windowSize, (i - 1) + 1);\n }\n return res;\n}\nexport function splitInto(chunks, array) {\n if (chunks < 1) {\n throw new Error(\"The input must be positive.\\\\nParameter name: chunks\");\n }\n if (array.length === 0) {\n return [[]];\n }\n else {\n const result = [];\n const chunks_1 = min_1(chunks, array.length) | 0;\n const minChunkSize = ~~(array.length / chunks_1) | 0;\n const chunksWithExtraItem = (array.length % chunks_1) | 0;\n for (let i = 0; i <= (chunks_1 - 1); i++) {\n const chunkSize = ((i < chunksWithExtraItem) ? (minChunkSize + 1) : minChunkSize) | 0;\n let slice;\n const start_1 = ((i * minChunkSize) + min_1(chunksWithExtraItem, i)) | 0;\n slice = (array.slice(start_1, (start_1 + chunkSize)));\n result.push(slice);\n }\n return result;\n }\n}\nexport function transpose(arrays, cons) {\n const arrays_1 = Array.isArray(arrays) ? arrays : (Array.from(arrays));\n const len = arrays_1.length | 0;\n if (len === 0) {\n return new Array(0);\n }\n else {\n const firstArray = arrays_1[0];\n const lenInner = firstArray.length | 0;\n if (!forAll((a) => (a.length === lenInner), arrays_1)) {\n differentLengths();\n }\n const result = new Array(lenInner);\n for (let i = 0; i <= (lenInner - 1); i++) {\n result[i] = Helpers_allocateArrayFromCons(cons, len);\n for (let j = 0; j <= (len - 1); j++) {\n result[i][j] = arrays_1[j][i];\n }\n }\n return result;\n }\n}\nexport function insertAt(index, y, xs, cons) {\n const len = xs.length | 0;\n if ((index < 0) ? true : (index > len)) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n const target = Helpers_allocateArrayFromCons(cons, len + 1);\n for (let i = 0; i <= (index - 1); i++) {\n target[i] = xs[i];\n }\n target[index] = y;\n for (let i_1 = index; i_1 <= (len - 1); i_1++) {\n target[i_1 + 1] = xs[i_1];\n }\n return target;\n}\nexport function insertManyAt(index, ys, xs, cons) {\n const len = xs.length | 0;\n if ((index < 0) ? true : (index > len)) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n const ys_1 = Array.from(ys);\n const len2 = ys_1.length | 0;\n const target = Helpers_allocateArrayFromCons(cons, len + len2);\n for (let i = 0; i <= (index - 1); i++) {\n target[i] = xs[i];\n }\n for (let i_1 = 0; i_1 <= (len2 - 1); i_1++) {\n target[index + i_1] = ys_1[i_1];\n }\n for (let i_2 = index; i_2 <= (len - 1); i_2++) {\n target[i_2 + len2] = xs[i_2];\n }\n return target;\n}\nexport function removeAt(index, xs) {\n if ((index < 0) ? true : (index >= xs.length)) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n let i = -1;\n return filter((_arg) => {\n i = ((i + 1) | 0);\n return i !== index;\n }, xs);\n}\nexport function removeManyAt(index, count, xs) {\n let i = -1;\n let status = -1;\n const ys = filter((_arg) => {\n i = ((i + 1) | 0);\n if (i === index) {\n status = 0;\n return false;\n }\n else if (i > index) {\n if (i < (index + count)) {\n return false;\n }\n else {\n status = 1;\n return true;\n }\n }\n else {\n return true;\n }\n }, xs);\n const status_1 = (((status === 0) && ((i + 1) === (index + count))) ? 1 : status) | 0;\n if (status_1 < 1) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + ((status_1 < 0) ? \"index\" : \"count\"));\n }\n return ys;\n}\nexport function updateAt(index, y, xs, cons) {\n const len = xs.length | 0;\n if ((index < 0) ? true : (index >= len)) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n const target = Helpers_allocateArrayFromCons(cons, len);\n for (let i = 0; i <= (len - 1); i++) {\n target[i] = ((i === index) ? y : xs[i]);\n }\n return target;\n}\n","import { join } from \"./String.js\";\nimport { defaultArg, some, value as value_1 } from \"./Option.js\";\nimport { disposeSafe, isArrayLike, defaultOf, toIterator, getEnumerator, compare, structuralHash, equals } from \"./Util.js\";\nimport { Record } from \"./Types.js\";\nimport { class_type, record_type, option_type } from \"./Reflection.js\";\nimport { SR_inputSequenceTooLong, SR_inputSequenceEmpty, SR_inputMustBeNonNegative, SR_notEnoughElements, SR_differentLengths, SR_keyNotFoundAlt, SR_indexOutOfBounds, SR_inputWasEmpty } from \"./Global.js\";\nimport { transpose as transpose_1, splitInto as splitInto_1, windowed as windowed_1, pairwise as pairwise_1, chunkBySize as chunkBySize_1, map as map_1, permute as permute_1, tryFindIndexBack as tryFindIndexBack_1, tryFindBack as tryFindBack_1, scanBack as scanBack_1, foldBack2 as foldBack2_1, foldBack as foldBack_1, fill } from \"./Array.js\";\nexport class FSharpList extends Record {\n constructor(head, tail) {\n super();\n this.head = head;\n this.tail = tail;\n }\n toString() {\n const xs = this;\n return (\"[\" + join(\"; \", xs)) + \"]\";\n }\n Equals(other) {\n const xs = this;\n if (xs === other) {\n return true;\n }\n else {\n const loop = (xs_1_mut, ys_1_mut) => {\n loop: while (true) {\n const xs_1 = xs_1_mut, ys_1 = ys_1_mut;\n const matchValue = xs_1.tail;\n const matchValue_1 = ys_1.tail;\n if (matchValue != null) {\n if (matchValue_1 != null) {\n const xt = value_1(matchValue);\n const yt = value_1(matchValue_1);\n if (equals(xs_1.head, ys_1.head)) {\n xs_1_mut = xt;\n ys_1_mut = yt;\n continue loop;\n }\n else {\n return false;\n }\n }\n else {\n return false;\n }\n }\n else if (matchValue_1 != null) {\n return false;\n }\n else {\n return true;\n }\n break;\n }\n };\n return loop(xs, other);\n }\n }\n GetHashCode() {\n const xs = this;\n const loop = (i_mut, h_mut, xs_1_mut) => {\n loop: while (true) {\n const i = i_mut, h = h_mut, xs_1 = xs_1_mut;\n const matchValue = xs_1.tail;\n if (matchValue != null) {\n const t = value_1(matchValue);\n if (i > 18) {\n return h | 0;\n }\n else {\n i_mut = (i + 1);\n h_mut = (((h << 1) + structuralHash(xs_1.head)) + (631 * i));\n xs_1_mut = t;\n continue loop;\n }\n }\n else {\n return h | 0;\n }\n break;\n }\n };\n return loop(0, 0, xs) | 0;\n }\n toJSON() {\n const this$ = this;\n return Array.from(this$);\n }\n CompareTo(other) {\n const xs = this;\n const loop = (xs_1_mut, ys_1_mut) => {\n loop: while (true) {\n const xs_1 = xs_1_mut, ys_1 = ys_1_mut;\n const matchValue = xs_1.tail;\n const matchValue_1 = ys_1.tail;\n if (matchValue != null) {\n if (matchValue_1 != null) {\n const xt = value_1(matchValue);\n const yt = value_1(matchValue_1);\n const c = compare(xs_1.head, ys_1.head) | 0;\n if (c === 0) {\n xs_1_mut = xt;\n ys_1_mut = yt;\n continue loop;\n }\n else {\n return c | 0;\n }\n }\n else {\n return 1;\n }\n }\n else if (matchValue_1 != null) {\n return -1;\n }\n else {\n return 0;\n }\n break;\n }\n };\n return loop(xs, other) | 0;\n }\n GetEnumerator() {\n const xs = this;\n return ListEnumerator$1_$ctor_3002E699(xs);\n }\n [Symbol.iterator]() {\n return toIterator(getEnumerator(this));\n }\n \"System.Collections.IEnumerable.GetEnumerator\"() {\n const xs = this;\n return getEnumerator(xs);\n }\n}\nexport function FSharpList_$reflection(gen0) {\n return record_type(\"ListModule.FSharpList\", [gen0], FSharpList, () => [[\"head\", gen0], [\"tail\", option_type(FSharpList_$reflection(gen0))]]);\n}\nexport class ListEnumerator$1 {\n constructor(xs) {\n this.xs = xs;\n this.it = this.xs;\n this.current = defaultOf();\n }\n \"System.Collections.Generic.IEnumerator`1.get_Current\"() {\n const _ = this;\n return _.current;\n }\n \"System.Collections.IEnumerator.get_Current\"() {\n const _ = this;\n return _.current;\n }\n \"System.Collections.IEnumerator.MoveNext\"() {\n const _ = this;\n const matchValue = _.it.tail;\n if (matchValue != null) {\n const t = value_1(matchValue);\n _.current = _.it.head;\n _.it = t;\n return true;\n }\n else {\n return false;\n }\n }\n \"System.Collections.IEnumerator.Reset\"() {\n const _ = this;\n _.it = _.xs;\n _.current = defaultOf();\n }\n Dispose() {\n }\n}\nexport function ListEnumerator$1_$reflection(gen0) {\n return class_type(\"ListModule.ListEnumerator`1\", [gen0], ListEnumerator$1);\n}\nexport function ListEnumerator$1_$ctor_3002E699(xs) {\n return new ListEnumerator$1(xs);\n}\nexport function FSharpList_get_Empty() {\n return new FSharpList(defaultOf(), void 0);\n}\nexport function FSharpList_Cons_305B8EAC(x, xs) {\n return new FSharpList(x, xs);\n}\nexport function FSharpList__get_IsEmpty(xs) {\n return xs.tail == null;\n}\nexport function FSharpList__get_Length(xs) {\n const loop = (i_mut, xs_1_mut) => {\n loop: while (true) {\n const i = i_mut, xs_1 = xs_1_mut;\n const matchValue = xs_1.tail;\n if (matchValue != null) {\n i_mut = (i + 1);\n xs_1_mut = value_1(matchValue);\n continue loop;\n }\n else {\n return i | 0;\n }\n break;\n }\n };\n return loop(0, xs) | 0;\n}\nexport function FSharpList__get_Head(xs) {\n const matchValue = xs.tail;\n if (matchValue != null) {\n return xs.head;\n }\n else {\n throw new Error((SR_inputWasEmpty + \"\\\\nParameter name: \") + \"list\");\n }\n}\nexport function FSharpList__get_Tail(xs) {\n const matchValue = xs.tail;\n if (matchValue != null) {\n return value_1(matchValue);\n }\n else {\n throw new Error((SR_inputWasEmpty + \"\\\\nParameter name: \") + \"list\");\n }\n}\nexport function FSharpList__get_Item_Z524259A4(xs, index) {\n const loop = (i_mut, xs_1_mut) => {\n loop: while (true) {\n const i = i_mut, xs_1 = xs_1_mut;\n const matchValue = xs_1.tail;\n if (matchValue != null) {\n if (i === index) {\n return xs_1.head;\n }\n else {\n i_mut = (i + 1);\n xs_1_mut = value_1(matchValue);\n continue loop;\n }\n }\n else {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n break;\n }\n };\n return loop(0, xs);\n}\nexport function indexNotFound() {\n throw new Error(SR_keyNotFoundAlt);\n}\nexport function empty() {\n return FSharpList_get_Empty();\n}\nexport function cons(x, xs) {\n return FSharpList_Cons_305B8EAC(x, xs);\n}\nexport function singleton(x) {\n return FSharpList_Cons_305B8EAC(x, FSharpList_get_Empty());\n}\nexport function isEmpty(xs) {\n return FSharpList__get_IsEmpty(xs);\n}\nexport function length(xs) {\n return FSharpList__get_Length(xs);\n}\nexport function head(xs) {\n return FSharpList__get_Head(xs);\n}\nexport function tryHead(xs) {\n if (FSharpList__get_IsEmpty(xs)) {\n return void 0;\n }\n else {\n return some(FSharpList__get_Head(xs));\n }\n}\nexport function tail(xs) {\n return FSharpList__get_Tail(xs);\n}\nexport function tryLast(xs_mut) {\n tryLast: while (true) {\n const xs = xs_mut;\n if (FSharpList__get_IsEmpty(xs)) {\n return void 0;\n }\n else {\n const t = FSharpList__get_Tail(xs);\n if (FSharpList__get_IsEmpty(t)) {\n return some(FSharpList__get_Head(xs));\n }\n else {\n xs_mut = t;\n continue tryLast;\n }\n }\n break;\n }\n}\nexport function last(xs) {\n const matchValue = tryLast(xs);\n if (matchValue == null) {\n throw new Error(SR_inputWasEmpty);\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function compareWith(comparer, xs, ys) {\n const loop = (xs_1_mut, ys_1_mut) => {\n loop: while (true) {\n const xs_1 = xs_1_mut, ys_1 = ys_1_mut;\n const matchValue = FSharpList__get_IsEmpty(xs_1);\n const matchValue_1 = FSharpList__get_IsEmpty(ys_1);\n if (matchValue) {\n if (matchValue_1) {\n return 0;\n }\n else {\n return -1;\n }\n }\n else if (matchValue_1) {\n return 1;\n }\n else {\n const c = comparer(FSharpList__get_Head(xs_1), FSharpList__get_Head(ys_1)) | 0;\n if (c === 0) {\n xs_1_mut = FSharpList__get_Tail(xs_1);\n ys_1_mut = FSharpList__get_Tail(ys_1);\n continue loop;\n }\n else {\n return c | 0;\n }\n }\n break;\n }\n };\n return loop(xs, ys) | 0;\n}\nexport function toArray(xs) {\n const len = FSharpList__get_Length(xs) | 0;\n const res = fill(new Array(len), 0, len, null);\n const loop = (i_mut, xs_1_mut) => {\n loop: while (true) {\n const i = i_mut, xs_1 = xs_1_mut;\n if (!FSharpList__get_IsEmpty(xs_1)) {\n res[i] = FSharpList__get_Head(xs_1);\n i_mut = (i + 1);\n xs_1_mut = FSharpList__get_Tail(xs_1);\n continue loop;\n }\n break;\n }\n };\n loop(0, xs);\n return res;\n}\nexport function fold(folder, state, xs) {\n let acc = state;\n let xs_1 = xs;\n while (!FSharpList__get_IsEmpty(xs_1)) {\n acc = folder(acc, head(xs_1));\n xs_1 = FSharpList__get_Tail(xs_1);\n }\n return acc;\n}\nexport function reverse(xs) {\n return fold((acc, x) => FSharpList_Cons_305B8EAC(x, acc), FSharpList_get_Empty(), xs);\n}\nexport function foldBack(folder, xs, state) {\n return foldBack_1(folder, toArray(xs), state);\n}\nexport function foldIndexed(folder, state, xs) {\n const loop = (i_mut, acc_mut, xs_1_mut) => {\n loop: while (true) {\n const i = i_mut, acc = acc_mut, xs_1 = xs_1_mut;\n if (FSharpList__get_IsEmpty(xs_1)) {\n return acc;\n }\n else {\n i_mut = (i + 1);\n acc_mut = folder(i, acc, FSharpList__get_Head(xs_1));\n xs_1_mut = FSharpList__get_Tail(xs_1);\n continue loop;\n }\n break;\n }\n };\n return loop(0, state, xs);\n}\nexport function fold2(folder, state, xs, ys) {\n let acc = state;\n let xs_1 = xs;\n let ys_1 = ys;\n while (!FSharpList__get_IsEmpty(xs_1) && !FSharpList__get_IsEmpty(ys_1)) {\n acc = folder(acc, FSharpList__get_Head(xs_1), FSharpList__get_Head(ys_1));\n xs_1 = FSharpList__get_Tail(xs_1);\n ys_1 = FSharpList__get_Tail(ys_1);\n }\n return acc;\n}\nexport function foldBack2(folder, xs, ys, state) {\n return foldBack2_1(folder, toArray(xs), toArray(ys), state);\n}\nexport function unfold(gen, state) {\n const loop = (acc_mut, node_mut) => {\n let t;\n loop: while (true) {\n const acc = acc_mut, node = node_mut;\n const matchValue = gen(acc);\n if (matchValue != null) {\n acc_mut = value_1(matchValue)[1];\n node_mut = ((t = (new FSharpList(value_1(matchValue)[0], void 0)), (node.tail = t, t)));\n continue loop;\n }\n else {\n return node;\n }\n break;\n }\n };\n const root = FSharpList_get_Empty();\n const node_1 = loop(state, root);\n const t_2 = FSharpList_get_Empty();\n node_1.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function iterate(action, xs) {\n fold((unitVar, x) => {\n action(x);\n }, void 0, xs);\n}\nexport function iterate2(action, xs, ys) {\n fold2((unitVar, x, y) => {\n action(x, y);\n }, void 0, xs, ys);\n}\nexport function iterateIndexed(action, xs) {\n fold((i, x) => {\n action(i, x);\n return (i + 1) | 0;\n }, 0, xs);\n}\nexport function iterateIndexed2(action, xs, ys) {\n fold2((i, x, y) => {\n action(i, x, y);\n return (i + 1) | 0;\n }, 0, xs, ys);\n}\nexport function toSeq(xs) {\n return xs;\n}\nexport function ofArrayWithTail(xs, tail_1) {\n let res = tail_1;\n for (let i = xs.length - 1; i >= 0; i--) {\n res = FSharpList_Cons_305B8EAC(xs[i], res);\n }\n return res;\n}\nexport function ofArray(xs) {\n return ofArrayWithTail(xs, FSharpList_get_Empty());\n}\nexport function ofSeq(xs) {\n let xs_3, t;\n if (isArrayLike(xs)) {\n return ofArray(xs);\n }\n else if (xs instanceof FSharpList) {\n return xs;\n }\n else {\n const root = FSharpList_get_Empty();\n let node = root;\n const enumerator = getEnumerator(xs);\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const x = enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n node = ((xs_3 = node, (t = (new FSharpList(x, void 0)), (xs_3.tail = t, t))));\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n const xs_5 = node;\n const t_2 = FSharpList_get_Empty();\n xs_5.tail = t_2;\n return FSharpList__get_Tail(root);\n }\n}\nexport function concat(lists) {\n const root = FSharpList_get_Empty();\n let node = root;\n const action = (xs) => {\n node = fold((acc, x) => {\n const t = new FSharpList(x, void 0);\n acc.tail = t;\n return t;\n }, node, xs);\n };\n if (isArrayLike(lists)) {\n const xs_3 = lists;\n xs_3.forEach(action);\n }\n else if (lists instanceof FSharpList) {\n iterate(action, lists);\n }\n else {\n const enumerator = getEnumerator(lists);\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n action(enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n }\n const xs_6 = node;\n const t_2 = FSharpList_get_Empty();\n xs_6.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function scan(folder, state, xs) {\n let xs_4, t_2;\n const root = FSharpList_get_Empty();\n let node;\n const t = new FSharpList(state, void 0);\n root.tail = t;\n node = t;\n let acc = state;\n let xs_3 = xs;\n while (!FSharpList__get_IsEmpty(xs_3)) {\n acc = folder(acc, FSharpList__get_Head(xs_3));\n node = ((xs_4 = node, (t_2 = (new FSharpList(acc, void 0)), (xs_4.tail = t_2, t_2))));\n xs_3 = FSharpList__get_Tail(xs_3);\n }\n const xs_6 = node;\n const t_4 = FSharpList_get_Empty();\n xs_6.tail = t_4;\n return FSharpList__get_Tail(root);\n}\nexport function scanBack(folder, xs, state) {\n return ofArray(scanBack_1(folder, toArray(xs), state));\n}\nexport function append(xs, ys) {\n return fold((acc, x) => FSharpList_Cons_305B8EAC(x, acc), ys, reverse(xs));\n}\nexport function collect(mapping, xs) {\n let xs_1, t;\n const root = FSharpList_get_Empty();\n let node = root;\n let ys = xs;\n while (!FSharpList__get_IsEmpty(ys)) {\n let zs = mapping(FSharpList__get_Head(ys));\n while (!FSharpList__get_IsEmpty(zs)) {\n node = ((xs_1 = node, (t = (new FSharpList(FSharpList__get_Head(zs), void 0)), (xs_1.tail = t, t))));\n zs = FSharpList__get_Tail(zs);\n }\n ys = FSharpList__get_Tail(ys);\n }\n const xs_3 = node;\n const t_2 = FSharpList_get_Empty();\n xs_3.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function mapIndexed(mapping, xs) {\n const root = FSharpList_get_Empty();\n const node = foldIndexed((i, acc, x) => {\n const t = new FSharpList(mapping(i, x), void 0);\n acc.tail = t;\n return t;\n }, root, xs);\n const t_2 = FSharpList_get_Empty();\n node.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function map(mapping, xs) {\n const root = FSharpList_get_Empty();\n const node = fold((acc, x) => {\n const t = new FSharpList(mapping(x), void 0);\n acc.tail = t;\n return t;\n }, root, xs);\n const t_2 = FSharpList_get_Empty();\n node.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function indexed(xs) {\n return mapIndexed((i, x) => [i, x], xs);\n}\nexport function map2(mapping, xs, ys) {\n const root = FSharpList_get_Empty();\n const node = fold2((acc, x, y) => {\n const t = new FSharpList(mapping(x, y), void 0);\n acc.tail = t;\n return t;\n }, root, xs, ys);\n const t_2 = FSharpList_get_Empty();\n node.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function mapIndexed2(mapping, xs, ys) {\n const loop = (i_mut, acc_mut, xs_1_mut, ys_1_mut) => {\n let t;\n loop: while (true) {\n const i = i_mut, acc = acc_mut, xs_1 = xs_1_mut, ys_1 = ys_1_mut;\n if (FSharpList__get_IsEmpty(xs_1) ? true : FSharpList__get_IsEmpty(ys_1)) {\n return acc;\n }\n else {\n i_mut = (i + 1);\n acc_mut = ((t = (new FSharpList(mapping(i, FSharpList__get_Head(xs_1), FSharpList__get_Head(ys_1)), void 0)), (acc.tail = t, t)));\n xs_1_mut = FSharpList__get_Tail(xs_1);\n ys_1_mut = FSharpList__get_Tail(ys_1);\n continue loop;\n }\n break;\n }\n };\n const root = FSharpList_get_Empty();\n const node_1 = loop(0, root, xs, ys);\n const t_2 = FSharpList_get_Empty();\n node_1.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function map3(mapping, xs, ys, zs) {\n const loop = (acc_mut, xs_1_mut, ys_1_mut, zs_1_mut) => {\n let t;\n loop: while (true) {\n const acc = acc_mut, xs_1 = xs_1_mut, ys_1 = ys_1_mut, zs_1 = zs_1_mut;\n if ((FSharpList__get_IsEmpty(xs_1) ? true : FSharpList__get_IsEmpty(ys_1)) ? true : FSharpList__get_IsEmpty(zs_1)) {\n return acc;\n }\n else {\n acc_mut = ((t = (new FSharpList(mapping(FSharpList__get_Head(xs_1), FSharpList__get_Head(ys_1), FSharpList__get_Head(zs_1)), void 0)), (acc.tail = t, t)));\n xs_1_mut = FSharpList__get_Tail(xs_1);\n ys_1_mut = FSharpList__get_Tail(ys_1);\n zs_1_mut = FSharpList__get_Tail(zs_1);\n continue loop;\n }\n break;\n }\n };\n const root = FSharpList_get_Empty();\n const node_1 = loop(root, xs, ys, zs);\n const t_2 = FSharpList_get_Empty();\n node_1.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function mapFold(mapping, state, xs) {\n const root = FSharpList_get_Empty();\n const patternInput_1 = fold((tupledArg, x) => {\n let t;\n const patternInput = mapping(tupledArg[1], x);\n return [(t = (new FSharpList(patternInput[0], void 0)), (tupledArg[0].tail = t, t)), patternInput[1]];\n }, [root, state], xs);\n const t_2 = FSharpList_get_Empty();\n patternInput_1[0].tail = t_2;\n return [FSharpList__get_Tail(root), patternInput_1[1]];\n}\nexport function mapFoldBack(mapping, xs, state) {\n return mapFold((acc, x) => mapping(x, acc), state, reverse(xs));\n}\nexport function tryPick(f, xs) {\n const loop = (xs_1_mut) => {\n loop: while (true) {\n const xs_1 = xs_1_mut;\n if (FSharpList__get_IsEmpty(xs_1)) {\n return void 0;\n }\n else {\n const matchValue = f(FSharpList__get_Head(xs_1));\n if (matchValue == null) {\n xs_1_mut = FSharpList__get_Tail(xs_1);\n continue loop;\n }\n else {\n return matchValue;\n }\n }\n break;\n }\n };\n return loop(xs);\n}\nexport function pick(f, xs) {\n const matchValue = tryPick(f, xs);\n if (matchValue == null) {\n return indexNotFound();\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function tryFind(f, xs) {\n return tryPick((x) => (f(x) ? some(x) : void 0), xs);\n}\nexport function find(f, xs) {\n const matchValue = tryFind(f, xs);\n if (matchValue == null) {\n return indexNotFound();\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function tryFindBack(f, xs) {\n return tryFindBack_1(f, toArray(xs));\n}\nexport function findBack(f, xs) {\n const matchValue = tryFindBack(f, xs);\n if (matchValue == null) {\n return indexNotFound();\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function tryFindIndex(f, xs) {\n const loop = (i_mut, xs_1_mut) => {\n loop: while (true) {\n const i = i_mut, xs_1 = xs_1_mut;\n if (FSharpList__get_IsEmpty(xs_1)) {\n return void 0;\n }\n else if (f(FSharpList__get_Head(xs_1))) {\n return i;\n }\n else {\n i_mut = (i + 1);\n xs_1_mut = FSharpList__get_Tail(xs_1);\n continue loop;\n }\n break;\n }\n };\n return loop(0, xs);\n}\nexport function findIndex(f, xs) {\n const matchValue = tryFindIndex(f, xs);\n if (matchValue == null) {\n indexNotFound();\n return -1;\n }\n else {\n return value_1(matchValue) | 0;\n }\n}\nexport function tryFindIndexBack(f, xs) {\n return tryFindIndexBack_1(f, toArray(xs));\n}\nexport function findIndexBack(f, xs) {\n const matchValue = tryFindIndexBack(f, xs);\n if (matchValue == null) {\n indexNotFound();\n return -1;\n }\n else {\n return value_1(matchValue) | 0;\n }\n}\nexport function tryItem(n, xs) {\n const loop = (i_mut, xs_1_mut) => {\n loop: while (true) {\n const i = i_mut, xs_1 = xs_1_mut;\n if (FSharpList__get_IsEmpty(xs_1)) {\n return void 0;\n }\n else if (i === n) {\n return some(FSharpList__get_Head(xs_1));\n }\n else {\n i_mut = (i + 1);\n xs_1_mut = FSharpList__get_Tail(xs_1);\n continue loop;\n }\n break;\n }\n };\n return loop(0, xs);\n}\nexport function item(n, xs) {\n return FSharpList__get_Item_Z524259A4(xs, n);\n}\nexport function filter(f, xs) {\n const root = FSharpList_get_Empty();\n const node = fold((acc, x) => {\n if (f(x)) {\n const t = new FSharpList(x, void 0);\n acc.tail = t;\n return t;\n }\n else {\n return acc;\n }\n }, root, xs);\n const t_2 = FSharpList_get_Empty();\n node.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function partition(f, xs) {\n const matchValue = FSharpList_get_Empty();\n const root2 = FSharpList_get_Empty();\n const root1 = matchValue;\n const patternInput_1 = fold((tupledArg, x) => {\n let t, t_2;\n const lacc = tupledArg[0];\n const racc = tupledArg[1];\n if (f(x)) {\n return [(t = (new FSharpList(x, void 0)), (lacc.tail = t, t)), racc];\n }\n else {\n return [lacc, (t_2 = (new FSharpList(x, void 0)), (racc.tail = t_2, t_2))];\n }\n }, [root1, root2], xs);\n const t_4 = FSharpList_get_Empty();\n patternInput_1[0].tail = t_4;\n const t_5 = FSharpList_get_Empty();\n patternInput_1[1].tail = t_5;\n return [FSharpList__get_Tail(root1), FSharpList__get_Tail(root2)];\n}\nexport function choose(f, xs) {\n const root = FSharpList_get_Empty();\n const node = fold((acc, x) => {\n const matchValue = f(x);\n if (matchValue == null) {\n return acc;\n }\n else {\n const t = new FSharpList(value_1(matchValue), void 0);\n acc.tail = t;\n return t;\n }\n }, root, xs);\n const t_2 = FSharpList_get_Empty();\n node.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function contains(value, xs, eq) {\n return tryFindIndex((v) => eq.Equals(value, v), xs) != null;\n}\nexport function initialize(n, f) {\n let xs, t;\n const root = FSharpList_get_Empty();\n let node = root;\n for (let i = 0; i <= (n - 1); i++) {\n node = ((xs = node, (t = (new FSharpList(f(i), void 0)), (xs.tail = t, t))));\n }\n const xs_2 = node;\n const t_2 = FSharpList_get_Empty();\n xs_2.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function replicate(n, x) {\n return initialize(n, (_arg) => x);\n}\nexport function reduce(f, xs) {\n if (FSharpList__get_IsEmpty(xs)) {\n throw new Error(SR_inputWasEmpty);\n }\n else {\n return fold(f, head(xs), tail(xs));\n }\n}\nexport function reduceBack(f, xs) {\n if (FSharpList__get_IsEmpty(xs)) {\n throw new Error(SR_inputWasEmpty);\n }\n else {\n return foldBack(f, tail(xs), head(xs));\n }\n}\nexport function forAll(f, xs) {\n return fold((acc, x) => (acc && f(x)), true, xs);\n}\nexport function forAll2(f, xs, ys) {\n return fold2((acc, x, y) => (acc && f(x, y)), true, xs, ys);\n}\nexport function exists(f, xs) {\n return tryFindIndex(f, xs) != null;\n}\nexport function exists2(f_mut, xs_mut, ys_mut) {\n exists2: while (true) {\n const f = f_mut, xs = xs_mut, ys = ys_mut;\n const matchValue = FSharpList__get_IsEmpty(xs);\n const matchValue_1 = FSharpList__get_IsEmpty(ys);\n let matchResult;\n if (matchValue) {\n if (matchValue_1) {\n matchResult = 0;\n }\n else {\n matchResult = 2;\n }\n }\n else if (matchValue_1) {\n matchResult = 2;\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0:\n return false;\n case 1:\n if (f(FSharpList__get_Head(xs), FSharpList__get_Head(ys))) {\n return true;\n }\n else {\n f_mut = f;\n xs_mut = FSharpList__get_Tail(xs);\n ys_mut = FSharpList__get_Tail(ys);\n continue exists2;\n }\n default:\n throw new Error((SR_differentLengths + \"\\\\nParameter name: \") + \"list2\");\n }\n break;\n }\n}\nexport function unzip(xs) {\n return foldBack((tupledArg, tupledArg_1) => [FSharpList_Cons_305B8EAC(tupledArg[0], tupledArg_1[0]), FSharpList_Cons_305B8EAC(tupledArg[1], tupledArg_1[1])], xs, [FSharpList_get_Empty(), FSharpList_get_Empty()]);\n}\nexport function unzip3(xs) {\n return foldBack((tupledArg, tupledArg_1) => [FSharpList_Cons_305B8EAC(tupledArg[0], tupledArg_1[0]), FSharpList_Cons_305B8EAC(tupledArg[1], tupledArg_1[1]), FSharpList_Cons_305B8EAC(tupledArg[2], tupledArg_1[2])], xs, [FSharpList_get_Empty(), FSharpList_get_Empty(), FSharpList_get_Empty()]);\n}\nexport function zip(xs, ys) {\n return map2((x, y) => [x, y], xs, ys);\n}\nexport function zip3(xs, ys, zs) {\n return map3((x, y, z) => [x, y, z], xs, ys, zs);\n}\nexport function sortWith(comparer, xs) {\n const arr = toArray(xs);\n arr.sort(comparer);\n return ofArray(arr);\n}\nexport function sort(xs, comparer) {\n return sortWith((x, y) => comparer.Compare(x, y), xs);\n}\nexport function sortBy(projection, xs, comparer) {\n return sortWith((x, y) => comparer.Compare(projection(x), projection(y)), xs);\n}\nexport function sortDescending(xs, comparer) {\n return sortWith((x, y) => (comparer.Compare(x, y) * -1), xs);\n}\nexport function sortByDescending(projection, xs, comparer) {\n return sortWith((x, y) => (comparer.Compare(projection(x), projection(y)) * -1), xs);\n}\nexport function sum(xs, adder) {\n return fold((acc, x) => adder.Add(acc, x), adder.GetZero(), xs);\n}\nexport function sumBy(f, xs, adder) {\n return fold((acc, x) => adder.Add(acc, f(x)), adder.GetZero(), xs);\n}\nexport function maxBy(projection, xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(projection(y), projection(x)) > 0) ? y : x), xs);\n}\nexport function max(xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(y, x) > 0) ? y : x), xs);\n}\nexport function minBy(projection, xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(projection(y), projection(x)) > 0) ? x : y), xs);\n}\nexport function min(xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(y, x) > 0) ? x : y), xs);\n}\nexport function average(xs, averager) {\n let count = 0;\n const total = fold((acc, x) => {\n count = ((count + 1) | 0);\n return averager.Add(acc, x);\n }, averager.GetZero(), xs);\n return averager.DivideByInt(total, count);\n}\nexport function averageBy(f, xs, averager) {\n let count = 0;\n const total = fold((acc, x) => {\n count = ((count + 1) | 0);\n return averager.Add(acc, f(x));\n }, averager.GetZero(), xs);\n return averager.DivideByInt(total, count);\n}\nexport function permute(f, xs) {\n return ofArray(permute_1(f, toArray(xs)));\n}\nexport function chunkBySize(chunkSize, xs) {\n return ofArray(map_1(ofArray, chunkBySize_1(chunkSize, toArray(xs))));\n}\nexport function allPairs(xs, ys) {\n const root = FSharpList_get_Empty();\n let node = root;\n iterate((x) => {\n iterate((y) => {\n let xs_1, t;\n node = ((xs_1 = node, (t = (new FSharpList([x, y], void 0)), (xs_1.tail = t, t))));\n }, ys);\n }, xs);\n const xs_3 = node;\n const t_2 = FSharpList_get_Empty();\n xs_3.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function skip(count_mut, xs_mut) {\n skip: while (true) {\n const count = count_mut, xs = xs_mut;\n if (count <= 0) {\n return xs;\n }\n else if (FSharpList__get_IsEmpty(xs)) {\n throw new Error((SR_notEnoughElements + \"\\\\nParameter name: \") + \"list\");\n }\n else {\n count_mut = (count - 1);\n xs_mut = FSharpList__get_Tail(xs);\n continue skip;\n }\n break;\n }\n}\nexport function skipWhile(predicate_mut, xs_mut) {\n skipWhile: while (true) {\n const predicate = predicate_mut, xs = xs_mut;\n if (FSharpList__get_IsEmpty(xs)) {\n return xs;\n }\n else if (!predicate(FSharpList__get_Head(xs))) {\n return xs;\n }\n else {\n predicate_mut = predicate;\n xs_mut = FSharpList__get_Tail(xs);\n continue skipWhile;\n }\n break;\n }\n}\nexport function take(count, xs) {\n if (count < 0) {\n throw new Error((SR_inputMustBeNonNegative + \"\\\\nParameter name: \") + \"count\");\n }\n const loop = (i_mut, acc_mut, xs_1_mut) => {\n let t;\n loop: while (true) {\n const i = i_mut, acc = acc_mut, xs_1 = xs_1_mut;\n if (i <= 0) {\n return acc;\n }\n else if (FSharpList__get_IsEmpty(xs_1)) {\n throw new Error((SR_notEnoughElements + \"\\\\nParameter name: \") + \"list\");\n }\n else {\n i_mut = (i - 1);\n acc_mut = ((t = (new FSharpList(FSharpList__get_Head(xs_1), void 0)), (acc.tail = t, t)));\n xs_1_mut = FSharpList__get_Tail(xs_1);\n continue loop;\n }\n break;\n }\n };\n const root = FSharpList_get_Empty();\n const node = loop(count, root, xs);\n const t_2 = FSharpList_get_Empty();\n node.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function takeWhile(predicate, xs) {\n const loop = (acc_mut, xs_1_mut) => {\n let t;\n loop: while (true) {\n const acc = acc_mut, xs_1 = xs_1_mut;\n if (FSharpList__get_IsEmpty(xs_1)) {\n return acc;\n }\n else if (!predicate(FSharpList__get_Head(xs_1))) {\n return acc;\n }\n else {\n acc_mut = ((t = (new FSharpList(FSharpList__get_Head(xs_1), void 0)), (acc.tail = t, t)));\n xs_1_mut = FSharpList__get_Tail(xs_1);\n continue loop;\n }\n break;\n }\n };\n const root = FSharpList_get_Empty();\n const node = loop(root, xs);\n const t_2 = FSharpList_get_Empty();\n node.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function truncate(count, xs) {\n const loop = (i_mut, acc_mut, xs_1_mut) => {\n let t;\n loop: while (true) {\n const i = i_mut, acc = acc_mut, xs_1 = xs_1_mut;\n if (i <= 0) {\n return acc;\n }\n else if (FSharpList__get_IsEmpty(xs_1)) {\n return acc;\n }\n else {\n i_mut = (i - 1);\n acc_mut = ((t = (new FSharpList(FSharpList__get_Head(xs_1), void 0)), (acc.tail = t, t)));\n xs_1_mut = FSharpList__get_Tail(xs_1);\n continue loop;\n }\n break;\n }\n };\n const root = FSharpList_get_Empty();\n const node = loop(count, root, xs);\n const t_2 = FSharpList_get_Empty();\n node.tail = t_2;\n return FSharpList__get_Tail(root);\n}\nexport function getSlice(startIndex, endIndex, xs) {\n const len = length(xs) | 0;\n let startIndex_1;\n const index = defaultArg(startIndex, 0) | 0;\n startIndex_1 = ((index < 0) ? 0 : index);\n let endIndex_1;\n const index_1 = defaultArg(endIndex, len - 1) | 0;\n endIndex_1 = ((index_1 >= len) ? (len - 1) : index_1);\n if (endIndex_1 < startIndex_1) {\n return FSharpList_get_Empty();\n }\n else {\n return take((endIndex_1 - startIndex_1) + 1, skip(startIndex_1, xs));\n }\n}\nexport function splitAt(index, xs) {\n if (index < 0) {\n throw new Error((SR_inputMustBeNonNegative + \"\\\\nParameter name: \") + \"index\");\n }\n if (index > FSharpList__get_Length(xs)) {\n throw new Error((SR_notEnoughElements + \"\\\\nParameter name: \") + \"index\");\n }\n return [take(index, xs), skip(index, xs)];\n}\nexport function exactlyOne(xs) {\n if (FSharpList__get_IsEmpty(xs)) {\n throw new Error((SR_inputSequenceEmpty + \"\\\\nParameter name: \") + \"list\");\n }\n else if (FSharpList__get_IsEmpty(FSharpList__get_Tail(xs))) {\n return FSharpList__get_Head(xs);\n }\n else {\n throw new Error((SR_inputSequenceTooLong + \"\\\\nParameter name: \") + \"list\");\n }\n}\nexport function tryExactlyOne(xs) {\n if (!FSharpList__get_IsEmpty(xs) && FSharpList__get_IsEmpty(FSharpList__get_Tail(xs))) {\n return some(FSharpList__get_Head(xs));\n }\n else {\n return void 0;\n }\n}\nexport function where(predicate, xs) {\n return filter(predicate, xs);\n}\nexport function pairwise(xs) {\n return ofArray(pairwise_1(toArray(xs)));\n}\nexport function windowed(windowSize, xs) {\n return ofArray(map_1(ofArray, windowed_1(windowSize, toArray(xs))));\n}\nexport function splitInto(chunks, xs) {\n return ofArray(map_1(ofArray, splitInto_1(chunks, toArray(xs))));\n}\nexport function transpose(lists) {\n return ofArray(map_1(ofArray, transpose_1(map_1(toArray, Array.from(lists)))));\n}\nexport function insertAt(index, y, xs) {\n let i = -1;\n let isDone = false;\n const result = fold((acc, x) => {\n i = ((i + 1) | 0);\n if (i === index) {\n isDone = true;\n return FSharpList_Cons_305B8EAC(x, FSharpList_Cons_305B8EAC(y, acc));\n }\n else {\n return FSharpList_Cons_305B8EAC(x, acc);\n }\n }, FSharpList_get_Empty(), xs);\n return reverse(isDone ? result : (((i + 1) === index) ? FSharpList_Cons_305B8EAC(y, result) : (() => {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n })()));\n}\nexport function insertManyAt(index, ys, xs) {\n let i = -1;\n let isDone = false;\n const ys_1 = ofSeq(ys);\n const result = fold((acc, x) => {\n i = ((i + 1) | 0);\n if (i === index) {\n isDone = true;\n return FSharpList_Cons_305B8EAC(x, append(ys_1, acc));\n }\n else {\n return FSharpList_Cons_305B8EAC(x, acc);\n }\n }, FSharpList_get_Empty(), xs);\n return reverse(isDone ? result : (((i + 1) === index) ? append(ys_1, result) : (() => {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n })()));\n}\nexport function removeAt(index, xs) {\n let i = -1;\n let isDone = false;\n const ys = filter((_arg) => {\n i = ((i + 1) | 0);\n if (i === index) {\n isDone = true;\n return false;\n }\n else {\n return true;\n }\n }, xs);\n if (!isDone) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return ys;\n}\nexport function removeManyAt(index, count, xs) {\n let i = -1;\n let status = -1;\n const ys = filter((_arg) => {\n i = ((i + 1) | 0);\n if (i === index) {\n status = 0;\n return false;\n }\n else if (i > index) {\n if (i < (index + count)) {\n return false;\n }\n else {\n status = 1;\n return true;\n }\n }\n else {\n return true;\n }\n }, xs);\n const status_1 = (((status === 0) && ((i + 1) === (index + count))) ? 1 : status) | 0;\n if (status_1 < 1) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + ((status_1 < 0) ? \"index\" : \"count\"));\n }\n return ys;\n}\nexport function updateAt(index, y, xs) {\n let isDone = false;\n const ys = mapIndexed((i, x) => {\n if (i === index) {\n isDone = true;\n return y;\n }\n else {\n return x;\n }\n }, xs);\n if (!isDone) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return ys;\n}\n","namespace Fable.Remoting.Client \n\nopen System\n\ntype HttpMethod = GET | POST \n\ntype RequestBody = \n | Empty\n | Json of string \n | Binary of byte[] \n\ntype CustomResponseSerializer = byte[] -> Type -> obj\n\ntype HttpRequest = {\n HttpMethod: HttpMethod\n Url: string \n Headers: (string * string) list \n RequestBody : RequestBody\n WithCredentials : bool\n}\n \ntype HttpResponse = {\n StatusCode: int \n ResponseBody: string\n}\n\ntype RemoteBuilderOptions = {\n CustomHeaders : (string * string) list\n BaseUrl : string option\n Authorization : string option\n WithCredentials : bool\n RouteBuilder : (string -> string -> string)\n CustomResponseSerialization : CustomResponseSerializer option\n}\n\ntype ProxyRequestException(response: HttpResponse, errorMsg, reponseText: string) = \n inherit System.Exception(errorMsg)\n member this.Response = response \n member this.StatusCode = response.StatusCode\n member this.ResponseText = reponseText ","import { Record, Union } from \"./Types.js\";\nimport { combineHashCodes, equalArraysWith, stringHash } from \"./Util.js\";\nimport Decimal from \"./Decimal.js\";\nexport class CaseInfo {\n constructor(declaringType, tag, name, fields) {\n this.declaringType = declaringType;\n this.tag = tag;\n this.name = name;\n this.fields = fields;\n }\n}\nexport class MethodInfo {\n constructor(name, parameters, returnType) {\n this.name = name;\n this.parameters = parameters;\n this.returnType = returnType;\n }\n}\nexport class TypeInfo {\n constructor(fullname, generics, construct, parent, fields, cases, enumCases) {\n this.fullname = fullname;\n this.generics = generics;\n this.construct = construct;\n this.parent = parent;\n this.fields = fields;\n this.cases = cases;\n this.enumCases = enumCases;\n }\n toString() {\n return fullName(this);\n }\n GetHashCode() {\n return getHashCode(this);\n }\n Equals(other) {\n return equals(this, other);\n }\n}\nexport class GenericParameter extends TypeInfo {\n constructor(name) {\n super(name);\n }\n}\nexport function getGenerics(t) {\n return t.generics != null ? t.generics : [];\n}\nexport function getHashCode(t) {\n const fullnameHash = stringHash(t.fullname);\n const genHashes = getGenerics(t).map(getHashCode);\n return combineHashCodes([fullnameHash, ...genHashes]);\n}\nexport function equals(t1, t2) {\n if (t1.fullname === \"\") { // Anonymous records\n return t2.fullname === \"\"\n && equalArraysWith(getRecordElements(t1), getRecordElements(t2), ([k1, v1], [k2, v2]) => k1 === k2 && equals(v1, v2));\n }\n else {\n return t1.fullname === t2.fullname\n && equalArraysWith(getGenerics(t1), getGenerics(t2), equals);\n }\n}\nexport function class_type(fullname, generics, construct, parent) {\n return new TypeInfo(fullname, generics, construct, parent);\n}\nexport function record_type(fullname, generics, construct, fields) {\n return new TypeInfo(fullname, generics, construct, undefined, fields);\n}\nexport function anonRecord_type(...fields) {\n return new TypeInfo(\"\", undefined, undefined, undefined, () => fields);\n}\nexport function union_type(fullname, generics, construct, cases) {\n const t = new TypeInfo(fullname, generics, construct, undefined, undefined, () => {\n const caseNames = construct.prototype.cases();\n return cases().map((fields, i) => new CaseInfo(t, i, caseNames[i], fields));\n });\n return t;\n}\nexport function tuple_type(...generics) {\n return new TypeInfo(\"System.Tuple`\" + generics.length, generics);\n}\nexport function delegate_type(...generics) {\n return new TypeInfo(\"System.Func`\" + generics.length, generics);\n}\nexport function lambda_type(argType, returnType) {\n return new TypeInfo(\"Microsoft.FSharp.Core.FSharpFunc`2\", [argType, returnType]);\n}\nexport function option_type(generic) {\n return new TypeInfo(\"Microsoft.FSharp.Core.FSharpOption`1\", [generic]);\n}\nexport function list_type(generic) {\n return new TypeInfo(\"Microsoft.FSharp.Collections.FSharpList`1\", [generic]);\n}\nexport function array_type(generic) {\n return new TypeInfo(\"[]\", [generic]);\n}\nexport function enum_type(fullname, underlyingType, enumCases) {\n return new TypeInfo(fullname, [underlyingType], undefined, undefined, undefined, undefined, enumCases);\n}\nexport function measure_type(fullname) {\n return new TypeInfo(fullname);\n}\nexport function generic_type(name) {\n return new GenericParameter(name);\n}\nexport const obj_type = new TypeInfo(\"System.Object\");\nexport const unit_type = new TypeInfo(\"Microsoft.FSharp.Core.Unit\");\nexport const char_type = new TypeInfo(\"System.Char\");\nexport const string_type = new TypeInfo(\"System.String\");\nexport const bool_type = new TypeInfo(\"System.Boolean\");\nexport const int8_type = new TypeInfo(\"System.SByte\");\nexport const uint8_type = new TypeInfo(\"System.Byte\");\nexport const int16_type = new TypeInfo(\"System.Int16\");\nexport const uint16_type = new TypeInfo(\"System.UInt16\");\nexport const int32_type = new TypeInfo(\"System.Int32\");\nexport const uint32_type = new TypeInfo(\"System.UInt32\");\nexport const int64_type = new TypeInfo(\"System.Int64\");\nexport const uint64_type = new TypeInfo(\"System.UInt64\");\nexport const int128_type = new TypeInfo(\"System.Int128\");\nexport const uint128_type = new TypeInfo(\"System.UInt128\");\nexport const nativeint_type = new TypeInfo(\"System.IntPtr\");\nexport const unativeint_type = new TypeInfo(\"System.UIntPtr\");\nexport const float16_type = new TypeInfo(\"System.Half\");\nexport const float32_type = new TypeInfo(\"System.Single\");\nexport const float64_type = new TypeInfo(\"System.Double\");\nexport const decimal_type = new TypeInfo(\"System.Decimal\");\nexport const bigint_type = new TypeInfo(\"System.Numerics.BigInteger\");\nexport function name(info) {\n if (Array.isArray(info)) {\n return info[0];\n }\n else if (info instanceof TypeInfo) {\n const elemType = getElementType(info);\n if (elemType != null) {\n return name(elemType) + \"[]\";\n }\n else {\n const i = info.fullname.lastIndexOf(\".\");\n return i === -1 ? info.fullname : info.fullname.substr(i + 1);\n }\n }\n else {\n return info.name;\n }\n}\nexport function fullName(t) {\n const elemType = getElementType(t);\n if (elemType != null) {\n return fullName(elemType) + \"[]\";\n }\n else if (t.generics == null || t.generics.length === 0) {\n return t.fullname;\n }\n else {\n return t.fullname + \"[\" + t.generics.map((x) => fullName(x)).join(\",\") + \"]\";\n }\n}\nexport function namespace(t) {\n const elemType = getElementType(t);\n if (elemType != null) {\n return namespace(elemType);\n }\n else {\n const i = t.fullname.lastIndexOf(\".\");\n return i === -1 ? \"\" : t.fullname.substr(0, i);\n }\n}\nexport function isArray(t) {\n return getElementType(t) != null;\n}\nexport function getElementType(t) {\n return t.fullname === \"[]\" && t.generics?.length === 1 ? t.generics[0] : undefined;\n}\nexport function isGenericType(t) {\n return t.generics != null && t.generics.length > 0;\n}\nexport function isGenericParameter(t) {\n return t instanceof GenericParameter;\n}\nexport function isEnum(t) {\n return t.enumCases != null && t.enumCases.length > 0;\n}\nexport function isSubclassOf(t1, t2) {\n return (t2.fullname === obj_type.fullname) || (t1.parent != null && (t1.parent.Equals(t2) || isSubclassOf(t1.parent, t2)));\n}\nfunction isErasedToNumber(t) {\n return isEnum(t) || [\n int8_type.fullname,\n uint8_type.fullname,\n int16_type.fullname,\n uint16_type.fullname,\n int32_type.fullname,\n uint32_type.fullname,\n float16_type.fullname,\n float32_type.fullname,\n float64_type.fullname,\n ].includes(t.fullname);\n}\nfunction isErasedToBigInt(t) {\n return isEnum(t) || [\n int64_type.fullname,\n uint64_type.fullname,\n int128_type.fullname,\n uint128_type.fullname,\n nativeint_type.fullname,\n unativeint_type.fullname,\n bigint_type.fullname,\n ].includes(t.fullname);\n}\nexport function isInstanceOfType(t, o) {\n if (t.fullname === obj_type.fullname)\n return true;\n switch (typeof o) {\n case \"boolean\":\n return t.fullname === bool_type.fullname;\n case \"string\":\n return t.fullname === string_type.fullname;\n case \"function\":\n return isFunction(t);\n case \"number\":\n return isErasedToNumber(t);\n case \"bigint\":\n return isErasedToBigInt(t);\n default:\n return t.construct != null && o instanceof t.construct;\n }\n}\n/**\n * This doesn't replace types for fields (records) or cases (unions)\n * but it should be enough for type comparison purposes\n */\nexport function getGenericTypeDefinition(t) {\n return t.generics == null ? t : new TypeInfo(t.fullname, t.generics.map(() => obj_type));\n}\nexport function getEnumUnderlyingType(t) {\n return t.generics?.[0];\n}\nexport function getEnumValues(t) {\n if (isEnum(t) && t.enumCases != null) {\n return t.enumCases.map((kv) => kv[1]);\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nexport function getEnumNames(t) {\n if (isEnum(t) && t.enumCases != null) {\n return t.enumCases.map((kv) => kv[0]);\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nfunction getEnumCase(t, v) {\n if (t.enumCases != null) {\n if (typeof v === \"string\") {\n for (const kv of t.enumCases) {\n if (kv[0] === v) {\n return kv;\n }\n }\n throw new Error(`'${v}' was not found in ${t.fullname}`);\n }\n else {\n for (const kv of t.enumCases) {\n if (kv[1] === v) {\n return kv;\n }\n }\n // .NET returns the number even if it doesn't match any of the cases\n return [\"\", v];\n }\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nexport function parseEnum(t, str) {\n // TODO: better int parsing here, parseInt ceils floats: \"4.8\" -> 4\n const value = parseInt(str, 10);\n return getEnumCase(t, isNaN(value) ? str : value)[1];\n}\nexport function tryParseEnum(t, str, defValue) {\n try {\n defValue.contents = parseEnum(t, str);\n return true;\n }\n catch {\n return false;\n }\n}\nexport function getEnumName(t, v) {\n return getEnumCase(t, v)[0];\n}\nexport function isEnumDefined(t, v) {\n try {\n const kv = getEnumCase(t, v);\n return kv[0] != null && kv[0] !== \"\";\n }\n catch {\n // supress error\n }\n return false;\n}\n// FSharpType\nexport function getUnionCases(t) {\n if (t.cases != null) {\n return t.cases();\n }\n else {\n throw new Error(`${t.fullname} is not an F# union type`);\n }\n}\nexport function getRecordElements(t) {\n if (t.fields != null) {\n return t.fields();\n }\n else {\n throw new Error(`${t.fullname} is not an F# record type`);\n }\n}\nexport function getTupleElements(t) {\n if (isTuple(t) && t.generics != null) {\n return t.generics;\n }\n else {\n throw new Error(`${t.fullname} is not a tuple type`);\n }\n}\nexport function getFunctionElements(t) {\n if (isFunction(t) && t.generics != null) {\n const gen = t.generics;\n return [gen[0], gen[1]];\n }\n else {\n throw new Error(`${t.fullname} is not an F# function type`);\n }\n}\nexport function isUnion(t) {\n return t instanceof TypeInfo ? t.cases != null : t instanceof Union;\n}\nexport function isRecord(t) {\n return t instanceof TypeInfo ? t.fields != null : t instanceof Record;\n}\nexport function isTuple(t) {\n return t.fullname.startsWith(\"System.Tuple\");\n}\n// In .NET this is false for delegates\nexport function isFunction(t) {\n return t.fullname === \"Microsoft.FSharp.Core.FSharpFunc`2\";\n}\n// FSharpValue\nexport function getUnionFields(v, t) {\n const cases = getUnionCases(t);\n const case_ = cases[v.tag];\n if (case_ == null) {\n throw new Error(`Cannot find case ${v.name} in union type`);\n }\n return [case_, v.fields];\n}\nexport function getUnionCaseFields(uci) {\n return uci.fields == null ? [] : uci.fields;\n}\n// This is used as replacement of `FSharpValue.GetRecordFields`\n// For `FSharpTypes.GetRecordFields` see `getRecordElements`\n// Object.keys returns keys in the order they were added to the object\nexport function getRecordFields(v) {\n return Object.keys(v).map((k) => v[k]);\n}\nexport function getRecordField(v, field) {\n return v[field[0]];\n}\nexport function getTupleFields(v) {\n return v;\n}\nexport function getTupleField(v, i) {\n return v[i];\n}\nexport function makeUnion(uci, values) {\n const expectedLength = (uci.fields || []).length;\n if (values.length !== expectedLength) {\n throw new Error(`Expected an array of length ${expectedLength} but got ${values.length}`);\n }\n const construct = uci.declaringType.construct;\n if (construct == null) {\n return {};\n }\n const isSingleCase = uci.declaringType.cases ? uci.declaringType.cases().length == 1 : false;\n if (isSingleCase) {\n return new construct(...values);\n }\n else {\n return new construct(uci.tag, values);\n }\n}\nexport function makeRecord(t, values) {\n const fields = getRecordElements(t);\n if (fields.length !== values.length) {\n throw new Error(`Expected an array of length ${fields.length} but got ${values.length}`);\n }\n return t.construct != null\n ? new t.construct(...values)\n : fields.reduce((obj, [key, _t], i) => {\n obj[key] = values[i];\n return obj;\n }, {});\n}\nexport function makeTuple(values, _t) {\n return values;\n}\nexport function makeGenericType(t, generics) {\n return new TypeInfo(t.fullname, generics, t.construct, t.parent, t.fields, t.cases);\n}\nexport function createInstance(t, consArgs) {\n // TODO: Check if consArgs length is same as t.construct?\n // (Arg types can still be different)\n if (typeof t.construct === \"function\") {\n return new t.construct(...(consArgs ?? []));\n }\n else if (isErasedToNumber(t)) {\n return 0;\n }\n else if (isErasedToBigInt(t)) {\n return 0n;\n }\n else {\n switch (t.fullname) {\n case obj_type.fullname:\n return {};\n case bool_type.fullname:\n return false;\n case decimal_type.fullname:\n return new Decimal(0);\n case char_type.fullname:\n // Even though char is a value type, it's erased to string, and Unchecked.defaultof is null\n return null;\n default:\n throw new Error(`Cannot access constructor of ${t.fullname}`);\n }\n }\n}\nexport function getValue(propertyInfo, v) {\n return v[propertyInfo[0]];\n}\n// Fable.Core.Reflection\nfunction assertUnion(x) {\n if (!(x instanceof Union)) {\n throw new Error(`Value is not an F# union type`);\n }\n}\nexport function getCaseTag(x) {\n assertUnion(x);\n return x.tag;\n}\nexport function getCaseName(x) {\n assertUnion(x);\n return x.cases()[x.tag];\n}\nexport function getCaseFields(x) {\n assertUnion(x);\n return x.fields;\n}\n","import { clear, defaultOf, equals, isDisposable, isArrayLike, toIterator, disposeSafe, getEnumerator } from \"./Util.js\";\nimport { toString } from \"./Types.js\";\nimport { class_type } from \"./Reflection.js\";\nimport { some, value as value_1 } from \"./Option.js\";\nimport { Operators_Lock, Operators_NullArg } from \"./FSharp.Core.js\";\nimport { chunkBySize as chunkBySize_1, permute as permute_1, transpose as transpose_1, map as map_1, windowed as windowed_1, splitInto as splitInto_1, pairwise as pairwise_1, scanBack as scanBack_1, reverse as reverse_1, mapFoldBack as mapFoldBack_1, mapFold as mapFold_1, tryItem as tryItem_1, tryHead as tryHead_1, foldBack2 as foldBack2_1, foldBack as foldBack_1, tryFindIndexBack as tryFindIndexBack_1, tryFindBack as tryFindBack_1, singleton as singleton_1 } from \"./Array.js\";\nimport { length as length_1, tryItem as tryItem_2, isEmpty as isEmpty_1, tryHead as tryHead_2, ofSeq as ofSeq_1, ofArray as ofArray_1, toArray as toArray_1, FSharpList } from \"./List.js\";\nimport { SR_indexOutOfBounds } from \"./Global.js\";\nexport const SR_enumerationAlreadyFinished = \"Enumeration already finished.\";\nexport const SR_enumerationNotStarted = \"Enumeration has not started. Call MoveNext.\";\nexport const SR_inputSequenceEmpty = \"The input sequence was empty.\";\nexport const SR_inputSequenceTooLong = \"The input sequence contains more than one element.\";\nexport const SR_keyNotFoundAlt = \"An index satisfying the predicate was not found in the collection.\";\nexport const SR_notEnoughElements = \"The input sequence has an insufficient number of elements.\";\nexport const SR_resetNotSupported = \"Reset is not supported on this enumerator.\";\nexport function Enumerator_noReset() {\n throw new Error(SR_resetNotSupported);\n}\nexport function Enumerator_notStarted() {\n throw new Error(SR_enumerationNotStarted);\n}\nexport function Enumerator_alreadyFinished() {\n throw new Error(SR_enumerationAlreadyFinished);\n}\nexport class Enumerator_Seq {\n constructor(f) {\n this.f = f;\n }\n toString() {\n const xs = this;\n let i = 0;\n let str = \"seq [\";\n const e = getEnumerator(xs);\n try {\n while ((i < 4) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n if (i > 0) {\n str = (str + \"; \");\n }\n str = (str + toString(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]()));\n i = ((i + 1) | 0);\n }\n if (i === 4) {\n str = (str + \"; ...\");\n }\n return str + \"]\";\n }\n finally {\n disposeSafe(e);\n }\n }\n GetEnumerator() {\n const x = this;\n return x.f();\n }\n [Symbol.iterator]() {\n return toIterator(getEnumerator(this));\n }\n \"System.Collections.IEnumerable.GetEnumerator\"() {\n const x = this;\n return x.f();\n }\n}\nexport function Enumerator_Seq_$reflection(gen0) {\n return class_type(\"SeqModule.Enumerator.Seq\", [gen0], Enumerator_Seq);\n}\nexport function Enumerator_Seq_$ctor_673A07F2(f) {\n return new Enumerator_Seq(f);\n}\nexport class Enumerator_FromFunctions$1 {\n constructor(current, next, dispose) {\n this.current = current;\n this.next = next;\n this.dispose = dispose;\n }\n \"System.Collections.Generic.IEnumerator`1.get_Current\"() {\n const _ = this;\n return _.current();\n }\n \"System.Collections.IEnumerator.get_Current\"() {\n const _ = this;\n return _.current();\n }\n \"System.Collections.IEnumerator.MoveNext\"() {\n const _ = this;\n return _.next();\n }\n \"System.Collections.IEnumerator.Reset\"() {\n Enumerator_noReset();\n }\n Dispose() {\n const _ = this;\n _.dispose();\n }\n}\nexport function Enumerator_FromFunctions$1_$reflection(gen0) {\n return class_type(\"SeqModule.Enumerator.FromFunctions`1\", [gen0], Enumerator_FromFunctions$1);\n}\nexport function Enumerator_FromFunctions$1_$ctor_58C54629(current, next, dispose) {\n return new Enumerator_FromFunctions$1(current, next, dispose);\n}\nexport function Enumerator_cast(e) {\n return Enumerator_FromFunctions$1_$ctor_58C54629(() => e[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), () => e[\"System.Collections.IEnumerator.MoveNext\"](), () => {\n const e_1 = e;\n disposeSafe(e_1);\n });\n}\nexport function Enumerator_concat(sources) {\n let outerOpt = void 0;\n let innerOpt = void 0;\n let started = false;\n let finished = false;\n let curr = void 0;\n const finish = () => {\n finished = true;\n if (innerOpt != null) {\n const inner = value_1(innerOpt);\n try {\n disposeSafe(inner);\n }\n finally {\n innerOpt = void 0;\n }\n }\n if (outerOpt != null) {\n const outer = value_1(outerOpt);\n try {\n disposeSafe(outer);\n }\n finally {\n outerOpt = void 0;\n }\n }\n };\n return Enumerator_FromFunctions$1_$ctor_58C54629(() => {\n if (!started) {\n Enumerator_notStarted();\n }\n else if (finished) {\n Enumerator_alreadyFinished();\n }\n if (curr != null) {\n return value_1(curr);\n }\n else {\n return Enumerator_alreadyFinished();\n }\n }, () => {\n let copyOfStruct;\n if (!started) {\n started = true;\n }\n if (finished) {\n return false;\n }\n else {\n let res = void 0;\n while (res == null) {\n const outerOpt_1 = outerOpt;\n const innerOpt_1 = innerOpt;\n if (outerOpt_1 != null) {\n if (innerOpt_1 != null) {\n const inner_1 = value_1(innerOpt_1);\n if (inner_1[\"System.Collections.IEnumerator.MoveNext\"]()) {\n curr = some(inner_1[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n res = true;\n }\n else {\n try {\n disposeSafe(inner_1);\n }\n finally {\n innerOpt = void 0;\n }\n }\n }\n else {\n const outer_1 = value_1(outerOpt_1);\n if (outer_1[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const ie = outer_1[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n innerOpt = ((copyOfStruct = ie, getEnumerator(copyOfStruct)));\n }\n else {\n finish();\n res = false;\n }\n }\n }\n else {\n outerOpt = getEnumerator(sources);\n }\n }\n return value_1(res);\n }\n }, () => {\n if (!finished) {\n finish();\n }\n });\n}\nexport function Enumerator_enumerateThenFinally(f, e) {\n return Enumerator_FromFunctions$1_$ctor_58C54629(() => e[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), () => e[\"System.Collections.IEnumerator.MoveNext\"](), () => {\n try {\n disposeSafe(e);\n }\n finally {\n f();\n }\n });\n}\nexport function Enumerator_generateWhileSome(openf, compute, closef) {\n let started = false;\n let curr = void 0;\n let state = some(openf());\n const dispose = () => {\n if (state != null) {\n const x_1 = value_1(state);\n try {\n closef(x_1);\n }\n finally {\n state = void 0;\n }\n }\n };\n const finish = () => {\n try {\n dispose();\n }\n finally {\n curr = void 0;\n }\n };\n return Enumerator_FromFunctions$1_$ctor_58C54629(() => {\n if (!started) {\n Enumerator_notStarted();\n }\n if (curr != null) {\n return value_1(curr);\n }\n else {\n return Enumerator_alreadyFinished();\n }\n }, () => {\n if (!started) {\n started = true;\n }\n if (state != null) {\n const s = value_1(state);\n let matchValue_1;\n try {\n matchValue_1 = compute(s);\n }\n catch (matchValue) {\n finish();\n throw matchValue;\n }\n if (matchValue_1 != null) {\n curr = matchValue_1;\n return true;\n }\n else {\n finish();\n return false;\n }\n }\n else {\n return false;\n }\n }, dispose);\n}\nexport function Enumerator_unfold(f, state) {\n let curr = void 0;\n let acc = state;\n return Enumerator_FromFunctions$1_$ctor_58C54629(() => {\n if (curr != null) {\n const x = value_1(curr)[0];\n const st = value_1(curr)[1];\n return x;\n }\n else {\n return Enumerator_notStarted();\n }\n }, () => {\n curr = f(acc);\n if (curr != null) {\n const x_1 = value_1(curr)[0];\n const st_1 = value_1(curr)[1];\n acc = st_1;\n return true;\n }\n else {\n return false;\n }\n }, () => {\n });\n}\nexport function indexNotFound() {\n throw new Error(SR_keyNotFoundAlt);\n}\nexport function checkNonNull(argName, arg) {\n if (arg == null) {\n Operators_NullArg(argName);\n }\n}\nexport function mkSeq(f) {\n return Enumerator_Seq_$ctor_673A07F2(f);\n}\nexport function ofSeq(xs) {\n checkNonNull(\"source\", xs);\n return getEnumerator(xs);\n}\nexport function delay(generator) {\n return mkSeq(() => getEnumerator(generator()));\n}\nexport function concat(sources) {\n return mkSeq(() => Enumerator_concat(sources));\n}\nexport function unfold(generator, state) {\n return mkSeq(() => Enumerator_unfold(generator, state));\n}\nexport function empty() {\n return delay(() => (new Array(0)));\n}\nexport function singleton(x) {\n return delay(() => singleton_1(x));\n}\nexport function ofArray(arr) {\n return arr;\n}\nexport function toArray(xs) {\n if (xs instanceof FSharpList) {\n const a = xs;\n return toArray_1(a);\n }\n else {\n return Array.from(xs);\n }\n}\nexport function ofList(xs) {\n return xs;\n}\nexport function toList(xs) {\n if (isArrayLike(xs)) {\n return ofArray_1(xs);\n }\n else if (xs instanceof FSharpList) {\n return xs;\n }\n else {\n return ofSeq_1(xs);\n }\n}\nexport function generate(create, compute, dispose) {\n return mkSeq(() => Enumerator_generateWhileSome(create, compute, dispose));\n}\nexport function generateIndexed(create, compute, dispose) {\n return mkSeq(() => {\n let i = -1;\n return Enumerator_generateWhileSome(create, (x) => {\n i = ((i + 1) | 0);\n return compute(i, x);\n }, dispose);\n });\n}\nexport function append(xs, ys) {\n return concat([xs, ys]);\n}\nexport function cast(xs) {\n return mkSeq(() => {\n checkNonNull(\"source\", xs);\n return Enumerator_cast(getEnumerator(xs));\n });\n}\nexport function choose(chooser, xs) {\n return generate(() => ofSeq(xs), (e) => {\n let curr = void 0;\n while ((curr == null) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n curr = chooser(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n return curr;\n }, (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function compareWith(comparer, xs, ys) {\n const e1 = ofSeq(xs);\n try {\n const e2 = ofSeq(ys);\n try {\n let c = 0;\n let b1 = e1[\"System.Collections.IEnumerator.MoveNext\"]();\n let b2 = e2[\"System.Collections.IEnumerator.MoveNext\"]();\n while (((c === 0) && b1) && b2) {\n c = (comparer(e1[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), e2[\"System.Collections.Generic.IEnumerator`1.get_Current\"]()) | 0);\n if (c === 0) {\n b1 = e1[\"System.Collections.IEnumerator.MoveNext\"]();\n b2 = e2[\"System.Collections.IEnumerator.MoveNext\"]();\n }\n }\n return ((c !== 0) ? c : (b1 ? 1 : (b2 ? -1 : 0))) | 0;\n }\n finally {\n disposeSafe(e2);\n }\n }\n finally {\n disposeSafe(e1);\n }\n}\nexport function contains(value, xs, comparer) {\n const e = ofSeq(xs);\n try {\n let found = false;\n while (!found && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n found = comparer.Equals(value, e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n return found;\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function enumerateFromFunctions(create, moveNext, current) {\n return generate(create, (x) => (moveNext(x) ? some(current(x)) : void 0), (x_1) => {\n const matchValue = x_1;\n if (isDisposable(matchValue)) {\n const id = matchValue;\n disposeSafe(id);\n }\n });\n}\nexport function enumerateThenFinally(source, compensation) {\n const compensation_1 = compensation;\n return mkSeq(() => {\n try {\n return Enumerator_enumerateThenFinally(compensation_1, ofSeq(source));\n }\n catch (matchValue) {\n compensation_1();\n throw matchValue;\n }\n });\n}\nexport function enumerateUsing(resource, source) {\n const compensation = () => {\n if (equals(resource, defaultOf())) {\n }\n else {\n let copyOfStruct = resource;\n disposeSafe(copyOfStruct);\n }\n };\n return mkSeq(() => {\n try {\n return Enumerator_enumerateThenFinally(compensation, ofSeq(source(resource)));\n }\n catch (matchValue_1) {\n compensation();\n throw matchValue_1;\n }\n });\n}\nexport function enumerateWhile(guard, xs) {\n return concat(unfold((i) => (guard() ? [xs, i + 1] : void 0), 0));\n}\nexport function filter(f, xs) {\n return choose((x) => {\n if (f(x)) {\n return some(x);\n }\n else {\n return void 0;\n }\n }, xs);\n}\nexport function exists(predicate, xs) {\n const e = ofSeq(xs);\n try {\n let found = false;\n while (!found && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n found = predicate(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n return found;\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function exists2(predicate, xs, ys) {\n const e1 = ofSeq(xs);\n try {\n const e2 = ofSeq(ys);\n try {\n let found = false;\n while ((!found && e1[\"System.Collections.IEnumerator.MoveNext\"]()) && e2[\"System.Collections.IEnumerator.MoveNext\"]()) {\n found = predicate(e1[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), e2[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n return found;\n }\n finally {\n disposeSafe(e2);\n }\n }\n finally {\n disposeSafe(e1);\n }\n}\nexport function exactlyOne(xs) {\n const e = ofSeq(xs);\n try {\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const v = e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n throw new Error((SR_inputSequenceTooLong + \"\\\\nParameter name: \") + \"source\");\n }\n else {\n return v;\n }\n }\n else {\n throw new Error((SR_inputSequenceEmpty + \"\\\\nParameter name: \") + \"source\");\n }\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function tryExactlyOne(xs) {\n const e = ofSeq(xs);\n try {\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const v = e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n return e[\"System.Collections.IEnumerator.MoveNext\"]() ? void 0 : some(v);\n }\n else {\n return void 0;\n }\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function tryFind(predicate, xs) {\n const e = ofSeq(xs);\n try {\n let res = void 0;\n while ((res == null) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const c = e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n if (predicate(c)) {\n res = some(c);\n }\n }\n return res;\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function find(predicate, xs) {\n const matchValue = tryFind(predicate, xs);\n if (matchValue == null) {\n return indexNotFound();\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function tryFindBack(predicate, xs) {\n return tryFindBack_1(predicate, toArray(xs));\n}\nexport function findBack(predicate, xs) {\n const matchValue = tryFindBack(predicate, xs);\n if (matchValue == null) {\n return indexNotFound();\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function tryFindIndex(predicate, xs) {\n const e = ofSeq(xs);\n try {\n const loop = (i_mut) => {\n loop: while (true) {\n const i = i_mut;\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n if (predicate(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]())) {\n return i;\n }\n else {\n i_mut = (i + 1);\n continue loop;\n }\n }\n else {\n return void 0;\n }\n break;\n }\n };\n return loop(0);\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function findIndex(predicate, xs) {\n const matchValue = tryFindIndex(predicate, xs);\n if (matchValue == null) {\n indexNotFound();\n return -1;\n }\n else {\n return value_1(matchValue) | 0;\n }\n}\nexport function tryFindIndexBack(predicate, xs) {\n return tryFindIndexBack_1(predicate, toArray(xs));\n}\nexport function findIndexBack(predicate, xs) {\n const matchValue = tryFindIndexBack(predicate, xs);\n if (matchValue == null) {\n indexNotFound();\n return -1;\n }\n else {\n return value_1(matchValue) | 0;\n }\n}\nexport function fold(folder, state, xs) {\n const e = ofSeq(xs);\n try {\n let acc = state;\n while (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n acc = folder(acc, e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n return acc;\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function foldBack(folder, xs, state) {\n return foldBack_1(folder, toArray(xs), state);\n}\nexport function fold2(folder, state, xs, ys) {\n const e1 = ofSeq(xs);\n try {\n const e2 = ofSeq(ys);\n try {\n let acc = state;\n while (e1[\"System.Collections.IEnumerator.MoveNext\"]() && e2[\"System.Collections.IEnumerator.MoveNext\"]()) {\n acc = folder(acc, e1[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), e2[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n return acc;\n }\n finally {\n disposeSafe(e2);\n }\n }\n finally {\n disposeSafe(e1);\n }\n}\nexport function foldBack2(folder, xs, ys, state) {\n return foldBack2_1(folder, toArray(xs), toArray(ys), state);\n}\nexport function forAll(predicate, xs) {\n return !exists((x) => !predicate(x), xs);\n}\nexport function forAll2(predicate, xs, ys) {\n return !exists2((x, y) => !predicate(x, y), xs, ys);\n}\nexport function tryHead(xs) {\n if (isArrayLike(xs)) {\n return tryHead_1(xs);\n }\n else if (xs instanceof FSharpList) {\n return tryHead_2(xs);\n }\n else {\n const e = ofSeq(xs);\n try {\n return e[\"System.Collections.IEnumerator.MoveNext\"]() ? some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]()) : void 0;\n }\n finally {\n disposeSafe(e);\n }\n }\n}\nexport function head(xs) {\n const matchValue = tryHead(xs);\n if (matchValue == null) {\n throw new Error((SR_inputSequenceEmpty + \"\\\\nParameter name: \") + \"source\");\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function initialize(count, f) {\n return unfold((i) => ((i < count) ? [f(i), i + 1] : void 0), 0);\n}\nexport function initializeInfinite(f) {\n return initialize(2147483647, f);\n}\nexport function isEmpty(xs) {\n if (isArrayLike(xs)) {\n const a = xs;\n return a.length === 0;\n }\n else if (xs instanceof FSharpList) {\n return isEmpty_1(xs);\n }\n else {\n const e = ofSeq(xs);\n try {\n return !e[\"System.Collections.IEnumerator.MoveNext\"]();\n }\n finally {\n disposeSafe(e);\n }\n }\n}\nexport function tryItem(index, xs) {\n if (isArrayLike(xs)) {\n return tryItem_1(index, xs);\n }\n else if (xs instanceof FSharpList) {\n return tryItem_2(index, xs);\n }\n else {\n const e = ofSeq(xs);\n try {\n const loop = (index_1_mut) => {\n loop: while (true) {\n const index_1 = index_1_mut;\n if (!e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return void 0;\n }\n else if (index_1 === 0) {\n return some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else {\n index_1_mut = (index_1 - 1);\n continue loop;\n }\n break;\n }\n };\n return loop(index);\n }\n finally {\n disposeSafe(e);\n }\n }\n}\nexport function item(index, xs) {\n const matchValue = tryItem(index, xs);\n if (matchValue == null) {\n throw new Error((SR_notEnoughElements + \"\\\\nParameter name: \") + \"index\");\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function iterate(action, xs) {\n fold((unitVar, x) => {\n action(x);\n }, void 0, xs);\n}\nexport function iterate2(action, xs, ys) {\n fold2((unitVar, x, y) => {\n action(x, y);\n }, void 0, xs, ys);\n}\nexport function iterateIndexed(action, xs) {\n fold((i, x) => {\n action(i, x);\n return (i + 1) | 0;\n }, 0, xs);\n}\nexport function iterateIndexed2(action, xs, ys) {\n fold2((i, x, y) => {\n action(i, x, y);\n return (i + 1) | 0;\n }, 0, xs, ys);\n}\nexport function tryLast(xs) {\n const e = ofSeq(xs);\n try {\n const loop = (acc_mut) => {\n loop: while (true) {\n const acc = acc_mut;\n if (!e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return acc;\n }\n else {\n acc_mut = e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n continue loop;\n }\n break;\n }\n };\n return e[\"System.Collections.IEnumerator.MoveNext\"]() ? some(loop(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]())) : void 0;\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function last(xs) {\n const matchValue = tryLast(xs);\n if (matchValue == null) {\n throw new Error((SR_notEnoughElements + \"\\\\nParameter name: \") + \"source\");\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function length(xs) {\n if (isArrayLike(xs)) {\n const a = xs;\n return a.length | 0;\n }\n else if (xs instanceof FSharpList) {\n return length_1(xs) | 0;\n }\n else {\n const e = ofSeq(xs);\n try {\n let count = 0;\n while (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n count = ((count + 1) | 0);\n }\n return count | 0;\n }\n finally {\n disposeSafe(e);\n }\n }\n}\nexport function map(mapping, xs) {\n return generate(() => ofSeq(xs), (e) => (e[\"System.Collections.IEnumerator.MoveNext\"]() ? some(mapping(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]())) : void 0), (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function mapIndexed(mapping, xs) {\n return generateIndexed(() => ofSeq(xs), (i, e) => (e[\"System.Collections.IEnumerator.MoveNext\"]() ? some(mapping(i, e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]())) : void 0), (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function indexed(xs) {\n return mapIndexed((i, x) => [i, x], xs);\n}\nexport function map2(mapping, xs, ys) {\n return generate(() => [ofSeq(xs), ofSeq(ys)], (tupledArg) => {\n const e1 = tupledArg[0];\n const e2 = tupledArg[1];\n return (e1[\"System.Collections.IEnumerator.MoveNext\"]() && e2[\"System.Collections.IEnumerator.MoveNext\"]()) ? some(mapping(e1[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), e2[\"System.Collections.Generic.IEnumerator`1.get_Current\"]())) : void 0;\n }, (tupledArg_1) => {\n try {\n disposeSafe(tupledArg_1[0]);\n }\n finally {\n disposeSafe(tupledArg_1[1]);\n }\n });\n}\nexport function mapIndexed2(mapping, xs, ys) {\n return generateIndexed(() => [ofSeq(xs), ofSeq(ys)], (i, tupledArg) => {\n const e1 = tupledArg[0];\n const e2 = tupledArg[1];\n return (e1[\"System.Collections.IEnumerator.MoveNext\"]() && e2[\"System.Collections.IEnumerator.MoveNext\"]()) ? some(mapping(i, e1[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), e2[\"System.Collections.Generic.IEnumerator`1.get_Current\"]())) : void 0;\n }, (tupledArg_1) => {\n try {\n disposeSafe(tupledArg_1[0]);\n }\n finally {\n disposeSafe(tupledArg_1[1]);\n }\n });\n}\nexport function map3(mapping, xs, ys, zs) {\n return generate(() => [ofSeq(xs), ofSeq(ys), ofSeq(zs)], (tupledArg) => {\n const e1 = tupledArg[0];\n const e2 = tupledArg[1];\n const e3 = tupledArg[2];\n return ((e1[\"System.Collections.IEnumerator.MoveNext\"]() && e2[\"System.Collections.IEnumerator.MoveNext\"]()) && e3[\"System.Collections.IEnumerator.MoveNext\"]()) ? some(mapping(e1[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), e2[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), e3[\"System.Collections.Generic.IEnumerator`1.get_Current\"]())) : void 0;\n }, (tupledArg_1) => {\n try {\n disposeSafe(tupledArg_1[0]);\n }\n finally {\n try {\n disposeSafe(tupledArg_1[1]);\n }\n finally {\n disposeSafe(tupledArg_1[2]);\n }\n }\n });\n}\nexport function readOnly(xs) {\n checkNonNull(\"source\", xs);\n return map((x) => x, xs);\n}\nexport class CachedSeq$1 {\n constructor(cleanup, res) {\n this.cleanup = cleanup;\n this.res = res;\n }\n Dispose() {\n const _ = this;\n _.cleanup();\n }\n GetEnumerator() {\n const _ = this;\n return getEnumerator(_.res);\n }\n [Symbol.iterator]() {\n return toIterator(getEnumerator(this));\n }\n \"System.Collections.IEnumerable.GetEnumerator\"() {\n const _ = this;\n return getEnumerator(_.res);\n }\n}\nexport function CachedSeq$1_$reflection(gen0) {\n return class_type(\"SeqModule.CachedSeq`1\", [gen0], CachedSeq$1);\n}\nexport function CachedSeq$1_$ctor_Z7A8347D4(cleanup, res) {\n return new CachedSeq$1(cleanup, res);\n}\nexport function CachedSeq$1__Clear(_) {\n _.cleanup();\n}\nexport function cache(source) {\n checkNonNull(\"source\", source);\n const prefix = [];\n let enumeratorR = void 0;\n return CachedSeq$1_$ctor_Z7A8347D4(() => {\n Operators_Lock(prefix, () => {\n clear(prefix);\n let matchResult, e;\n if (enumeratorR != null) {\n if (value_1(enumeratorR) != null) {\n matchResult = 0;\n e = value_1(value_1(enumeratorR));\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0: {\n disposeSafe(e);\n break;\n }\n }\n enumeratorR = void 0;\n });\n }, unfold((i_1) => Operators_Lock(prefix, () => {\n if (i_1 < prefix.length) {\n return [prefix[i_1], i_1 + 1];\n }\n else {\n if (i_1 >= prefix.length) {\n let optEnumerator_2;\n if (enumeratorR != null) {\n optEnumerator_2 = value_1(enumeratorR);\n }\n else {\n const optEnumerator = getEnumerator(source);\n enumeratorR = some(optEnumerator);\n optEnumerator_2 = optEnumerator;\n }\n if (optEnumerator_2 == null) {\n }\n else {\n const enumerator = value_1(optEnumerator_2);\n if (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n void (prefix.push(enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]()));\n }\n else {\n disposeSafe(enumerator);\n enumeratorR = some(void 0);\n }\n }\n }\n if (i_1 < prefix.length) {\n return [prefix[i_1], i_1 + 1];\n }\n else {\n return void 0;\n }\n }\n }), 0));\n}\nexport function allPairs(xs, ys) {\n const ysCache = cache(ys);\n return delay(() => concat(map((x) => map((y) => [x, y], ysCache), xs)));\n}\nexport function mapFold(mapping, state, xs) {\n const patternInput = mapFold_1(mapping, state, toArray(xs));\n return [readOnly(patternInput[0]), patternInput[1]];\n}\nexport function mapFoldBack(mapping, xs, state) {\n const patternInput = mapFoldBack_1(mapping, toArray(xs), state);\n return [readOnly(patternInput[0]), patternInput[1]];\n}\nexport function tryPick(chooser, xs) {\n const e = ofSeq(xs);\n try {\n let res = void 0;\n while ((res == null) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n res = chooser(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n return res;\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function pick(chooser, xs) {\n const matchValue = tryPick(chooser, xs);\n if (matchValue == null) {\n return indexNotFound();\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function reduce(folder, xs) {\n const e = ofSeq(xs);\n try {\n const loop = (acc_mut) => {\n loop: while (true) {\n const acc = acc_mut;\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n acc_mut = folder(acc, e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n continue loop;\n }\n else {\n return acc;\n }\n break;\n }\n };\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return loop(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else {\n throw new Error(SR_inputSequenceEmpty);\n }\n }\n finally {\n disposeSafe(e);\n }\n}\nexport function reduceBack(folder, xs) {\n const arr = toArray(xs);\n if (arr.length > 0) {\n return arr.reduceRight(folder);\n }\n else {\n throw new Error(SR_inputSequenceEmpty);\n }\n}\nexport function replicate(n, x) {\n return initialize(n, (_arg) => x);\n}\nexport function reverse(xs) {\n return delay(() => ofArray(reverse_1(toArray(xs))));\n}\nexport function scan(folder, state, xs) {\n return delay(() => {\n let acc = state;\n return concat([singleton(state), map((x) => {\n acc = folder(acc, x);\n return acc;\n }, xs)]);\n });\n}\nexport function scanBack(folder, xs, state) {\n return delay(() => ofArray(scanBack_1(folder, toArray(xs), state)));\n}\nexport function skip(count, source) {\n return mkSeq(() => {\n const e = ofSeq(source);\n try {\n for (let _ = 1; _ <= count; _++) {\n if (!e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n throw new Error((SR_notEnoughElements + \"\\\\nParameter name: \") + \"source\");\n }\n }\n return Enumerator_enumerateThenFinally(() => {\n }, e);\n }\n catch (matchValue) {\n disposeSafe(e);\n throw matchValue;\n }\n });\n}\nexport function skipWhile(predicate, xs) {\n return delay(() => {\n let skipped = true;\n return filter((x) => {\n if (skipped) {\n skipped = predicate(x);\n }\n return !skipped;\n }, xs);\n });\n}\nexport function tail(xs) {\n return skip(1, xs);\n}\nexport function take(count, xs) {\n return generateIndexed(() => ofSeq(xs), (i, e) => {\n if (i < count) {\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else {\n throw new Error((SR_notEnoughElements + \"\\\\nParameter name: \") + \"source\");\n }\n }\n else {\n return void 0;\n }\n }, (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function takeWhile(predicate, xs) {\n return generate(() => ofSeq(xs), (e) => ((e[\"System.Collections.IEnumerator.MoveNext\"]() && predicate(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]())) ? some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]()) : void 0), (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function truncate(count, xs) {\n return generateIndexed(() => ofSeq(xs), (i, e) => (((i < count) && e[\"System.Collections.IEnumerator.MoveNext\"]()) ? some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]()) : void 0), (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function zip(xs, ys) {\n return map2((x, y) => [x, y], xs, ys);\n}\nexport function zip3(xs, ys, zs) {\n return map3((x, y, z) => [x, y, z], xs, ys, zs);\n}\nexport function collect(mapping, xs) {\n return delay(() => concat(map(mapping, xs)));\n}\nexport function where(predicate, xs) {\n return filter(predicate, xs);\n}\nexport function pairwise(xs) {\n return delay(() => ofArray(pairwise_1(toArray(xs))));\n}\nexport function splitInto(chunks, xs) {\n return delay(() => ofArray(splitInto_1(chunks, toArray(xs))));\n}\nexport function windowed(windowSize, xs) {\n return delay(() => ofArray(windowed_1(windowSize, toArray(xs))));\n}\nexport function transpose(xss) {\n return delay(() => ofArray(map_1(ofArray, transpose_1(map_1(toArray, toArray(xss))))));\n}\nexport function sortWith(comparer, xs) {\n return delay(() => {\n const arr = toArray(xs);\n arr.sort(comparer);\n return ofArray(arr);\n });\n}\nexport function sort(xs, comparer) {\n return sortWith((x, y) => comparer.Compare(x, y), xs);\n}\nexport function sortBy(projection, xs, comparer) {\n return sortWith((x, y) => comparer.Compare(projection(x), projection(y)), xs);\n}\nexport function sortDescending(xs, comparer) {\n return sortWith((x, y) => (comparer.Compare(x, y) * -1), xs);\n}\nexport function sortByDescending(projection, xs, comparer) {\n return sortWith((x, y) => (comparer.Compare(projection(x), projection(y)) * -1), xs);\n}\nexport function sum(xs, adder) {\n return fold((acc, x) => adder.Add(acc, x), adder.GetZero(), xs);\n}\nexport function sumBy(f, xs, adder) {\n return fold((acc, x) => adder.Add(acc, f(x)), adder.GetZero(), xs);\n}\nexport function maxBy(projection, xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(projection(y), projection(x)) > 0) ? y : x), xs);\n}\nexport function max(xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(y, x) > 0) ? y : x), xs);\n}\nexport function minBy(projection, xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(projection(y), projection(x)) > 0) ? x : y), xs);\n}\nexport function min(xs, comparer) {\n return reduce((x, y) => ((comparer.Compare(y, x) > 0) ? x : y), xs);\n}\nexport function average(xs, averager) {\n let count = 0;\n const total = fold((acc, x) => {\n count = ((count + 1) | 0);\n return averager.Add(acc, x);\n }, averager.GetZero(), xs);\n if (count === 0) {\n throw new Error((SR_inputSequenceEmpty + \"\\\\nParameter name: \") + \"source\");\n }\n else {\n return averager.DivideByInt(total, count);\n }\n}\nexport function averageBy(f, xs, averager) {\n let count = 0;\n const total = fold((acc, x) => {\n count = ((count + 1) | 0);\n return averager.Add(acc, f(x));\n }, averager.GetZero(), xs);\n if (count === 0) {\n throw new Error((SR_inputSequenceEmpty + \"\\\\nParameter name: \") + \"source\");\n }\n else {\n return averager.DivideByInt(total, count);\n }\n}\nexport function permute(f, xs) {\n return delay(() => ofArray(permute_1(f, toArray(xs))));\n}\nexport function chunkBySize(chunkSize, xs) {\n return delay(() => ofArray(chunkBySize_1(chunkSize, toArray(xs))));\n}\nexport function insertAt(index, y, xs) {\n let isDone = false;\n if (index < 0) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return generateIndexed(() => ofSeq(xs), (i, e) => {\n if ((isDone ? true : (i < index)) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else if (i === index) {\n isDone = true;\n return some(y);\n }\n else {\n if (!isDone) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return void 0;\n }\n }, (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function insertManyAt(index, ys, xs) {\n let status = -1;\n if (index < 0) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return generateIndexed(() => [ofSeq(xs), ofSeq(ys)], (i, tupledArg) => {\n const e1 = tupledArg[0];\n const e2 = tupledArg[1];\n if (i === index) {\n status = 0;\n }\n let inserted;\n if (status === 0) {\n if (e2[\"System.Collections.IEnumerator.MoveNext\"]()) {\n inserted = some(e2[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else {\n status = 1;\n inserted = void 0;\n }\n }\n else {\n inserted = void 0;\n }\n if (inserted == null) {\n if (e1[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return some(e1[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else {\n if (status < 1) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return void 0;\n }\n }\n else {\n return some(value_1(inserted));\n }\n }, (tupledArg_1) => {\n disposeSafe(tupledArg_1[0]);\n disposeSafe(tupledArg_1[1]);\n });\n}\nexport function removeAt(index, xs) {\n let isDone = false;\n if (index < 0) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return generateIndexed(() => ofSeq(xs), (i, e) => {\n if ((isDone ? true : (i < index)) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else if ((i === index) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n isDone = true;\n return e[\"System.Collections.IEnumerator.MoveNext\"]() ? some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]()) : void 0;\n }\n else {\n if (!isDone) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return void 0;\n }\n }, (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function removeManyAt(index, count, xs) {\n if (index < 0) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return generateIndexed(() => ofSeq(xs), (i, e) => {\n if (i < index) {\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n }\n else {\n if (i === index) {\n for (let _ = 1; _ <= count; _++) {\n if (!e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"count\");\n }\n }\n }\n return e[\"System.Collections.IEnumerator.MoveNext\"]() ? some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]()) : void 0;\n }\n }, (e_1) => {\n disposeSafe(e_1);\n });\n}\nexport function updateAt(index, y, xs) {\n let isDone = false;\n if (index < 0) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return generateIndexed(() => ofSeq(xs), (i, e) => {\n if ((isDone ? true : (i < index)) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return some(e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]());\n }\n else if ((i === index) && e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n isDone = true;\n return some(y);\n }\n else {\n if (!isDone) {\n throw new Error((SR_indexOutOfBounds + \"\\\\nParameter name: \") + \"index\");\n }\n return void 0;\n }\n }, (e_1) => {\n disposeSafe(e_1);\n });\n}\n","import { disposeSafe, defaultOf, structuralHash, equals } from \"./Util.js\";\nimport { HashIdentity_Structural, ComparisonIdentity_Structural } from \"./FSharp.Collections.js\";\nimport { StringBuilder__Append_Z721C83C5 } from \"./System.Text.js\";\nexport const LanguagePrimitives_GenericEqualityComparer = {\n \"System.Collections.IEqualityComparer.Equals541DA560\"(x, y) {\n return equals(x, y);\n },\n \"System.Collections.IEqualityComparer.GetHashCode4E60E31B\"(x_1) {\n return structuralHash(x_1);\n },\n};\nexport const LanguagePrimitives_GenericEqualityERComparer = {\n \"System.Collections.IEqualityComparer.Equals541DA560\"(x, y) {\n return equals(x, y);\n },\n \"System.Collections.IEqualityComparer.GetHashCode4E60E31B\"(x_1) {\n return structuralHash(x_1);\n },\n};\nexport function LanguagePrimitives_FastGenericComparer() {\n return ComparisonIdentity_Structural();\n}\nexport function LanguagePrimitives_FastGenericComparerFromTable() {\n return ComparisonIdentity_Structural();\n}\nexport function LanguagePrimitives_FastGenericEqualityComparer() {\n return HashIdentity_Structural();\n}\nexport function LanguagePrimitives_FastGenericEqualityComparerFromTable() {\n return HashIdentity_Structural();\n}\nexport function Operators_Failure(message) {\n return new Error(message);\n}\nexport function Operators_FailurePattern(exn) {\n return exn.message;\n}\nexport function Operators_NullArg(x) {\n throw new Error(x);\n}\nexport function Operators_Using(resource, action) {\n try {\n return action(resource);\n }\n finally {\n if (equals(resource, defaultOf())) {\n }\n else {\n let copyOfStruct = resource;\n disposeSafe(copyOfStruct);\n }\n }\n}\nexport function Operators_Lock(_lockObj, action) {\n return action();\n}\nexport function ExtraTopLevelOperators_LazyPattern(input) {\n return input.Value;\n}\nexport function PrintfModule_PrintFormatToStringBuilderThen(continuation, builder, format) {\n return format.cont((s) => {\n StringBuilder__Append_Z721C83C5(builder, s);\n return continuation();\n });\n}\nexport function PrintfModule_PrintFormatToStringBuilder(builder, format) {\n return PrintfModule_PrintFormatToStringBuilderThen(() => {\n }, builder, format);\n}\n","import { equals } from \"./Util.js\";\nimport { Union } from \"./Types.js\";\nconst CaseRules = {\n None: 0,\n LowerFirst: 1,\n SnakeCase: 2,\n SnakeCaseAllCaps: 3,\n KebabCase: 4,\n};\nfunction dashify(str, separator) {\n return str.replace(/[a-z]?[A-Z]/g, (m) => m.length === 1\n ? m.toLowerCase()\n : m.charAt(0) + separator + m.charAt(1).toLowerCase());\n}\nfunction changeCase(str, caseRule) {\n switch (caseRule) {\n case CaseRules.LowerFirst:\n return str.charAt(0).toLowerCase() + str.slice(1);\n case CaseRules.SnakeCase:\n return dashify(str, \"_\");\n case CaseRules.SnakeCaseAllCaps:\n return dashify(str, \"_\").toUpperCase();\n case CaseRules.KebabCase:\n return dashify(str, \"-\");\n case CaseRules.None:\n default:\n return str;\n }\n}\nexport function keyValueList(fields, caseRule = CaseRules.None) {\n const obj = {};\n const definedCaseRule = caseRule;\n function fail(kvPair) {\n throw new Error(\"Cannot infer key and value of \" + String(kvPair));\n }\n function assign(key, caseRule, value) {\n key = changeCase(key, caseRule);\n obj[key] = value;\n }\n for (let kvPair of fields) {\n let caseRule = CaseRules.None;\n if (kvPair == null) {\n fail(kvPair);\n }\n // Deflate unions and use the defined case rule\n if (kvPair instanceof Union) {\n const name = kvPair.cases()[kvPair.tag];\n kvPair = kvPair.fields.length === 0 ? name : [name].concat(kvPair.fields);\n caseRule = definedCaseRule;\n }\n if (Array.isArray(kvPair)) {\n switch (kvPair.length) {\n case 0:\n fail(kvPair);\n break;\n case 1:\n assign(kvPair[0], caseRule, true);\n break;\n case 2:\n const value = kvPair[1];\n assign(kvPair[0], caseRule, value);\n break;\n default:\n assign(kvPair[0], caseRule, kvPair.slice(1));\n }\n }\n else if (typeof kvPair === \"string\") {\n assign(kvPair, caseRule, true);\n }\n else {\n fail(kvPair);\n }\n }\n return obj;\n}\n// TODO: Move these methods to Map and Set modules\nexport function containsValue(v, map) {\n for (const kv of map) {\n if (equals(v, kv[1])) {\n return true;\n }\n }\n return false;\n}\nexport function tryGetValue(map, key, defaultValue) {\n if (map.has(key)) {\n defaultValue.contents = map.get(key);\n return true;\n }\n return false;\n}\nexport function addToSet(v, set) {\n if (set.has(v)) {\n return false;\n }\n set.add(v);\n return true;\n}\nexport function addToDict(dict, k, v) {\n if (dict.has(k)) {\n throw new Error(\"An item with the same key has already been added. Key: \" + k);\n }\n dict.set(k, v);\n}\nexport function getItemFromDict(map, key) {\n if (map.has(key)) {\n return map.get(key);\n }\n else {\n throw new Error(`The given key '${key}' was not present in the dictionary.`);\n }\n}\n","import { disposeSafe, defaultOf, equals, toIterator, getEnumerator } from \"./Util.js\";\nimport { iterate, map, delay, toArray, iterateIndexed, concat } from \"./Seq.js\";\nimport { value as value_1 } from \"./Option.js\";\nimport { FSharpRef } from \"./Types.js\";\nimport { class_type } from \"./Reflection.js\";\nimport { getItemFromDict, tryGetValue } from \"./MapUtil.js\";\nimport { format } from \"./String.js\";\nexport class Dictionary {\n constructor(pairs, comparer) {\n const this$ = new FSharpRef(defaultOf());\n this.comparer = comparer;\n this$.contents = this;\n this.hashMap = (new Map([]));\n this[\"init@9\"] = 1;\n const enumerator = getEnumerator(pairs);\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const pair = enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n Dictionary__Add_5BDDA1(this$.contents, pair[0], pair[1]);\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n }\n get [Symbol.toStringTag]() {\n return \"Dictionary\";\n }\n toJSON() {\n const this$ = this;\n return Array.from(this$);\n }\n \"System.Collections.IEnumerable.GetEnumerator\"() {\n const this$ = this;\n return getEnumerator(this$);\n }\n GetEnumerator() {\n const this$ = this;\n return getEnumerator(concat(this$.hashMap.values()));\n }\n [Symbol.iterator]() {\n return toIterator(getEnumerator(this));\n }\n \"System.Collections.Generic.ICollection`1.Add2B595\"(item) {\n const this$ = this;\n Dictionary__Add_5BDDA1(this$, item[0], item[1]);\n }\n \"System.Collections.Generic.ICollection`1.Clear\"() {\n const this$ = this;\n Dictionary__Clear(this$);\n }\n \"System.Collections.Generic.ICollection`1.Contains2B595\"(item) {\n const this$ = this;\n const matchValue = Dictionary__TryFind_2B595(this$, item[0]);\n let matchResult, p_1;\n if (matchValue != null) {\n if (equals(value_1(matchValue)[1], item[1])) {\n matchResult = 0;\n p_1 = value_1(matchValue);\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0:\n return true;\n default:\n return false;\n }\n }\n \"System.Collections.Generic.ICollection`1.CopyToZ3B4C077E\"(array, arrayIndex) {\n const this$ = this;\n iterateIndexed((i, e) => {\n array[arrayIndex + i] = e;\n }, this$);\n }\n \"System.Collections.Generic.ICollection`1.get_Count\"() {\n const this$ = this;\n return Dictionary__get_Count(this$) | 0;\n }\n \"System.Collections.Generic.ICollection`1.get_IsReadOnly\"() {\n return false;\n }\n \"System.Collections.Generic.ICollection`1.Remove2B595\"(item) {\n const this$ = this;\n const matchValue = Dictionary__TryFind_2B595(this$, item[0]);\n if (matchValue != null) {\n if (equals(value_1(matchValue)[1], item[1])) {\n Dictionary__Remove_2B595(this$, item[0]);\n }\n return true;\n }\n else {\n return false;\n }\n }\n \"System.Collections.Generic.IDictionary`2.Add5BDDA1\"(key, value) {\n const this$ = this;\n Dictionary__Add_5BDDA1(this$, key, value);\n }\n \"System.Collections.Generic.IDictionary`2.ContainsKey2B595\"(key) {\n const this$ = this;\n return Dictionary__ContainsKey_2B595(this$, key);\n }\n \"System.Collections.Generic.IDictionary`2.get_Item2B595\"(key) {\n const this$ = this;\n return Dictionary__get_Item_2B595(this$, key);\n }\n \"System.Collections.Generic.IDictionary`2.set_Item5BDDA1\"(key, v) {\n const this$ = this;\n Dictionary__set_Item_5BDDA1(this$, key, v);\n }\n \"System.Collections.Generic.IDictionary`2.get_Keys\"() {\n const this$ = this;\n return toArray(delay(() => map((pair) => pair[0], this$)));\n }\n \"System.Collections.Generic.IDictionary`2.Remove2B595\"(key) {\n const this$ = this;\n return Dictionary__Remove_2B595(this$, key);\n }\n \"System.Collections.Generic.IDictionary`2.TryGetValue6DC89625\"(key, value) {\n const this$ = this;\n const matchValue = Dictionary__TryFind_2B595(this$, key);\n if (matchValue != null) {\n const pair = value_1(matchValue);\n value.contents = pair[1];\n return true;\n }\n else {\n return false;\n }\n }\n \"System.Collections.Generic.IDictionary`2.get_Values\"() {\n const this$ = this;\n return toArray(delay(() => map((pair) => pair[1], this$)));\n }\n get size() {\n const this$ = this;\n return Dictionary__get_Count(this$) | 0;\n }\n clear() {\n const this$ = this;\n Dictionary__Clear(this$);\n }\n delete(k) {\n const this$ = this;\n return Dictionary__Remove_2B595(this$, k);\n }\n entries() {\n const this$ = this;\n return map((p) => [p[0], p[1]], this$);\n }\n get(k) {\n const this$ = this;\n return Dictionary__get_Item_2B595(this$, k);\n }\n has(k) {\n const this$ = this;\n return Dictionary__ContainsKey_2B595(this$, k);\n }\n keys() {\n const this$ = this;\n return map((p) => p[0], this$);\n }\n set(k, v) {\n const this$ = this;\n Dictionary__set_Item_5BDDA1(this$, k, v);\n return this$;\n }\n values() {\n const this$ = this;\n return map((p) => p[1], this$);\n }\n forEach(f, thisArg) {\n const this$ = this;\n iterate((p) => {\n f(p[1], p[0], this$);\n }, this$);\n }\n}\nexport function Dictionary_$reflection(gen0, gen1) {\n return class_type(\"Fable.Collections.Dictionary\", [gen0, gen1], Dictionary);\n}\nexport function Dictionary_$ctor_6623D9B3(pairs, comparer) {\n return new Dictionary(pairs, comparer);\n}\nfunction Dictionary__TryFindIndex_2B595(this$, k) {\n const h = this$.comparer.GetHashCode(k) | 0;\n let matchValue;\n let outArg = defaultOf();\n matchValue = [tryGetValue(this$.hashMap, h, new FSharpRef(() => outArg, (v) => {\n outArg = v;\n })), outArg];\n if (matchValue[0]) {\n return [true, h, matchValue[1].findIndex((pair) => this$.comparer.Equals(k, pair[0]))];\n }\n else {\n return [false, h, -1];\n }\n}\nexport function Dictionary__TryFind_2B595(this$, k) {\n const matchValue = Dictionary__TryFindIndex_2B595(this$, k);\n let matchResult;\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n matchResult = 0;\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0:\n return getItemFromDict(this$.hashMap, matchValue[1])[matchValue[2]];\n default:\n return void 0;\n }\n}\nexport function Dictionary__get_Comparer(this$) {\n return this$.comparer;\n}\nexport function Dictionary__Clear(this$) {\n this$.hashMap.clear();\n}\nexport function Dictionary__get_Count(this$) {\n let count = 0;\n let enumerator = getEnumerator(this$.hashMap.values());\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const pairs = enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n count = ((count + pairs.length) | 0);\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n return count | 0;\n}\nexport function Dictionary__get_Item_2B595(this$, k) {\n const matchValue = Dictionary__TryFind_2B595(this$, k);\n if (matchValue != null) {\n return value_1(matchValue)[1];\n }\n else {\n throw new Error(\"The item was not found in collection\");\n }\n}\nexport function Dictionary__set_Item_5BDDA1(this$, k, v) {\n const matchValue = Dictionary__TryFindIndex_2B595(this$, k);\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n getItemFromDict(this$.hashMap, matchValue[1])[matchValue[2]] = [k, v];\n }\n else {\n const value = void (getItemFromDict(this$.hashMap, matchValue[1]).push([k, v]));\n }\n }\n else {\n this$.hashMap.set(matchValue[1], [[k, v]]);\n }\n}\nexport function Dictionary__Add_5BDDA1(this$, k, v) {\n const matchValue = Dictionary__TryFindIndex_2B595(this$, k);\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n throw new Error(format(\"An item with the same key has already been added. Key: {0}\", k));\n }\n else {\n const value = void (getItemFromDict(this$.hashMap, matchValue[1]).push([k, v]));\n }\n }\n else {\n this$.hashMap.set(matchValue[1], [[k, v]]);\n }\n}\nexport function Dictionary__ContainsKey_2B595(this$, k) {\n const matchValue = Dictionary__TryFindIndex_2B595(this$, k);\n let matchResult;\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n matchResult = 0;\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0:\n return true;\n default:\n return false;\n }\n}\nexport function Dictionary__Remove_2B595(this$, k) {\n const matchValue = Dictionary__TryFindIndex_2B595(this$, k);\n let matchResult;\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n matchResult = 0;\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0: {\n getItemFromDict(this$.hashMap, matchValue[1]).splice(matchValue[2], 1);\n return true;\n }\n default:\n return false;\n }\n}\n","namespace Fable.SimpleJson\n\nopen System\nopen FSharp.Reflection\nopen Fable.Core\nopen System.Reflection\nopen System.Collections.Generic\n\n[]\nmodule Converter =\n let (|PrimitiveType|_|) (primType: Type) =\n match primType.FullName with\n | \"System.String\" -> Some TypeInfo.String\n | \"System.Char\" -> Some TypeInfo.Char\n | \"System.Int16\" -> Some TypeInfo.Short\n | \"System.Int32\" -> Some TypeInfo.Int32\n | \"Microsoft.FSharp.Core.int64`1\"\n | \"System.Int64\" -> Some TypeInfo.Long\n | \"System.UInt16\" -> Some TypeInfo.UInt16\n | \"System.UInt32\" -> Some TypeInfo.UInt32\n | \"System.UInt64\" -> Some TypeInfo.UInt64\n | \"System.DateTime\" -> Some TypeInfo.DateTime\n | \"System.DateOnly\" -> Some TypeInfo.DateOnly\n | \"System.TimeOnly\" -> Some TypeInfo.TimeOnly\n | \"System.TimeSpan\" -> Some TypeInfo.TimeSpan\n | \"System.DateTimeOffset\" -> Some TypeInfo.DateTimeOffset\n | \"System.Boolean\" -> Some TypeInfo.Bool\n | \"System.Single\" -> Some TypeInfo.Float32\n | \"System.Double\" -> Some TypeInfo.Float\n | \"Microsoft.FSharp.Core.decimal`1\"\n | \"System.Decimal\" -> Some TypeInfo.Decimal\n | \"System.Numerics.BigInteger\" -> Some TypeInfo.BigInt\n | \"Microsoft.FSharp.Core.Unit\" -> Some TypeInfo.Unit\n | \"System.Guid\" -> Some TypeInfo.Guid\n | \"System.Byte\" -> Some TypeInfo.Byte\n | \"System.SByte\" -> Some TypeInfo.SByte\n | \"System.Object\" -> Some TypeInfo.Object\n | \"System.Uri\" -> Some TypeInfo.Uri\n | _ -> None\n\n let (|RecordType|_|) (t: Type) =\n if FSharpType.IsRecord t\n then\n FSharpType.GetRecordFields t\n |> Array.map (fun field -> field, field.Name, field.PropertyType)\n |> Some\n else None\n\n let (|SetType|_|) (t: Type) =\n if t.FullName.StartsWith \"Microsoft.FSharp.Collections.FSharpSet`1\"\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let (|Nullable|_|) (t: Type) =\n if t.FullName.StartsWith \"System.Nullable`1\"\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let (|UnionType|_|) (t: Type) =\n if FSharpType.IsUnion t\n then\n FSharpType.GetUnionCases t\n |> Array.map (fun info ->\n let caseName = info.Name\n let caseTypes = info.GetFields() |> Array.map (fun prop -> prop.PropertyType)\n caseName, info, caseTypes)\n |> Some\n else None\n\n let (|MapType|_|) (t: Type) =\n if (t.FullName.StartsWith \"Microsoft.FSharp.Collections.FSharpMap`2\")\n then\n let genArgs = t.GetGenericArguments()\n Some (genArgs.[0], genArgs.[1])\n else None\n\n let (|ListType|_|) (t: Type) =\n if (t.FullName.StartsWith \"Microsoft.FSharp.Collections.FSharpList`1\")\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let rec flattenFuncTypes (typeDef: Type) =\n [| if FSharpType.IsFunction typeDef\n then let (domain, range) = FSharpType.GetFunctionElements typeDef\n yield! flattenFuncTypes domain\n yield! flattenFuncTypes range\n else yield typeDef |]\n\n let (|FuncType|_|) (t: Type) =\n if FSharpType.IsFunction t\n then flattenFuncTypes t |> Some\n else None\n\n let (|ArrayType|_|) (t:Type) =\n if t.IsArray\n then t.GetElementType() |> Some\n else None\n\n let (|OptionType|_|) (t:Type) =\n if (t.FullName.StartsWith \"Microsoft.FSharp.Core.FSharpOption`1\")\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let (|TupleType|_|) (t: Type) =\n if FSharpType.IsTuple t\n then FSharpType.GetTupleElements(t) |> Some\n else None\n\n let (|SeqType|_|) (t: Type) =\n if t.FullName.StartsWith \"System.Collections.Generic.IEnumerable`1\"\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let (|DictionaryType|_|) (t: Type) =\n if t.FullName.StartsWith \"System.Collections.Generic.Dictionary\"\n then\n let genArgs = t.GetGenericArguments()\n Some (genArgs.[0], genArgs.[1])\n else\n None\n\n let (|ResizeArrayType|_|) (t: Type) =\n if t.FullName.StartsWith \"System.Collections.Generic.List\"\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let (|HashSetType|_|) (t: Type) =\n if t.FullName.StartsWith \"System.Collections.Generic.HashSet\"\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let (|AsyncType|_|) (t:Type) =\n if t.FullName.StartsWith \"Microsoft.FSharp.Control.FSharpAsync`1\"\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let (|PromiseType|_|) (t:Type) =\n if t.FullName.StartsWith \"Fable.Core.JS.Promise`1\"\n then t.GetGenericArguments().[0] |> Some\n else None\n\n let private lazyToDelayed (l:Lazy<_>) = fun () -> l.Value\n\n let (|EnumType|_|) (t: Type) =\n if t.IsEnum\n then Enum.GetUnderlyingType(t) |> Some\n else None\n\n let rec private _createTypeInfo (resolvedType: Type) : Fable.SimpleJson.TypeInfo =\n match resolvedType with\n | PrimitiveType typeInfo -> typeInfo\n | FuncType (types) -> TypeInfo.Func <| lazyToDelayed (lazy (Array.map createTypeInfo types))\n | RecordType fields ->\n let l = lazy (\n let fields =\n [| for (field, fieldName, fieldType) in fields ->\n { PropertyInfo = field\n FieldName = fieldName;\n FieldType = createTypeInfo fieldType } |]\n fields, resolvedType)\n TypeInfo.Record (lazyToDelayed l)\n\n | UnionType cases ->\n let l = lazy (\n [| for (caseName, caseInfo, caseTypes) in cases ->\n { CaseName = caseName;\n Info = caseInfo;\n CaseTypes = Array.map createTypeInfo caseTypes } |], resolvedType)\n TypeInfo.Union (lazyToDelayed l)\n\n | EnumType elemType -> TypeInfo.Enum (lazyToDelayed <| lazy (createTypeInfo elemType, resolvedType))\n | ListType elemType -> TypeInfo.List (lazyToDelayed <| lazy (createTypeInfo elemType))\n | ResizeArrayType elemType -> TypeInfo.ResizeArray (lazyToDelayed <| lazy (createTypeInfo elemType))\n | HashSetType elemType -> TypeInfo.HashSet (lazyToDelayed <| lazy (createTypeInfo elemType))\n | ArrayType elemType -> TypeInfo.Array (lazyToDelayed <| lazy (createTypeInfo elemType))\n // Checking for tuples has to happen after checking for arrays\n | TupleType types -> TypeInfo.Tuple (lazyToDelayed <| lazy (Array.map createTypeInfo types))\n | OptionType elemType -> TypeInfo.Option (lazyToDelayed <| lazy (createTypeInfo elemType))\n | Nullable elemType -> TypeInfo.Option (lazyToDelayed <| lazy (createTypeInfo elemType))\n | SetType elemType -> TypeInfo.Set (lazyToDelayed <| lazy (createTypeInfo elemType))\n | MapType (keyType, valueType) -> TypeInfo.Map (lazyToDelayed <| lazy (createTypeInfo keyType, createTypeInfo valueType))\n | DictionaryType (keyType, valueType) -> TypeInfo.Dictionary (lazyToDelayed <| lazy (createTypeInfo keyType, createTypeInfo valueType, valueType))\n | SeqType elemType -> TypeInfo.Seq (lazyToDelayed <| lazy (createTypeInfo elemType))\n | AsyncType elemType -> TypeInfo.Async (lazyToDelayed <| lazy (createTypeInfo elemType))\n | PromiseType elemType -> TypeInfo.Promise (lazyToDelayed <| lazy (createTypeInfo elemType))\n | _ -> TypeInfo.Any (lazyToDelayed <| lazy (resolvedType))\n\n and private typeInfoCache = Dictionary()\n\n and createTypeInfo (resolvedType: Type) : Fable.SimpleJson.TypeInfo =\n match typeInfoCache.TryGetValue resolvedType with\n | true, ti -> ti\n | false, _ ->\n let ti = _createTypeInfo resolvedType\n // see https://github.com/fable-compiler/Fable/issues/1871\n // Type equality doesn't work for anonymous records - all anon records are considered equal.\n // For anonymous records, the name is the empty string.\n let notAnonymousRecord =\n not (String.IsNullOrEmpty resolvedType.FullName)\n && not (resolvedType.FullName.EndsWith(\"`1[]\"))\n && not (resolvedType.FullName.EndsWith(\"`2[]\"))\n\n if notAnonymousRecord then\n typeInfoCache.[resolvedType] <- ti\n ti\n else\n ti\n\n type Fable.SimpleJson.TypeInfo with\n static member inline createFrom<'t> () : Fable.SimpleJson.TypeInfo =\n createTypeInfo typeof<'t>\n\n /// returns whether a type is primitive\n let isPrimitive = function\n | TypeInfo.Unit\n | TypeInfo.String\n | TypeInfo.UInt16\n | TypeInfo.UInt32\n | TypeInfo.UInt64\n | TypeInfo.Int32\n | TypeInfo.Bool\n | TypeInfo.Float32\n | TypeInfo.Float\n | TypeInfo.Decimal\n | TypeInfo.Short\n | TypeInfo.Long\n | TypeInfo.Byte\n | TypeInfo.DateTime\n | TypeInfo.DateTimeOffset\n | TypeInfo.DateOnly\n | TypeInfo.TimeOnly\n | TypeInfo.BigInt\n | TypeInfo.Guid\n | TypeInfo.Option _ -> true\n | otherwise -> false\n\n /// returns whether the discrimiated union type is like a enum\n let enumUnion = function\n | TypeInfo.Union getCases ->\n getCases()\n |> fst\n |> Array.forall (fun case -> Array.isEmpty case.CaseTypes)\n | otherwise -> false\n","import { ensureErrorOrException } from './Types.js';\nexport class CancellationToken {\n constructor(cancelled = false) {\n this._id = 0;\n this._cancelled = cancelled;\n this._listeners = new Map();\n }\n get isCancelled() {\n return this._cancelled;\n }\n cancel() {\n if (!this._cancelled) {\n this._cancelled = true;\n for (const [, listener] of this._listeners) {\n listener();\n }\n }\n }\n addListener(f) {\n const id = this._id;\n this._listeners.set(this._id++, f);\n return id;\n }\n removeListener(id) {\n return this._listeners.delete(id);\n }\n register(f, state) {\n const $ = this;\n const id = this.addListener(state == null ? f : () => f(state));\n return { Dispose() { $.removeListener(id); } };\n }\n Dispose() {\n // Implement IDisposable for compatibility but do nothing\n // According to docs, calling Dispose does not trigger cancellation\n // https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtokensource.dispose?view=net-6.0\n }\n}\nexport class OperationCanceledError extends Error {\n constructor() {\n super(\"The operation was canceled\");\n Object.setPrototypeOf(this, OperationCanceledError.prototype);\n }\n}\nexport class Trampoline {\n static get maxTrampolineCallCount() {\n return 2000;\n }\n constructor() {\n this.callCount = 0;\n }\n incrementAndCheck() {\n return this.callCount++ > Trampoline.maxTrampolineCallCount;\n }\n hijack(f) {\n this.callCount = 0;\n setTimeout(f, 0);\n }\n}\nexport function protectedCont(f) {\n return (ctx) => {\n if (ctx.cancelToken.isCancelled) {\n ctx.onCancel(new OperationCanceledError());\n }\n else if (ctx.trampoline.incrementAndCheck()) {\n ctx.trampoline.hijack(() => {\n try {\n f(ctx);\n }\n catch (err) {\n ctx.onError(ensureErrorOrException(err));\n }\n });\n }\n else {\n try {\n f(ctx);\n }\n catch (err) {\n ctx.onError(ensureErrorOrException(err));\n }\n }\n };\n}\nexport function protectedBind(computation, binder) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: (x) => {\n try {\n binder(x)(ctx);\n }\n catch (err) {\n ctx.onError(ensureErrorOrException(err));\n }\n },\n onError: ctx.onError,\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n}\nexport function protectedReturn(value) {\n return protectedCont((ctx) => ctx.onSuccess(value));\n}\nexport class AsyncBuilder {\n Bind(computation, binder) {\n return protectedBind(computation, binder);\n }\n Combine(computation1, computation2) {\n return this.Bind(computation1, () => computation2);\n }\n Delay(generator) {\n return protectedCont((ctx) => generator()(ctx));\n }\n For(sequence, body) {\n const iter = sequence[Symbol.iterator]();\n let cur = iter.next();\n return this.While(() => !cur.done, this.Delay(() => {\n const res = body(cur.value);\n cur = iter.next();\n return res;\n }));\n }\n Return(value) {\n return protectedReturn(value);\n }\n ReturnFrom(computation) {\n return computation;\n }\n TryFinally(computation, compensation) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: (x) => {\n compensation();\n ctx.onSuccess(x);\n },\n onError: (x) => {\n compensation();\n ctx.onError(x);\n },\n onCancel: (x) => {\n compensation();\n ctx.onCancel(x);\n },\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n }\n TryWith(computation, catchHandler) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: ctx.onSuccess,\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n onError: (ex) => {\n try {\n catchHandler(ex)(ctx);\n }\n catch (err) {\n ctx.onError(ensureErrorOrException(err));\n }\n },\n });\n });\n }\n Using(resource, binder) {\n return this.TryFinally(binder(resource), () => resource.Dispose());\n }\n While(guard, computation) {\n if (guard()) {\n return this.Bind(computation, () => this.While(guard, computation));\n }\n else {\n return this.Return(void 0);\n }\n }\n Zero() {\n return protectedCont((ctx) => ctx.onSuccess(void 0));\n }\n}\nexport const singleton = new AsyncBuilder();\n","import { Union } from \"./Types.js\";\nimport { union_type } from \"./Reflection.js\";\nimport { some } from \"./Option.js\";\nexport function FSharpResult$2_Ok(ResultValue) {\n return new FSharpResult$2(0, [ResultValue]);\n}\nexport function FSharpResult$2_Error(ErrorValue) {\n return new FSharpResult$2(1, [ErrorValue]);\n}\nexport class FSharpResult$2 extends Union {\n constructor(tag, fields) {\n super();\n this.tag = tag;\n this.fields = fields;\n }\n cases() {\n return [\"Ok\", \"Error\"];\n }\n}\nexport function FSharpResult$2_$reflection(gen0, gen1) {\n return union_type(\"FSharp.Core.FSharpResult`2\", [gen0, gen1], FSharpResult$2, () => [[[\"ResultValue\", gen0]], [[\"ErrorValue\", gen1]]]);\n}\nexport function Result_Map(mapping, result) {\n if (result.tag === /* Ok */ 0) {\n return FSharpResult$2_Ok(mapping(result.fields[0]));\n }\n else {\n return FSharpResult$2_Error(result.fields[0]);\n }\n}\nexport function Result_MapError(mapping, result) {\n if (result.tag === /* Ok */ 0) {\n return FSharpResult$2_Ok(result.fields[0]);\n }\n else {\n return FSharpResult$2_Error(mapping(result.fields[0]));\n }\n}\nexport function Result_Bind(binder, result) {\n if (result.tag === /* Ok */ 0) {\n return binder(result.fields[0]);\n }\n else {\n return FSharpResult$2_Error(result.fields[0]);\n }\n}\nexport function FSharpChoice$2_Choice1Of2(Item) {\n return new FSharpChoice$2(0, [Item]);\n}\nexport function FSharpChoice$2_Choice2Of2(Item) {\n return new FSharpChoice$2(1, [Item]);\n}\nexport class FSharpChoice$2 extends Union {\n constructor(tag, fields) {\n super();\n this.tag = tag;\n this.fields = fields;\n }\n cases() {\n return [\"Choice1Of2\", \"Choice2Of2\"];\n }\n}\nexport function FSharpChoice$2_$reflection(gen0, gen1) {\n return union_type(\"FSharp.Core.FSharpChoice`2\", [gen0, gen1], FSharpChoice$2, () => [[[\"Item\", gen0]], [[\"Item\", gen1]]]);\n}\nexport function FSharpChoice$3_Choice1Of3(Item) {\n return new FSharpChoice$3(0, [Item]);\n}\nexport function FSharpChoice$3_Choice2Of3(Item) {\n return new FSharpChoice$3(1, [Item]);\n}\nexport function FSharpChoice$3_Choice3Of3(Item) {\n return new FSharpChoice$3(2, [Item]);\n}\nexport class FSharpChoice$3 extends Union {\n constructor(tag, fields) {\n super();\n this.tag = tag;\n this.fields = fields;\n }\n cases() {\n return [\"Choice1Of3\", \"Choice2Of3\", \"Choice3Of3\"];\n }\n}\nexport function FSharpChoice$3_$reflection(gen0, gen1, gen2) {\n return union_type(\"FSharp.Core.FSharpChoice`3\", [gen0, gen1, gen2], FSharpChoice$3, () => [[[\"Item\", gen0]], [[\"Item\", gen1]], [[\"Item\", gen2]]]);\n}\nexport function FSharpChoice$4_Choice1Of4(Item) {\n return new FSharpChoice$4(0, [Item]);\n}\nexport function FSharpChoice$4_Choice2Of4(Item) {\n return new FSharpChoice$4(1, [Item]);\n}\nexport function FSharpChoice$4_Choice3Of4(Item) {\n return new FSharpChoice$4(2, [Item]);\n}\nexport function FSharpChoice$4_Choice4Of4(Item) {\n return new FSharpChoice$4(3, [Item]);\n}\nexport class FSharpChoice$4 extends Union {\n constructor(tag, fields) {\n super();\n this.tag = tag;\n this.fields = fields;\n }\n cases() {\n return [\"Choice1Of4\", \"Choice2Of4\", \"Choice3Of4\", \"Choice4Of4\"];\n }\n}\nexport function FSharpChoice$4_$reflection(gen0, gen1, gen2, gen3) {\n return union_type(\"FSharp.Core.FSharpChoice`4\", [gen0, gen1, gen2, gen3], FSharpChoice$4, () => [[[\"Item\", gen0]], [[\"Item\", gen1]], [[\"Item\", gen2]], [[\"Item\", gen3]]]);\n}\nexport function FSharpChoice$5_Choice1Of5(Item) {\n return new FSharpChoice$5(0, [Item]);\n}\nexport function FSharpChoice$5_Choice2Of5(Item) {\n return new FSharpChoice$5(1, [Item]);\n}\nexport function FSharpChoice$5_Choice3Of5(Item) {\n return new FSharpChoice$5(2, [Item]);\n}\nexport function FSharpChoice$5_Choice4Of5(Item) {\n return new FSharpChoice$5(3, [Item]);\n}\nexport function FSharpChoice$5_Choice5Of5(Item) {\n return new FSharpChoice$5(4, [Item]);\n}\nexport class FSharpChoice$5 extends Union {\n constructor(tag, fields) {\n super();\n this.tag = tag;\n this.fields = fields;\n }\n cases() {\n return [\"Choice1Of5\", \"Choice2Of5\", \"Choice3Of5\", \"Choice4Of5\", \"Choice5Of5\"];\n }\n}\nexport function FSharpChoice$5_$reflection(gen0, gen1, gen2, gen3, gen4) {\n return union_type(\"FSharp.Core.FSharpChoice`5\", [gen0, gen1, gen2, gen3, gen4], FSharpChoice$5, () => [[[\"Item\", gen0]], [[\"Item\", gen1]], [[\"Item\", gen2]], [[\"Item\", gen3]], [[\"Item\", gen4]]]);\n}\nexport function FSharpChoice$6_Choice1Of6(Item) {\n return new FSharpChoice$6(0, [Item]);\n}\nexport function FSharpChoice$6_Choice2Of6(Item) {\n return new FSharpChoice$6(1, [Item]);\n}\nexport function FSharpChoice$6_Choice3Of6(Item) {\n return new FSharpChoice$6(2, [Item]);\n}\nexport function FSharpChoice$6_Choice4Of6(Item) {\n return new FSharpChoice$6(3, [Item]);\n}\nexport function FSharpChoice$6_Choice5Of6(Item) {\n return new FSharpChoice$6(4, [Item]);\n}\nexport function FSharpChoice$6_Choice6Of6(Item) {\n return new FSharpChoice$6(5, [Item]);\n}\nexport class FSharpChoice$6 extends Union {\n constructor(tag, fields) {\n super();\n this.tag = tag;\n this.fields = fields;\n }\n cases() {\n return [\"Choice1Of6\", \"Choice2Of6\", \"Choice3Of6\", \"Choice4Of6\", \"Choice5Of6\", \"Choice6Of6\"];\n }\n}\nexport function FSharpChoice$6_$reflection(gen0, gen1, gen2, gen3, gen4, gen5) {\n return union_type(\"FSharp.Core.FSharpChoice`6\", [gen0, gen1, gen2, gen3, gen4, gen5], FSharpChoice$6, () => [[[\"Item\", gen0]], [[\"Item\", gen1]], [[\"Item\", gen2]], [[\"Item\", gen3]], [[\"Item\", gen4]], [[\"Item\", gen5]]]);\n}\nexport function FSharpChoice$7_Choice1Of7(Item) {\n return new FSharpChoice$7(0, [Item]);\n}\nexport function FSharpChoice$7_Choice2Of7(Item) {\n return new FSharpChoice$7(1, [Item]);\n}\nexport function FSharpChoice$7_Choice3Of7(Item) {\n return new FSharpChoice$7(2, [Item]);\n}\nexport function FSharpChoice$7_Choice4Of7(Item) {\n return new FSharpChoice$7(3, [Item]);\n}\nexport function FSharpChoice$7_Choice5Of7(Item) {\n return new FSharpChoice$7(4, [Item]);\n}\nexport function FSharpChoice$7_Choice6Of7(Item) {\n return new FSharpChoice$7(5, [Item]);\n}\nexport function FSharpChoice$7_Choice7Of7(Item) {\n return new FSharpChoice$7(6, [Item]);\n}\nexport class FSharpChoice$7 extends Union {\n constructor(tag, fields) {\n super();\n this.tag = tag;\n this.fields = fields;\n }\n cases() {\n return [\"Choice1Of7\", \"Choice2Of7\", \"Choice3Of7\", \"Choice4Of7\", \"Choice5Of7\", \"Choice6Of7\", \"Choice7Of7\"];\n }\n}\nexport function FSharpChoice$7_$reflection(gen0, gen1, gen2, gen3, gen4, gen5, gen6) {\n return union_type(\"FSharp.Core.FSharpChoice`7\", [gen0, gen1, gen2, gen3, gen4, gen5, gen6], FSharpChoice$7, () => [[[\"Item\", gen0]], [[\"Item\", gen1]], [[\"Item\", gen2]], [[\"Item\", gen3]], [[\"Item\", gen4]], [[\"Item\", gen5]], [[\"Item\", gen6]]]);\n}\nexport function Choice_makeChoice1Of2(x) {\n return FSharpChoice$2_Choice1Of2(x);\n}\nexport function Choice_makeChoice2Of2(x) {\n return FSharpChoice$2_Choice2Of2(x);\n}\nexport function Choice_tryValueIfChoice1Of2(x) {\n if (x.tag === /* Choice1Of2 */ 0) {\n return some(x.fields[0]);\n }\n else {\n return void 0;\n }\n}\nexport function Choice_tryValueIfChoice2Of2(x) {\n if (x.tag === /* Choice2Of2 */ 1) {\n return some(x.fields[0]);\n }\n else {\n return void 0;\n }\n}\n","import { OperationCanceledError, Trampoline } from \"./AsyncBuilder.js\";\nimport { CancellationToken } from \"./AsyncBuilder.js\";\nimport { protectedCont } from \"./AsyncBuilder.js\";\nimport { protectedBind } from \"./AsyncBuilder.js\";\nimport { protectedReturn } from \"./AsyncBuilder.js\";\nimport { Choice_makeChoice1Of2, Choice_makeChoice2Of2 } from \"./Choice.js\";\nimport { TimeoutException } from \"./SystemException.js\";\n// Implemented just for type references\nexport class Async {\n}\nfunction emptyContinuation(_x) {\n // NOP\n}\n// see AsyncBuilder.Delay\nfunction delay(generator) {\n return protectedCont((ctx) => generator()(ctx));\n}\n// MakeAsync: body:(AsyncActivation<'T> -> AsyncReturn) -> Async<'T>\nexport function makeAsync(body) {\n return body;\n}\n// Invoke: computation: Async<'T> -> ctxt:AsyncActivation<'T> -> AsyncReturn\nexport function invoke(computation, ctx) {\n return computation(ctx);\n}\n// CallThenInvoke: ctxt:AsyncActivation<'T> -> result1:'U -> part2:('U -> Async<'T>) -> AsyncReturn\nexport function callThenInvoke(ctx, result1, part2) {\n return part2(result1)(ctx);\n}\n// Bind: ctxt:AsyncActivation<'T> -> part1:Async<'U> -> part2:('U -> Async<'T>) -> AsyncReturn\nexport function bind(ctx, part1, part2) {\n return protectedBind(part1, part2)(ctx);\n}\nexport function createCancellationToken(arg) {\n const token = new CancellationToken(typeof arg === \"boolean\" ? arg : false);\n if (typeof arg === \"number\") {\n setTimeout(() => { token.cancel(); }, arg);\n }\n return token;\n}\nexport function cancel(token) {\n token.cancel();\n}\nexport function cancelAfter(token, ms) {\n setTimeout(() => { token.cancel(); }, ms);\n}\nexport function isCancellationRequested(token) {\n return token != null && token.isCancelled;\n}\nexport function throwIfCancellationRequested(token) {\n if (token != null && token.isCancelled) {\n throw new Error(\"Operation is cancelled\");\n }\n}\nfunction throwAfter(millisecondsDueTime) {\n return protectedCont((ctx) => {\n let tokenId;\n const timeoutId = setTimeout(() => {\n ctx.cancelToken.removeListener(tokenId);\n ctx.onError(new TimeoutException());\n }, millisecondsDueTime);\n tokenId = ctx.cancelToken.addListener(() => {\n clearTimeout(timeoutId);\n ctx.onCancel(new OperationCanceledError());\n });\n });\n}\nexport function startChild(computation, ms) {\n if (ms) {\n const computationWithTimeout = protectedBind(parallel2(computation, throwAfter(ms)), xs => protectedReturn(xs[0]));\n return startChild(computationWithTimeout);\n }\n const promise = startAsPromise(computation);\n // JS Promises are hot, computation has already started\n // but we delay returning the result\n return protectedCont((ctx) => protectedReturn(awaitPromise(promise))(ctx));\n}\nexport function awaitPromise(p) {\n return fromContinuations((conts) => p.then(conts[0]).catch((err) => (err instanceof OperationCanceledError\n ? conts[2] : conts[1])(err)));\n}\nexport function cancellationToken() {\n return protectedCont((ctx) => ctx.onSuccess(ctx.cancelToken));\n}\nexport const defaultCancellationToken = new CancellationToken();\nexport function catchAsync(work) {\n return protectedCont((ctx) => {\n work({\n onSuccess: (x) => ctx.onSuccess(Choice_makeChoice1Of2(x)),\n onError: (ex) => ctx.onSuccess(Choice_makeChoice2Of2(ex)),\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n}\nexport function fromContinuations(f) {\n return protectedCont((ctx) => f([ctx.onSuccess, ctx.onError, ctx.onCancel]));\n}\nexport function ignore(computation) {\n return protectedBind(computation, (_x) => protectedReturn(void 0));\n}\nexport function parallel(computations) {\n return delay(() => awaitPromise(Promise.all(Array.from(computations, (w) => startAsPromise(w)))));\n}\nfunction parallel2(a, b) {\n return delay(() => awaitPromise(Promise.all([startAsPromise(a), startAsPromise(b)])));\n}\nexport function sequential(computations) {\n function _sequential(computations) {\n let pr = Promise.resolve([]);\n for (const c of computations) {\n pr = pr.then(results => startAsPromise(c).then(r => results.concat([r])));\n }\n return pr;\n }\n return delay(() => awaitPromise(_sequential(computations)));\n}\nexport function sleep(millisecondsDueTime) {\n return protectedCont((ctx) => {\n let tokenId;\n const timeoutId = setTimeout(() => {\n ctx.cancelToken.removeListener(tokenId);\n ctx.onSuccess(void 0);\n }, millisecondsDueTime);\n tokenId = ctx.cancelToken.addListener(() => {\n clearTimeout(timeoutId);\n ctx.onCancel(new OperationCanceledError());\n });\n });\n}\nexport function runSynchronously() {\n throw new Error(\"Asynchronous code cannot be run synchronously in JS\");\n}\nexport function start(computation, cancellationToken) {\n return startWithContinuations(computation, cancellationToken);\n}\nexport function startImmediate(computation, cancellationToken) {\n return start(computation, cancellationToken);\n}\nexport function startWithContinuations(computation, continuation, exceptionContinuation, cancellationContinuation, cancelToken) {\n if (typeof continuation !== \"function\") {\n cancelToken = continuation;\n continuation = undefined;\n }\n const trampoline = new Trampoline();\n computation({\n onSuccess: continuation ? continuation : emptyContinuation,\n onError: exceptionContinuation ? exceptionContinuation : emptyContinuation,\n onCancel: cancellationContinuation ? cancellationContinuation : emptyContinuation,\n cancelToken: cancelToken ? cancelToken : defaultCancellationToken,\n trampoline,\n });\n}\nexport function startAsPromise(computation, cancellationToken) {\n return new Promise((resolve, reject) => startWithContinuations(computation, resolve, reject, reject, cancellationToken ? cancellationToken : defaultCancellationToken));\n}\nexport default Async;\n","namespace Fable.Remoting.Client\n\nopen System\nopen Browser.Types\nopen Fable.Core\nopen Fable.Core.JsInterop\nopen System.Runtime.CompilerServices\n\n/// Utilities for working with binary data types in the browser\nmodule InternalUtilities =\n /// Creates a new instance of a FileReader\n []\n let createFileReader() : FileReader = jsNative\n []\n let createUInt8Array(x: 'a) : byte[] = jsNative\n /// Creates a Blob from the given input string\n []\n let createBlobFromBytesAndMimeType (value: byte[]) (mimeType: string) : Blob = jsNative\n /// Creates an object URL (also known as data url) from a Blob\n []\n let createObjectUrl (blob: Blob) : string = jsNative\n /// Releases an existing object URL which was previously created by calling createObjectURL(). Call this method when you've finished using an object URL to let the browser know not to keep the reference to the file any longer.\n []\n let revokeObjectUrl (dataUrl: string) : unit = jsNative\n /// Returns whether the input byte array is a typed array of type Uint8Array\n []\n let isUInt8Array (data: byte[]) : bool = jsNative\n /// Creates a typed byte array of binary data if it not already typed\n let toUInt8Array(data: byte[]) : byte[] =\n if isUInt8Array data\n then data\n else createUInt8Array data\n\n[]\nmodule BrowserFileExtensions =\n\n type File with\n\n /// Asynchronously reads the File content as byte[]\n member instance.ReadAsByteArray() =\n Async.FromContinuations <| fun (resolve, _, _) ->\n let reader = InternalUtilities.createFileReader()\n reader.onload <- fun _ ->\n if reader.readyState = FileReaderState.DONE\n then resolve(InternalUtilities.createUInt8Array(reader.result))\n\n reader.readAsArrayBuffer(instance)\n\n /// Asynchronously reads the File content as a data url string\n member instance.ReadAsDataUrl() =\n Async.FromContinuations <| fun (resolve, _, _) ->\n let reader = InternalUtilities.createFileReader()\n reader.onload <- fun _ ->\n if reader.readyState = FileReaderState.DONE\n then resolve(unbox reader.result)\n\n reader.readAsDataURL(instance)\n\n /// Asynchronously reads the File contents as text\n member instance.ReadAsText() =\n Async.FromContinuations <| fun (resolve, _, _) ->\n let reader = InternalUtilities.createFileReader()\n reader.onload <- fun _ ->\n if reader.readyState = FileReaderState.DONE\n then resolve(unbox reader.result)\n\n reader.readAsText(instance)\n\n[]\ntype ByteArrayExtensions =\n /// Saves the binary content as a file using the provided file name.\n []\n static member SaveFileAs(content: byte[], fileName: string) =\n\n if String.IsNullOrWhiteSpace(fileName) then\n ()\n else\n let mimeType = \"application/octet-stream\"\n let binaryData = InternalUtilities.toUInt8Array content\n let blob = InternalUtilities.createBlobFromBytesAndMimeType binaryData mimeType\n let dataUrl = InternalUtilities.createObjectUrl blob\n let anchor = (Browser.Dom.document.createElement \"a\")\n anchor?style <- \"display: none\"\n anchor?href <- dataUrl\n anchor?download <- fileName\n anchor?rel <- \"noopener\"\n anchor.click()\n // clean up\n anchor.remove()\n // clean up the created object url because it is being kept in memory\n Browser.Dom.window.setTimeout(unbox(fun () -> InternalUtilities.revokeObjectUrl(dataUrl)), 40 * 1000)\n |> ignore\n\n /// Saves the binary content as a file using the provided file name.\n []\n static member SaveFileAs(content: byte[], fileName: string, mimeType: string) =\n\n if String.IsNullOrWhiteSpace(fileName) then\n ()\n else\n let binaryData = InternalUtilities.toUInt8Array content\n let blob = InternalUtilities.createBlobFromBytesAndMimeType binaryData mimeType\n let dataUrl = InternalUtilities.createObjectUrl blob\n let anchor = Browser.Dom.document.createElement \"a\"\n anchor?style <- \"display: none\"\n anchor?href <- dataUrl\n anchor?download <- fileName\n anchor?rel <- \"noopener\"\n anchor.click()\n // clean up element\n anchor.remove()\n // clean up the created object url because it is being kept in memory\n Browser.Dom.window.setTimeout(unbox(fun () -> InternalUtilities.revokeObjectUrl(dataUrl)), 40 * 1000)\n |> ignore\n\n \n /// Converts the binary content into a data url by first converting it to a Blob of type \"application/octet-stream\" and reading it as a data url.\n []\n static member AsDataUrl(content: byte[]) : string =\n let binaryData = InternalUtilities.toUInt8Array content\n let blob = InternalUtilities.createBlobFromBytesAndMimeType binaryData \"application/octet-stream\"\n let dataUrl = InternalUtilities.createObjectUrl blob\n dataUrl\n\n /// Converts the binary content into a data url by first converting it to a Blob of the provided mime-type and reading it as a data url.\n []\n static member AsDataUrl(content: byte[], mimeType:string) : string =\n let binaryData = InternalUtilities.toUInt8Array content\n let blob = InternalUtilities.createBlobFromBytesAndMimeType binaryData mimeType\n let dataUrl = InternalUtilities.createObjectUrl blob\n dataUrl","namespace Fable.Remoting.Client\n\nopen System.Threading\nopen Browser\nopen Browser.Types\n\nmodule Http =\n\n /// Constructs default values for HttpRequest\n let private defaultRequestConfig : HttpRequest = {\n HttpMethod = GET\n Url = \"/\"\n Headers = [ ]\n WithCredentials = false\n RequestBody = Empty\n }\n\n /// Creates a GET request to the specified url\n let get (url: string) : HttpRequest =\n { defaultRequestConfig\n with Url = url\n HttpMethod = GET }\n\n /// Creates a POST request to the specified url\n let post (url: string) : HttpRequest =\n { defaultRequestConfig\n with Url = url\n HttpMethod = POST }\n\n /// Creates a request using the given method and url\n let request method url =\n { defaultRequestConfig\n with Url = url\n HttpMethod = method }\n\n /// Appends a request with headers as key-value pairs\n let withHeaders headers (req: HttpRequest) = { req with Headers = headers }\n\n /// Sets the withCredentials option on the XHR request, useful for CORS requests\n let withCredentials withCredentials (req: HttpRequest) =\n { req with WithCredentials = withCredentials }\n\n /// Appends a request with string body content\n let withBody body (req: HttpRequest) = { req with RequestBody = body }\n\n let private sendAndRead (preparation:(XMLHttpRequest -> unit) option) resultMapper (req: HttpRequest) = async {\n let! token = Async.CancellationToken\n let request = Async.FromContinuations <| fun (resolve, _, cancel) ->\n let xhr = XMLHttpRequest.Create()\n\n match req.HttpMethod with\n | GET -> xhr.``open``(\"GET\", req.Url)\n | POST -> xhr.``open``(\"POST\", req.Url)\n\n match preparation with\n | Some f -> f xhr\n | _ -> ignore()\n\n token.Register(fun _ ->\n xhr.abort()\n cancel(System.OperationCanceledException(token))\n ) |> ignore\n\n // set the headers, must be after opening the request\n for (key, value) in req.Headers do\n xhr.setRequestHeader(key, value)\n\n xhr.withCredentials <- req.WithCredentials\n\n xhr.onreadystatechange <- fun _ ->\n match xhr.readyState with\n | ReadyState.Done when not token.IsCancellationRequested ->\n xhr |> resultMapper |> resolve\n | _ -> ignore()\n\n match req.RequestBody with\n | Empty -> xhr.send()\n | RequestBody.Json content -> xhr.send(content)\n | Binary content -> xhr.send(InternalUtilities.toUInt8Array content)\n\n return! request\n }\n\n /// Sends the request to the server and asynchronously returns a response\n let send = sendAndRead None (fun xhr -> { StatusCode = unbox xhr.status; ResponseBody = xhr.responseText })\n\n /// Sends the request to the server and asynchronously returns the response as byte array\n let sendAndReadBinary =\n sendAndRead\n (Some (fun xhr -> xhr.responseType <- \"arraybuffer\" )) // read response as byte array\n (fun xhr ->\n let bytes = InternalUtilities.createUInt8Array xhr.response\n (bytes, xhr.status))\n\n","\"use strict\";\r\n\r\nexport function Parsimmon(action) {\r\n if (!(this instanceof Parsimmon)) {\r\n return new Parsimmon(action);\r\n }\r\n this._ = action;\r\n}\r\n\r\nvar _ = Parsimmon.prototype;\r\n\r\nexport function times(n, f) {\r\n var i = 0;\r\n for (i; i < n; i++) {\r\n f(i);\r\n }\r\n}\r\n\r\nexport function forEach(f, arr) {\r\n times(arr.length, function(i) {\r\n f(arr[i], i, arr);\r\n });\r\n}\r\n\r\nexport function reduce(f, seed, arr) {\r\n forEach(function(elem, i, arr) {\r\n seed = f(seed, elem, i, arr);\r\n }, arr);\r\n return seed;\r\n}\r\n\r\nexport function map(f, arr) {\r\n return reduce(\r\n function(acc, elem, i, a) {\r\n return acc.concat([f(elem, i, a)]);\r\n },\r\n [],\r\n arr\r\n );\r\n}\r\n\r\nexport function lshiftBuffer(input) {\r\n var asTwoBytes = reduce(\r\n function(a, v, i, b) {\r\n return a.concat(\r\n i === b.length - 1\r\n ? Buffer.from([v, 0]).readUInt16BE(0)\r\n : b.readUInt16BE(i)\r\n );\r\n },\r\n [],\r\n input\r\n );\r\n return Buffer.from(\r\n map(function(x) {\r\n return ((x << 1) & 0xffff) >> 8;\r\n }, asTwoBytes)\r\n );\r\n}\r\n\r\nfunction consumeBitsFromBuffer(n, input) {\r\n var state = { v: 0, buf: input };\r\n times(n, function() {\r\n state = {\r\n v: (state.v << 1) | bitPeekBuffer(state.buf),\r\n buf: lshiftBuffer(state.buf)\r\n };\r\n });\r\n return state;\r\n}\r\n\r\nfunction bitPeekBuffer(input) {\r\n return input[0] >> 7;\r\n}\r\n\r\nexport function sum(numArr) {\r\n return reduce(\r\n function(x, y) {\r\n return x + y;\r\n },\r\n 0,\r\n numArr\r\n );\r\n}\r\n\r\nexport function find(pred, arr) {\r\n return reduce(\r\n function(found, elem) {\r\n return found || (pred(elem) ? elem : found);\r\n },\r\n null,\r\n arr\r\n );\r\n}\r\n\r\nfunction bufferExists() {\r\n return typeof Buffer !== \"undefined\";\r\n}\r\n\r\nfunction ensureBuffer() {\r\n if (!bufferExists()) {\r\n throw new Error(\r\n \"Buffer global does not exist; please consider using https://github.com/feross/buffer if you are running Parsimmon in a browser.\"\r\n );\r\n }\r\n}\r\n\r\nfunction bitSeq(alignments) {\r\n ensureBuffer();\r\n var totalBits = sum(alignments);\r\n if (totalBits % 8 !== 0) {\r\n throw new Error(\r\n \"The bits [\" +\r\n alignments.join(\", \") +\r\n \"] add up to \" +\r\n totalBits +\r\n \" which is not an even number of bytes; the total should be divisible by 8\"\r\n );\r\n }\r\n var bytes = totalBits / 8;\r\n\r\n var tooBigRange = find(function(x) {\r\n return x > 48;\r\n }, alignments);\r\n if (tooBigRange) {\r\n throw new Error(\r\n tooBigRange + \" bit range requested exceeds 48 bit (6 byte) Number max.\"\r\n );\r\n }\r\n\r\n return new Parsimmon(function(input, i) {\r\n var newPos = bytes + i;\r\n if (newPos > input.length) {\r\n return makeFailure(i, bytes.toString() + \" bytes\");\r\n }\r\n return makeSuccess(\r\n newPos,\r\n reduce(\r\n function(acc, bits) {\r\n var state = consumeBitsFromBuffer(bits, acc.buf);\r\n return {\r\n coll: acc.coll.concat(state.v),\r\n buf: state.buf\r\n };\r\n },\r\n { coll: [], buf: input.slice(i, newPos) },\r\n alignments\r\n ).coll\r\n );\r\n });\r\n}\r\n\r\nfunction bitSeqObj(namedAlignments) {\r\n ensureBuffer();\r\n var seenKeys = {};\r\n var totalKeys = 0;\r\n var fullAlignments = map(function(item) {\r\n if (isArray(item)) {\r\n var pair = item;\r\n if (pair.length !== 2) {\r\n throw new Error(\r\n \"[\" +\r\n pair.join(\", \") +\r\n \"] should be length 2, got length \" +\r\n pair.length\r\n );\r\n }\r\n assertString(pair[0]);\r\n assertNumber(pair[1]);\r\n if (Object.prototype.hasOwnProperty.call(seenKeys, pair[0])) {\r\n throw new Error(\"duplicate key in bitSeqObj: \" + pair[0]);\r\n }\r\n seenKeys[pair[0]] = true;\r\n totalKeys++;\r\n return pair;\r\n } else {\r\n assertNumber(item);\r\n return [null, item];\r\n }\r\n }, namedAlignments);\r\n if (totalKeys < 1) {\r\n throw new Error(\r\n \"bitSeqObj expects at least one named pair, got [\" +\r\n namedAlignments.join(\", \") +\r\n \"]\"\r\n );\r\n }\r\n var namesOnly = map(function(pair) {\r\n return pair[0];\r\n }, fullAlignments);\r\n var alignmentsOnly = map(function(pair) {\r\n return pair[1];\r\n }, fullAlignments);\r\n\r\n return bitSeq(alignmentsOnly).map(function(parsed) {\r\n var namedParsed = map(function(name, i) {\r\n return [name, parsed[i]];\r\n }, namesOnly);\r\n\r\n return reduce(\r\n function(obj, kv) {\r\n if (kv[0] !== null) {\r\n obj[kv[0]] = kv[1];\r\n }\r\n return obj;\r\n },\r\n {},\r\n namedParsed\r\n );\r\n });\r\n}\r\n\r\nfunction parseBufferFor(other, length) {\r\n ensureBuffer();\r\n return new Parsimmon(function(input, i) {\r\n if (i + length > input.length) {\r\n return makeFailure(i, length + \" bytes for \" + other);\r\n }\r\n return makeSuccess(i + length, input.slice(i, i + length));\r\n });\r\n}\r\n\r\nfunction parseBuffer(length) {\r\n return parseBufferFor(\"buffer\", length).map(function(unsafe) {\r\n return Buffer.from(unsafe);\r\n });\r\n}\r\n\r\nfunction encodedString(encoding, length) {\r\n return parseBufferFor(\"string\", length).map(function(buff) {\r\n return buff.toString(encoding);\r\n });\r\n}\r\n\r\nfunction isInteger(value) {\r\n return typeof value === \"number\" && Math.floor(value) === value;\r\n}\r\n\r\nfunction assertValidIntegerByteLengthFor(who, length) {\r\n if (!isInteger(length) || length < 0 || length > 6) {\r\n throw new Error(who + \" requires integer length in range [0, 6].\");\r\n }\r\n}\r\n\r\nfunction uintBE(length) {\r\n assertValidIntegerByteLengthFor(\"uintBE\", length);\r\n return parseBufferFor(\"uintBE(\" + length + \")\", length).map(function(buff) {\r\n return buff.readUIntBE(0, length);\r\n });\r\n}\r\n\r\nfunction uintLE(length) {\r\n assertValidIntegerByteLengthFor(\"uintLE\", length);\r\n return parseBufferFor(\"uintLE(\" + length + \")\", length).map(function(buff) {\r\n return buff.readUIntLE(0, length);\r\n });\r\n}\r\n\r\nfunction intBE(length) {\r\n assertValidIntegerByteLengthFor(\"intBE\", length);\r\n return parseBufferFor(\"intBE(\" + length + \")\", length).map(function(buff) {\r\n return buff.readIntBE(0, length);\r\n });\r\n}\r\n\r\nfunction intLE(length) {\r\n assertValidIntegerByteLengthFor(\"intLE\", length);\r\n return parseBufferFor(\"intLE(\" + length + \")\", length).map(function(buff) {\r\n return buff.readIntLE(0, length);\r\n });\r\n}\r\n\r\nfunction floatBE() {\r\n return parseBufferFor(\"floatBE\", 4).map(function(buff) {\r\n return buff.readFloatBE(0);\r\n });\r\n}\r\n\r\nfunction floatLE() {\r\n return parseBufferFor(\"floatLE\", 4).map(function(buff) {\r\n return buff.readFloatLE(0);\r\n });\r\n}\r\n\r\nfunction doubleBE() {\r\n return parseBufferFor(\"doubleBE\", 8).map(function(buff) {\r\n return buff.readDoubleBE(0);\r\n });\r\n}\r\n\r\nfunction doubleLE() {\r\n return parseBufferFor(\"doubleLE\", 8).map(function(buff) {\r\n return buff.readDoubleLE(0);\r\n });\r\n}\r\n\r\nfunction toArray(arrLike) {\r\n return Array.prototype.slice.call(arrLike);\r\n}\r\n// -*- Helpers -*-\r\n\r\nfunction isParser(obj) {\r\n return obj instanceof Parsimmon;\r\n}\r\n\r\nfunction isArray(x) {\r\n return {}.toString.call(x) === \"[object Array]\";\r\n}\r\n\r\nfunction isBuffer(x) {\r\n /* global Buffer */\r\n return bufferExists() && Buffer.isBuffer(x);\r\n}\r\n\r\nexport function makeSuccess(index, value) {\r\n return {\r\n status: true,\r\n index: index,\r\n value: value,\r\n furthest: -1,\r\n expected: []\r\n };\r\n}\r\n\r\nexport function makeFailure(index, expected) {\r\n if (!isArray(expected)) {\r\n expected = [expected];\r\n }\r\n return {\r\n status: false,\r\n index: -1,\r\n value: null,\r\n furthest: index,\r\n expected: expected\r\n };\r\n}\r\n\r\nfunction mergeReplies(result, last) {\r\n if (!last) {\r\n return result;\r\n }\r\n if (result.furthest > last.furthest) {\r\n return result;\r\n }\r\n var expected =\r\n result.furthest === last.furthest\r\n ? union(result.expected, last.expected)\r\n : last.expected;\r\n return {\r\n status: result.status,\r\n index: result.index,\r\n value: result.value,\r\n furthest: last.furthest,\r\n expected: expected\r\n };\r\n}\r\n\r\nfunction makeLineColumnIndex(input, i) {\r\n if (isBuffer(input)) {\r\n return {\r\n offset: i,\r\n line: -1,\r\n column: -1\r\n };\r\n }\r\n var lines = input.slice(0, i).split(\"\\n\");\r\n // Note that unlike the character offset, the line and column offsets are\r\n // 1-based.\r\n var lineWeAreUpTo = lines.length;\r\n var columnWeAreUpTo = lines[lines.length - 1].length + 1;\r\n return {\r\n offset: i,\r\n line: lineWeAreUpTo,\r\n column: columnWeAreUpTo\r\n };\r\n}\r\n\r\n// Returns the sorted set union of two arrays of strings\r\nfunction union(xs, ys) {\r\n var obj = {};\r\n for (var i = 0; i < xs.length; i++) {\r\n obj[xs[i]] = true;\r\n }\r\n for (var j = 0; j < ys.length; j++) {\r\n obj[ys[j]] = true;\r\n }\r\n var keys = [];\r\n for (var k in obj) {\r\n if ({}.hasOwnProperty.call(obj, k)) {\r\n keys.push(k);\r\n }\r\n }\r\n keys.sort();\r\n return keys;\r\n}\r\n\r\nfunction assertParser(p) {\r\n if (!isParser(p)) {\r\n throw new Error(\"not a parser: \" + p);\r\n }\r\n}\r\n\r\nfunction get(input, i) {\r\n if (typeof input === \"string\") {\r\n return input.charAt(i);\r\n }\r\n return input[i];\r\n}\r\n\r\n// TODO[ES5]: Switch to Array.isArray eventually.\r\nfunction assertArray(x) {\r\n if (!isArray(x)) {\r\n throw new Error(\"not an array: \" + x);\r\n }\r\n}\r\n\r\nfunction assertNumber(x) {\r\n if (typeof x !== \"number\") {\r\n throw new Error(\"not a number: \" + x);\r\n }\r\n}\r\n\r\nfunction assertRegexp(x) {\r\n if (!(x instanceof RegExp)) {\r\n throw new Error(\"not a regexp: \" + x);\r\n }\r\n var f = flags(x);\r\n for (var i = 0; i < f.length; i++) {\r\n var c = f.charAt(i);\r\n // Only allow regexp flags [imu] for now, since [g] and [y] specifically\r\n // mess up Parsimmon. If more non-stateful regexp flags are added in the\r\n // future, this will need to be revisited.\r\n if (c !== \"i\" && c !== \"m\" && c !== \"u\") {\r\n throw new Error('unsupported regexp flag \"' + c + '\": ' + x);\r\n }\r\n }\r\n}\r\n\r\nfunction assertFunction(x) {\r\n if (typeof x !== \"function\") {\r\n throw new Error(\"not a function: \" + x);\r\n }\r\n}\r\n\r\nfunction assertString(x) {\r\n if (typeof x !== \"string\") {\r\n throw new Error(\"not a string: \" + x);\r\n }\r\n}\r\n\r\n// -*- Error Formatting -*-\r\n\r\nvar linesBeforeStringError = 2;\r\nvar linesAfterStringError = 3;\r\nvar bytesPerLine = 8;\r\nvar bytesBefore = bytesPerLine * 5;\r\nvar bytesAfter = bytesPerLine * 4;\r\nvar defaultLinePrefix = \" \";\r\n\r\nexport function repeat(string, amount) {\r\n return new Array(amount + 1).join(string);\r\n}\r\n\r\nexport function formatExpected(expected) {\r\n if (expected.length === 1) {\r\n return \"Expected:\\n\\n\" + expected[0];\r\n }\r\n return \"Expected one of the following: \\n\\n\" + expected.join(\", \");\r\n}\r\n\r\nexport function leftPad(str, pad, char) {\r\n var add = pad - str.length;\r\n if (add <= 0) {\r\n return str;\r\n }\r\n return repeat(char, add) + str;\r\n}\r\n\r\nfunction toChunks(arr, chunkSize) {\r\n var length = arr.length;\r\n var chunks = [];\r\n var chunkIndex = 0;\r\n\r\n if (length <= chunkSize) {\r\n return [arr.slice()];\r\n }\r\n\r\n for (var i = 0; i < length; i++) {\r\n if (!chunks[chunkIndex]) {\r\n chunks.push([]);\r\n }\r\n\r\n chunks[chunkIndex].push(arr[i]);\r\n\r\n if ((i + 1) % chunkSize === 0) {\r\n chunkIndex++;\r\n }\r\n }\r\n\r\n return chunks;\r\n}\r\n\r\n// Get a range of indexes including `i`-th element and `before` and `after` amount of elements from `arr`.\r\nexport function rangeFromIndexAndOffsets(i, before, after, length) {\r\n return {\r\n // Guard against the negative upper bound for lines included in the output.\r\n from: i - before > 0 ? i - before : 0,\r\n to: i + after > length ? length : i + after\r\n };\r\n}\r\n\r\nexport function byteRangeToRange(byteRange) {\r\n // Exception for inputs smaller than `bytesPerLine`\r\n if (byteRange.from === 0 && byteRange.to === 1) {\r\n return {\r\n from: byteRange.from,\r\n to: byteRange.to\r\n };\r\n }\r\n\r\n return {\r\n from: byteRange.from / bytesPerLine,\r\n // Round `to`, so we don't get float if the amount of bytes is not divisible by `bytesPerLine`\r\n to: Math.floor(byteRange.to / bytesPerLine)\r\n };\r\n}\r\n\r\nexport function formatGot(input, error) {\r\n var index = error.index;\r\n var i = index.offset;\r\n\r\n var verticalMarkerLength = 1;\r\n var column;\r\n var lineWithErrorIndex;\r\n var lines;\r\n var lineRange;\r\n var lastLineNumberLabelLength;\r\n\r\n if (i === input.length) {\r\n return \"Got the end of the input\";\r\n }\r\n\r\n if (isBuffer(input)) {\r\n var byteLineWithErrorIndex = i - (i % bytesPerLine);\r\n var columnByteIndex = i - byteLineWithErrorIndex;\r\n var byteRange = rangeFromIndexAndOffsets(\r\n byteLineWithErrorIndex,\r\n bytesBefore,\r\n bytesAfter + bytesPerLine,\r\n input.length\r\n );\r\n var bytes = input.slice(byteRange.from, byteRange.to);\r\n var bytesInChunks = toChunks(bytes.toJSON().data, bytesPerLine);\r\n\r\n var byteLines = map(function(byteRow) {\r\n return map(function(byteValue) {\r\n // Prefix byte values with a `0` if they are shorter than 2 characters.\r\n return leftPad(byteValue.toString(16), 2, \"0\");\r\n }, byteRow);\r\n }, bytesInChunks);\r\n\r\n lineRange = byteRangeToRange(byteRange);\r\n lineWithErrorIndex = byteLineWithErrorIndex / bytesPerLine;\r\n column = columnByteIndex * 3;\r\n\r\n // Account for an extra space.\r\n if (columnByteIndex >= 4) {\r\n column += 1;\r\n }\r\n\r\n verticalMarkerLength = 2;\r\n lines = map(function(byteLine) {\r\n return byteLine.length <= 4\r\n ? byteLine.join(\" \")\r\n : byteLine.slice(0, 4).join(\" \") + \" \" + byteLine.slice(4).join(\" \");\r\n }, byteLines);\r\n lastLineNumberLabelLength = (\r\n (lineRange.to > 0 ? lineRange.to - 1 : lineRange.to) * 8\r\n ).toString(16).length;\r\n\r\n if (lastLineNumberLabelLength < 2) {\r\n lastLineNumberLabelLength = 2;\r\n }\r\n } else {\r\n var inputLines = input.split(/\\r\\n|[\\n\\r\\u2028\\u2029]/);\r\n column = index.column - 1;\r\n lineWithErrorIndex = index.line - 1;\r\n lineRange = rangeFromIndexAndOffsets(\r\n lineWithErrorIndex,\r\n linesBeforeStringError,\r\n linesAfterStringError,\r\n inputLines.length\r\n );\r\n\r\n lines = inputLines.slice(lineRange.from, lineRange.to);\r\n lastLineNumberLabelLength = lineRange.to.toString().length;\r\n }\r\n\r\n var lineWithErrorCurrentIndex = lineWithErrorIndex - lineRange.from;\r\n\r\n if (isBuffer(input)) {\r\n lastLineNumberLabelLength = (\r\n (lineRange.to > 0 ? lineRange.to - 1 : lineRange.to) * 8\r\n ).toString(16).length;\r\n\r\n if (lastLineNumberLabelLength < 2) {\r\n lastLineNumberLabelLength = 2;\r\n }\r\n }\r\n\r\n var linesWithLineNumbers = reduce(\r\n function(acc, lineSource, index) {\r\n var isLineWithError = index === lineWithErrorCurrentIndex;\r\n var prefix = isLineWithError ? \"> \" : defaultLinePrefix;\r\n var lineNumberLabel;\r\n\r\n if (isBuffer(input)) {\r\n lineNumberLabel = leftPad(\r\n ((lineRange.from + index) * 8).toString(16),\r\n lastLineNumberLabelLength,\r\n \"0\"\r\n );\r\n } else {\r\n lineNumberLabel = leftPad(\r\n (lineRange.from + index + 1).toString(),\r\n lastLineNumberLabelLength,\r\n \" \"\r\n );\r\n }\r\n\r\n return [].concat(\r\n acc,\r\n [prefix + lineNumberLabel + \" | \" + lineSource],\r\n isLineWithError\r\n ? [\r\n defaultLinePrefix +\r\n repeat(\" \", lastLineNumberLabelLength) +\r\n \" | \" +\r\n leftPad(\"\", column, \" \") +\r\n repeat(\"^\", verticalMarkerLength)\r\n ]\r\n : []\r\n );\r\n },\r\n [],\r\n lines\r\n );\r\n\r\n return linesWithLineNumbers.join(\"\\n\");\r\n}\r\n\r\nexport function formatError(input, error) {\r\n return [\r\n \"\\n\",\r\n \"-- PARSING FAILED \" + repeat(\"-\", 50),\r\n \"\\n\\n\",\r\n formatGot(input, error),\r\n \"\\n\\n\",\r\n formatExpected(error.expected),\r\n \"\\n\"\r\n ].join(\"\");\r\n}\r\n\r\nexport function flags(re) {\r\n var s = \"\" + re;\r\n return s.slice(s.lastIndexOf(\"/\") + 1);\r\n}\r\n\r\nexport function anchoredRegexp(re) {\r\n return RegExp(\"^(?:\" + re.source + \")\", flags(re));\r\n}\r\n\r\n// -*- Combinators -*-\r\n\r\nexport function seq() {\r\n var parsers = [].slice.call(arguments);\r\n var numParsers = parsers.length;\r\n for (var j = 0; j < numParsers; j += 1) {\r\n assertParser(parsers[j]);\r\n }\r\n return Parsimmon(function(input, i) {\r\n var result;\r\n var accum = new Array(numParsers);\r\n for (var j = 0; j < numParsers; j += 1) {\r\n result = mergeReplies(parsers[j]._(input, i), result);\r\n if (!result.status) {\r\n return result;\r\n }\r\n accum[j] = result.value;\r\n i = result.index;\r\n }\r\n return mergeReplies(makeSuccess(i, accum), result);\r\n });\r\n}\r\n\r\nexport function seqObj() {\r\n var seenKeys = {};\r\n var totalKeys = 0;\r\n var parsers = toArray(arguments);\r\n var numParsers = parsers.length;\r\n for (var j = 0; j < numParsers; j += 1) {\r\n var p = parsers[j];\r\n if (isParser(p)) {\r\n continue;\r\n }\r\n if (isArray(p)) {\r\n var isWellFormed =\r\n p.length === 2 && typeof p[0] === \"string\" && isParser(p[1]);\r\n if (isWellFormed) {\r\n var key = p[0];\r\n if (Object.prototype.hasOwnProperty.call(seenKeys, key)) {\r\n throw new Error(\"seqObj: duplicate key \" + key);\r\n }\r\n seenKeys[key] = true;\r\n totalKeys++;\r\n continue;\r\n }\r\n }\r\n throw new Error(\r\n \"seqObj arguments must be parsers or [string, parser] array pairs.\"\r\n );\r\n }\r\n if (totalKeys === 0) {\r\n throw new Error(\"seqObj expects at least one named parser, found zero\");\r\n }\r\n return Parsimmon(function(input, i) {\r\n var result;\r\n var accum = {};\r\n for (var j = 0; j < numParsers; j += 1) {\r\n var name;\r\n var parser;\r\n if (isArray(parsers[j])) {\r\n name = parsers[j][0];\r\n parser = parsers[j][1];\r\n } else {\r\n name = null;\r\n parser = parsers[j];\r\n }\r\n result = mergeReplies(parser._(input, i), result);\r\n if (!result.status) {\r\n return result;\r\n }\r\n if (name) {\r\n accum[name] = result.value;\r\n }\r\n i = result.index;\r\n }\r\n return mergeReplies(makeSuccess(i, accum), result);\r\n });\r\n}\r\n\r\nexport function seqMap() {\r\n var args = [].slice.call(arguments);\r\n if (args.length === 0) {\r\n throw new Error(\"seqMap needs at least one argument\");\r\n }\r\n var mapper = args.pop();\r\n assertFunction(mapper);\r\n return seq.apply(null, args).map(function(results) {\r\n return mapper.apply(null, results);\r\n });\r\n}\r\n\r\n// TODO[ES5]: Revisit this with Object.keys and .bind.\r\nexport function createLanguage(parsers) {\r\n var language = {};\r\n for (var key in parsers) {\r\n if ({}.hasOwnProperty.call(parsers, key)) {\r\n (function(key) {\r\n var func = function() {\r\n return parsers[key](language);\r\n };\r\n language[key] = lazy(func);\r\n })(key);\r\n }\r\n }\r\n return language;\r\n}\r\n\r\nexport function alt() {\r\n var parsers = [].slice.call(arguments);\r\n var numParsers = parsers.length;\r\n if (numParsers === 0) {\r\n return fail(\"zero alternates\");\r\n }\r\n for (var j = 0; j < numParsers; j += 1) {\r\n assertParser(parsers[j]);\r\n }\r\n return Parsimmon(function(input, i) {\r\n var result;\r\n for (var j = 0; j < parsers.length; j += 1) {\r\n result = mergeReplies(parsers[j]._(input, i), result);\r\n if (result.status) {\r\n return result;\r\n }\r\n }\r\n return result;\r\n });\r\n}\r\n\r\nexport function sepBy(parser, separator) {\r\n // Argument asserted by sepBy1\r\n return sepBy1(parser, separator).or(succeed([]));\r\n}\r\n\r\nexport function sepBy1(parser, separator) {\r\n assertParser(parser);\r\n assertParser(separator);\r\n var pairs = separator.then(parser).many();\r\n return seqMap(parser, pairs, function(r, rs) {\r\n return [r].concat(rs);\r\n });\r\n}\r\n\r\n// -*- Core Parsing Methods -*-\r\n\r\n_.parse = function(input) {\r\n if (typeof input !== \"string\" && !isBuffer(input)) {\r\n throw new Error(\r\n \".parse must be called with a string or Buffer as its argument\"\r\n );\r\n }\r\n var result = this.skip(eof)._(input, 0);\r\n if (result.status) {\r\n return {\r\n status: true,\r\n value: result.value\r\n };\r\n }\r\n return {\r\n status: false,\r\n index: makeLineColumnIndex(input, result.furthest),\r\n expected: result.expected\r\n };\r\n};\r\n\r\n// -*- Other Methods -*-\r\n\r\n_.tryParse = function(str) {\r\n var result = this.parse(str);\r\n if (result.status) {\r\n return result.value;\r\n } else {\r\n var msg = formatError(str, result);\r\n var err = new Error(msg);\r\n err.type = \"ParsimmonError\";\r\n err.result = result;\r\n throw err;\r\n }\r\n};\r\n\r\n_.or = function(alternative) {\r\n return alt(this, alternative);\r\n};\r\n\r\n_.trim = function(parser) {\r\n return this.wrap(parser, parser);\r\n};\r\n\r\n_.wrap = function(leftParser, rightParser) {\r\n return seqMap(leftParser, this, rightParser, function(left, middle) {\r\n return middle;\r\n });\r\n};\r\n\r\n_.thru = function(wrapper) {\r\n return wrapper(this);\r\n};\r\n\r\n_.then = function(next) {\r\n assertParser(next);\r\n return seq(this, next).map(function(results) {\r\n return results[1];\r\n });\r\n};\r\n\r\n_.many = function() {\r\n var self = this;\r\n\r\n return Parsimmon(function(input, i) {\r\n var accum = [];\r\n var result = undefined;\r\n\r\n for (;;) {\r\n result = mergeReplies(self._(input, i), result);\r\n if (result.status) {\r\n if (i === result.index) {\r\n throw new Error(\r\n \"infinite loop detected in .many() parser --- calling .many() on \" +\r\n \"a parser which can accept zero characters is usually the cause\"\r\n );\r\n }\r\n i = result.index;\r\n accum.push(result.value);\r\n } else {\r\n return mergeReplies(makeSuccess(i, accum), result);\r\n }\r\n }\r\n });\r\n};\r\n\r\n_.tieWith = function(separator) {\r\n assertString(separator);\r\n return this.map(function(args) {\r\n assertArray(args);\r\n if (args.length) {\r\n assertString(args[0]);\r\n var s = args[0];\r\n for (var i = 1; i < args.length; i++) {\r\n assertString(args[i]);\r\n s += separator + args[i];\r\n }\r\n return s;\r\n } else {\r\n return \"\";\r\n }\r\n });\r\n};\r\n\r\n_.tie = function() {\r\n return this.tieWith(\"\");\r\n};\r\n\r\n_.times = function(min, max) {\r\n var self = this;\r\n if (arguments.length < 2) {\r\n max = min;\r\n }\r\n assertNumber(min);\r\n assertNumber(max);\r\n return Parsimmon(function(input, i) {\r\n var accum = [];\r\n var result = undefined;\r\n var prevResult = undefined;\r\n for (var times = 0; times < min; times += 1) {\r\n result = self._(input, i);\r\n prevResult = mergeReplies(result, prevResult);\r\n if (result.status) {\r\n i = result.index;\r\n accum.push(result.value);\r\n } else {\r\n return prevResult;\r\n }\r\n }\r\n for (; times < max; times += 1) {\r\n result = self._(input, i);\r\n prevResult = mergeReplies(result, prevResult);\r\n if (result.status) {\r\n i = result.index;\r\n accum.push(result.value);\r\n } else {\r\n break;\r\n }\r\n }\r\n return mergeReplies(makeSuccess(i, accum), prevResult);\r\n });\r\n};\r\n\r\n_.result = function(res) {\r\n return this.map(function() {\r\n return res;\r\n });\r\n};\r\n\r\n_.atMost = function(n) {\r\n return this.times(0, n);\r\n};\r\n\r\n_.atLeast = function(n) {\r\n return seqMap(this.times(n), this.many(), function(init, rest) {\r\n return init.concat(rest);\r\n });\r\n};\r\n\r\n_.map = function(fn) {\r\n assertFunction(fn);\r\n var self = this;\r\n return Parsimmon(function(input, i) {\r\n var result = self._(input, i);\r\n if (!result.status) {\r\n return result;\r\n }\r\n return mergeReplies(makeSuccess(result.index, fn(result.value)), result);\r\n });\r\n};\r\n\r\n_.contramap = function(fn) {\r\n assertFunction(fn);\r\n var self = this;\r\n return Parsimmon(function(input, i) {\r\n var result = self.parse(fn(input.slice(i)));\r\n if (!result.status) {\r\n return result;\r\n }\r\n return makeSuccess(i + input.length, result.value);\r\n });\r\n};\r\n\r\n_.promap = function(f, g) {\r\n assertFunction(f);\r\n assertFunction(g);\r\n return this.contramap(f).map(g);\r\n};\r\n\r\n_.skip = function(next) {\r\n return seq(this, next).map(function(results) {\r\n return results[0];\r\n });\r\n};\r\n\r\n_.mark = function() {\r\n return seqMap(index, this, index, function(start, value, end) {\r\n return {\r\n start: start,\r\n value: value,\r\n end: end\r\n };\r\n });\r\n};\r\n\r\n_.node = function(name) {\r\n return seqMap(index, this, index, function(start, value, end) {\r\n return {\r\n name: name,\r\n value: value,\r\n start: start,\r\n end: end\r\n };\r\n });\r\n};\r\n\r\n_.sepBy = function(separator) {\r\n return sepBy(this, separator);\r\n};\r\n\r\n_.sepBy1 = function(separator) {\r\n return sepBy1(this, separator);\r\n};\r\n\r\n_.lookahead = function(x) {\r\n return this.skip(lookahead(x));\r\n};\r\n\r\n_.notFollowedBy = function(x) {\r\n return this.skip(notFollowedBy(x));\r\n};\r\n\r\n_.desc = function(expected) {\r\n if (!isArray(expected)) {\r\n expected = [expected];\r\n }\r\n var self = this;\r\n return Parsimmon(function(input, i) {\r\n var reply = self._(input, i);\r\n if (!reply.status) {\r\n reply.expected = expected;\r\n }\r\n return reply;\r\n });\r\n};\r\n\r\n_.fallback = function(result) {\r\n return this.or(succeed(result));\r\n};\r\n\r\n_.ap = function(other) {\r\n return seqMap(other, this, function(f, x) {\r\n return f(x);\r\n });\r\n};\r\n\r\n_.chain = function(f) {\r\n var self = this;\r\n return Parsimmon(function(input, i) {\r\n var result = self._(input, i);\r\n if (!result.status) {\r\n return result;\r\n }\r\n var nextParser = f(result.value);\r\n return mergeReplies(nextParser._(input, result.index), result);\r\n });\r\n};\r\n\r\n// -*- Constructors -*-\r\n\r\nexport function string(str) {\r\n assertString(str);\r\n var expected = \"'\" + str + \"'\";\r\n return Parsimmon(function(input, i) {\r\n var j = i + str.length;\r\n var head = input.slice(i, j);\r\n if (head === str) {\r\n return makeSuccess(j, head);\r\n } else {\r\n return makeFailure(i, expected);\r\n }\r\n });\r\n}\r\n\r\nexport function byte(b) {\r\n ensureBuffer();\r\n assertNumber(b);\r\n if (b > 0xff) {\r\n throw new Error(\r\n \"Value specified to byte constructor (\" +\r\n b +\r\n \"=0x\" +\r\n b.toString(16) +\r\n \") is larger in value than a single byte.\"\r\n );\r\n }\r\n var expected = (b > 0xf ? \"0x\" : \"0x0\") + b.toString(16);\r\n return Parsimmon(function(input, i) {\r\n var head = get(input, i);\r\n if (head === b) {\r\n return makeSuccess(i + 1, head);\r\n } else {\r\n return makeFailure(i, expected);\r\n }\r\n });\r\n}\r\n\r\nexport function regexp(re, group) {\r\n assertRegexp(re);\r\n if (arguments.length >= 2) {\r\n assertNumber(group);\r\n } else {\r\n group = 0;\r\n }\r\n var anchored = anchoredRegexp(re);\r\n var expected = \"\" + re;\r\n return Parsimmon(function(input, i) {\r\n var match = anchored.exec(input.slice(i));\r\n if (match) {\r\n if (0 <= group && group <= match.length) {\r\n var fullMatch = match[0];\r\n var groupMatch = match[group];\r\n return makeSuccess(i + fullMatch.length, groupMatch);\r\n }\r\n var message =\r\n \"valid match group (0 to \" + match.length + \") in \" + expected;\r\n return makeFailure(i, message);\r\n }\r\n return makeFailure(i, expected);\r\n });\r\n}\r\n\r\nexport function succeed(value) {\r\n return Parsimmon(function(input, i) {\r\n return makeSuccess(i, value);\r\n });\r\n}\r\n\r\nexport function fail(expected) {\r\n return Parsimmon(function(input, i) {\r\n return makeFailure(i, expected);\r\n });\r\n}\r\n\r\nexport function lookahead(x) {\r\n if (isParser(x)) {\r\n return Parsimmon(function(input, i) {\r\n var result = x._(input, i);\r\n result.index = i;\r\n result.value = \"\";\r\n return result;\r\n });\r\n } else if (typeof x === \"string\") {\r\n return lookahead(string(x));\r\n } else if (x instanceof RegExp) {\r\n return lookahead(regexp(x));\r\n }\r\n throw new Error(\"not a string, regexp, or parser: \" + x);\r\n}\r\n\r\nexport function notFollowedBy(parser) {\r\n assertParser(parser);\r\n return Parsimmon(function(input, i) {\r\n var result = parser._(input, i);\r\n var text = input.slice(i, result.index);\r\n return result.status\r\n ? makeFailure(i, 'not \"' + text + '\"')\r\n : makeSuccess(i, null);\r\n });\r\n}\r\n\r\nexport function test(predicate) {\r\n assertFunction(predicate);\r\n return Parsimmon(function(input, i) {\r\n var char = get(input, i);\r\n if (i < input.length && predicate(char)) {\r\n return makeSuccess(i + 1, char);\r\n } else {\r\n return makeFailure(i, \"a character/byte matching \" + predicate);\r\n }\r\n });\r\n}\r\n\r\nexport function oneOf(str) {\r\n var expected = str.split(\"\");\r\n for (var idx = 0; idx < expected.length; idx++) {\r\n expected[idx] = \"'\" + expected[idx] + \"'\";\r\n }\r\n return test(function(ch) {\r\n return str.indexOf(ch) >= 0;\r\n }).desc(expected);\r\n}\r\n\r\nexport function noneOf(str) {\r\n return test(function(ch) {\r\n return str.indexOf(ch) < 0;\r\n }).desc(\"none of '\" + str + \"'\");\r\n}\r\n\r\nexport function custom(parsingFunction) {\r\n return Parsimmon(parsingFunction(makeSuccess, makeFailure));\r\n}\r\n\r\n// TODO[ES5]: Improve error message using JSON.stringify eventually.\r\nexport function range(begin, end) {\r\n return test(function(ch) {\r\n return begin <= ch && ch <= end;\r\n }).desc(begin + \"-\" + end);\r\n}\r\n\r\nexport function takeWhile(predicate) {\r\n assertFunction(predicate);\r\n\r\n return Parsimmon(function(input, i) {\r\n var j = i;\r\n while (j < input.length && predicate(get(input, j))) {\r\n j++;\r\n }\r\n return makeSuccess(j, input.slice(i, j));\r\n });\r\n}\r\n\r\nexport function lazy(desc, f) {\r\n if (arguments.length < 2) {\r\n f = desc;\r\n desc = undefined;\r\n }\r\n\r\n var parser = Parsimmon(function(input, i) {\r\n parser._ = f()._;\r\n return parser._(input, i);\r\n });\r\n\r\n if (desc) {\r\n return parser.desc(desc);\r\n } else {\r\n return parser;\r\n }\r\n}\r\n\r\n// -*- Fantasy Land Extras -*-\r\n\r\nfunction empty() {\r\n return fail(\"fantasy-land/empty\");\r\n}\r\n\r\n_.concat = _.or;\r\n_.empty = empty;\r\n_.of = succeed;\r\n_[\"fantasy-land/ap\"] = _.ap;\r\n_[\"fantasy-land/chain\"] = _.chain;\r\n_[\"fantasy-land/concat\"] = _.concat;\r\n_[\"fantasy-land/empty\"] = _.empty;\r\n_[\"fantasy-land/of\"] = _.of;\r\n_[\"fantasy-land/map\"] = _.map;\r\n\r\n// -*- Base Parsers -*-\r\n\r\nexport const index = Parsimmon(function(input, i) {\r\n return makeSuccess(i, makeLineColumnIndex(input, i));\r\n});\r\n\r\nexport const any = Parsimmon(function(input, i) {\r\n if (i >= input.length) {\r\n return makeFailure(i, \"any character/byte\");\r\n }\r\n return makeSuccess(i + 1, get(input, i));\r\n});\r\n\r\nexport const all = Parsimmon(function(input, i) {\r\n return makeSuccess(input.length, input.slice(i));\r\n});\r\n\r\nexport const eof = Parsimmon(function(input, i) {\r\n if (i < input.length) {\r\n return makeFailure(i, \"EOF\");\r\n }\r\n return makeSuccess(i, null);\r\n});\r\n\r\nexport const digit = regexp(/[0-9]/).desc(\"a digit\");\r\nexport const digits = regexp(/[0-9]*/).desc(\"optional digits\");\r\nexport const letter = regexp(/[a-z]/i).desc(\"a letter\");\r\nexport const letters = regexp(/[a-z]*/i).desc(\"optional letters\");\r\nexport const optWhitespace = regexp(/\\s*/).desc(\"optional whitespace\");\r\nexport const whitespace = regexp(/\\s+/).desc(\"whitespace\");\r\nexport const cr = string(\"\\r\");\r\nexport const lf = string(\"\\n\");\r\nexport const crlf = string(\"\\r\\n\");\r\nexport const newline = alt(crlf, lf, cr).desc(\"newline\");\r\nexport const end = alt(newline, eof);","namespace Fable.Parsimmon\r\n\r\nopen Fable.Core\r\nopen Fable.Core.JsInterop\r\n\r\ntype ParseResult<'t> =\r\n abstract status : bool\r\n abstract value : 't\r\n\r\ntype IParserOffSet =\r\n abstract offset : int\r\n abstract line : int\r\n abstract column : int\r\n\r\ntype TokenPosition =\r\n { offset: int\r\n line: int\r\n column: int }\r\n\r\ntype NodeResult<'t> =\r\n { name: string\r\n value: 't\r\n start: TokenPosition\r\n ``end``: TokenPosition }\r\n\r\ntype IParser<'t> =\r\n abstract map<'u> : ('t -> 'u) -> IParser<'u>\r\n abstract parse : string -> ParseResult<'t>\r\n abstract times : int -> IParser<'t []>\r\n abstract times : int * int -> IParser<'t []>\r\n abstract many : unit -> IParser<'t []>\r\n []\r\n abstract chain : IParser<'u> -> IParser<'u>\r\n []\r\n abstract bind : ('t -> IParser<'u>) -> IParser<'u>\r\n abstract skip : IParser<'u> -> IParser<'t>\r\n abstract sepBy : IParser<'u> -> IParser<'t []>\r\n abstract fallback : 't -> IParser<'t>\r\n abstract trim : IParser<'u> -> IParser<'t>\r\n abstract notFollowedBy : IParser<'u> -> IParser<'t>\r\n abstract atMost : int -> IParser<'t[]>\r\n abstract atLeast : int -> IParser<'t[]>\r\n []\r\n abstract orTry : IParser<'t> -> IParser<'t>\r\n abstract sepBy1 : IParser<'u> -> IParser<'t []>\r\n []\r\n abstract node : string -> IParser>\r\n\r\nmodule Parsimmon =\r\n let parseRaw (input: string) (parser: IParser<'t>) =\r\n parser.parse input\r\n\r\n let parse (input: string) (parser: IParser<'t>) =\r\n parser.parse input\r\n |> fun result ->\r\n match result.status with\r\n | true -> Some result.value\r\n | false -> None\r\n\r\n /// A parser that consumes no input and yields an object an object representing the current offset into the parse: it has a 0-based character offset property and 1-based line and column properties\r\n let index : IParser =\r\n import \"index\" \"./Parsimmon.js\"\r\n\r\n /// Returns a new parser which tries parser, and if it fails uses otherParser. Example:\r\n let orTry (otherParser: IParser<'t>) (parser: IParser<'t>) : IParser<'t> =\r\n parser.orTry(otherParser)\r\n\r\n /// Returns a new parser that tries to parse the input exactly `n` times\r\n let times<'t> (n: int) (parser : IParser<'t>) : IParser<'t[]> =\r\n parser.times n\r\n\r\n /// Expects parser at least n times. Yields an array of the results.\r\n let atLeast (n: int) (parser: IParser<'t>) : IParser<'t[]> =\r\n parser.atLeast n\r\n\r\n\r\n /// Expects parser at most n times. Yields an array of the results.\r\n let atMost (n: int) (parser: IParser<'t>) : IParser<'t[]> =\r\n parser.atMost n\r\n\r\n let skip (skipped: IParser<'u>) (keep: IParser<'t>) : IParser<'t> =\r\n keep.skip skipped\r\n\r\n let many (parser : IParser<'t>) : IParser<'t[]> =\r\n parser.many()\r\n\r\n /// Returns a parser that looks for a match to the regexp and yields the entire text matched. The regexp will always match starting at the current parse location.\r\n [] // Emit(\"$0(/$1!/)\")>]\r\n let regex (pattern: string) : IParser = jsNative\r\n\r\n let ofLazy (f: unit -> IParser<'t>) : IParser<'t> =\r\n import \"lazy\" \"./Parsimmon.js\"\r\n\r\n /// This is the same as Parsimmon.sepBy, but matches the parser at least once.\r\n let seperateByAtLeastOne (seperator : IParser<'u>) (parser: IParser<'t>) : IParser<'t[]> =\r\n parser.sepBy1(seperator)\r\n\r\n /// Expects parser \"after\" to follow parser \"before\", and yields the result of \"before\".\r\n let chain (after: IParser<'u>) (before: IParser<'t>) : IParser<'u> =\r\n before.chain after\r\n\r\n /// Returns a new parser which tries parser \"p\", and on success calls the function \"f\" with the result of the parse, which is expected to return another parser, which will be tried next. This allows you to dynamically decide how to continue the parse, which is impossible with the other combinators.\r\n let bind (f: 't -> IParser<'u>) (p: IParser<'t>) : IParser<'u> =\r\n p.bind f\r\n\r\n /// A parser that consumes one letter\r\n let letter : IParser =\r\n import \"letter\" \"./Parsimmon.js\"\r\n\r\n /// Returns a parser that tries `parser` and succeeds if `parser` is able to parse between `min` and `max` times\r\n let timesBetween (min: int) (max: int) (parser: IParser<'u>) =\r\n parser.times(min, max)\r\n\r\n /// A parser that consumes one or more letters\r\n let letters : IParser =\r\n import \"letters\" \"./Parsimmon.js\"\r\n\r\n /// A parser that expects to be at the end of the input (zero characters left).\r\n let endOfFile : IParser =\r\n import \"eof\" \"./Parsimmon.js\"\r\n\r\n /// Returns a parser that looks for anything but whatever \"p\" wants to parse, and does not consume it. Yields the same result as \"before\".\r\n let notFollowedBy (p: IParser<'u>) (before: IParser<'t>) : IParser<'t> =\r\n before.notFollowedBy p\r\n\r\n /// Returns a parser that doesn't consume any input, and yields the given value\r\n let succeed (value: 't) : IParser<'t> =\r\n import \"succeed\" \"./Parsimmon.js\"\r\n\r\n /// Parses using parser, but does not consume what it parses. Yields an empty string.\r\n let lookahead (parser: IParser<'t>) : IParser =\r\n import \"lookahead\" \"./Parsimmon.js\"\r\n\r\n // A parser that consumes one digit\r\n let digit : IParser =\r\n import \"digit\" \"./Parsimmon.js\"\r\n\r\n // A parser that consumes one or more digits\r\n let digits : IParser =\r\n digit\r\n |> many\r\n\r\n /// Returns a new parser which tries \"parser\" and, if it fails, yields value without consuming any input.\r\n let fallback (value: 't) (parser: IParser<'t>) : IParser<'t> =\r\n parser.fallback value\r\n\r\n let seperateBy (content: IParser<'u>) (others: IParser<'t>) : IParser<'t[]> =\r\n others.sepBy(content)\r\n\r\n let between (left: IParser<'t>) (right: IParser<'u>) (middle: IParser<'v>) =\r\n left\r\n |> chain middle\r\n |> skip right\r\n\r\n /// Transforms the parsed value of the given parser.\r\n let map (f: 't -> 'u) (parser: IParser<'t>) = parser.map f\r\n\r\n /// Alias of Parsimmon.concat\r\n let tie (parser: IParser) : IParser =\r\n map (String.concat \"\") parser\r\n\r\n /// A parser that consumes and yields the next character of the input.\r\n let any : IParser =\r\n import \"any\" \"./Parsimmon.js\"\r\n\r\n /// Accepts any number of parsers, yielding the value of the first one that succeeds, backtracking in between.\r\n let choose (ps: IParser<'t> list) : IParser<'t> =\r\n List.reduce (fun acc parser -> acc.orTry(parser)) ps\r\n\r\n /// A parser that consumes and yields the entire remainder of the input.\r\n let all : IParser =\r\n import \"all\" \"./Parsimmon.js\"\r\n\r\n /// Returns a failing parser with the given message.\r\n let fail (input: string) : IParser =\r\n import \"fail\" \"./Parsimmon.js\"\r\n\r\n /// Returns a parser that yield a single character if it passes the predicate function.\r\n let satisfy (f: string -> bool) : IParser =\r\n import \"test\" \"./Parsimmon.js\"\r\n\r\n /// Returns a parser yield a string containing all the next characters that pass the predicate \"f\"\r\n let takeWhile (f: string -> bool) : IParser =\r\n import \"takeWhile\" \"./Parsimmon.js\"\r\n\r\n /// Returns a parser that can only parse the exact given input string\r\n let str (input: string) : IParser =\r\n import \"string\" \"./Parsimmon.js\"\r\n\r\n /// Returns a parser that parses any of the characters of the input string\r\n let oneOf (input: string) : IParser =\r\n import \"oneOf\" \"./Parsimmon.js\"\r\n\r\n let whitespace : IParser =\r\n import \"whitespace\" \"./Parsimmon.js\"\r\n\r\n let optionalWhitespace : IParser =\r\n import \"optWhitespace\" \"./Parsimmon.js\"\r\n\r\n /// Returns a parser that succeeds one or more times\r\n let atLeastOneOrMany (parser: IParser<'t>) : IParser<'t[]> =\r\n atLeast 1 parser\r\n\r\n let stringReturn (input: string) (value: 't) : IParser<'t> =\r\n str input\r\n |> map (fun _ -> value)\r\n\r\n /// Returns a parser that parses comsumes any character of a string other than the characters of the input string\r\n let noneOf (input: string) : IParser =\r\n import \"noneOf\" \"./Parsimmon.js\"\r\n\r\n let seq2 (p1: IParser<'t>) (p2:IParser<'u>) : IParser<'t * 'u> =\r\n import \"seq\" \"./Parsimmon.js\"\r\n\r\n let trim (trimmed: IParser<'a>) (p: IParser<'t>) : IParser<'t> =\r\n p.trim trimmed\r\n\r\n /// Equivalent to `parser.map (String.concat \"\")`\r\n let concat (parser: IParser) : IParser =\r\n parser.map (String.concat \"\")\r\n\r\n let seq3 (p1: IParser<'t>)\r\n (p2: IParser<'u>)\r\n (p3:IParser<'v>) : IParser<'t * 'u * 'v> =\r\n import \"seq\" \"./Parsimmon.js\"\r\n\r\n let seq4 (p1: IParser<'t>)\r\n (p2: IParser<'u>)\r\n (p3:IParser<'v>)\r\n (p4:IParser<'w>) : IParser<'t * 'u * 'v * 'w> =\r\n import \"seq\" \"./Parsimmon.js\"\r\n\r\n let seq5 (p1: IParser<'t>)\r\n (p2: IParser<'u>)\r\n (p3: IParser<'v>)\r\n (p4: IParser<'w>)\r\n (p5: IParser<'q>) : IParser<'t * 'u * 'v * 'w * 'q> =\r\n import \"seq\" \"./Parsimmon.js\"\r\n\r\n /// Equivalent to `parser.node(\"description\")`\r\n let node<'t> description (p:IParser<'t>) = p.node(description)","import { FSharpRef } from \"./Types.js\";\nexport function tryParse(str, defValue) {\n // TODO: test if value is valid and in range\n if (str != null && /\\S/.test(str)) {\n const v = +str.replace(\"_\", \"\");\n if (!Number.isNaN(v)) {\n defValue.contents = v;\n return true;\n }\n }\n return false;\n}\nexport function parse(str) {\n const defValue = new FSharpRef(0);\n if (tryParse(str, defValue)) {\n return defValue.contents;\n }\n else {\n throw new Error(\"Input string was not in a correct format.\");\n }\n}\n// JS Number.isFinite function evals false for NaN\nexport function isPositiveInfinity(x) {\n return x === Number.POSITIVE_INFINITY;\n}\nexport function isNegativeInfinity(x) {\n return x === Number.NEGATIVE_INFINITY;\n}\nexport function isInfinity(x) {\n return x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY;\n}\nexport function max(x, y) {\n return x > y ? x : y;\n}\nexport function min(x, y) {\n return x < y ? x : y;\n}\nexport function maxMagnitude(x, y) {\n return Math.abs(x) > Math.abs(y) ? x : y;\n}\nexport function minMagnitude(x, y) {\n return Math.abs(x) < Math.abs(y) ? x : y;\n}\nexport function clamp(x, min, max) {\n return x < min ? min : x > max ? max : x;\n}\n","import { record_type, bool_type, list_type, option_type, class_type } from \"./Reflection.js\";\nimport { some, value as value_1 } from \"./Option.js\";\nimport { structuralHash, compare, toIterator, equals, disposeSafe, getEnumerator, isArrayLike } from \"./Util.js\";\nimport { singleton, ofArrayWithTail, head, tail, isEmpty as isEmpty_1, fold as fold_1, empty as empty_1, FSharpList, cons } from \"./List.js\";\nimport { map as map_2, fill } from \"./Array.js\";\nimport { Record } from \"./Types.js\";\nimport { tryPick as tryPick_1, pick as pick_1, iterate as iterate_1, compareWith, map as map_1, unfold } from \"./Seq.js\";\nimport { format, join } from \"./String.js\";\nexport class MapTreeLeaf$2 {\n constructor(k, v) {\n this.k = k;\n this.v = v;\n }\n}\nexport function MapTreeLeaf$2_$reflection(gen0, gen1) {\n return class_type(\"Map.MapTreeLeaf`2\", [gen0, gen1], MapTreeLeaf$2);\n}\nexport function MapTreeLeaf$2_$ctor_5BDDA1(k, v) {\n return new MapTreeLeaf$2(k, v);\n}\nexport function MapTreeLeaf$2__get_Key(_) {\n return _.k;\n}\nexport function MapTreeLeaf$2__get_Value(_) {\n return _.v;\n}\nexport class MapTreeNode$2 extends MapTreeLeaf$2 {\n constructor(k, v, left, right, h) {\n super(k, v);\n this.left = left;\n this.right = right;\n this.h = (h | 0);\n }\n}\nexport function MapTreeNode$2_$reflection(gen0, gen1) {\n return class_type(\"Map.MapTreeNode`2\", [gen0, gen1], MapTreeNode$2, MapTreeLeaf$2_$reflection(gen0, gen1));\n}\nexport function MapTreeNode$2_$ctor_Z39DE9543(k, v, left, right, h) {\n return new MapTreeNode$2(k, v, left, right, h);\n}\nexport function MapTreeNode$2__get_Left(_) {\n return _.left;\n}\nexport function MapTreeNode$2__get_Right(_) {\n return _.right;\n}\nexport function MapTreeNode$2__get_Height(_) {\n return _.h;\n}\nexport function MapTreeModule_empty() {\n return void 0;\n}\nexport function MapTreeModule_sizeAux(acc_mut, m_mut) {\n MapTreeModule_sizeAux: while (true) {\n const acc = acc_mut, m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n acc_mut = MapTreeModule_sizeAux(acc + 1, MapTreeNode$2__get_Left(mn));\n m_mut = MapTreeNode$2__get_Right(mn);\n continue MapTreeModule_sizeAux;\n }\n else {\n return (acc + 1) | 0;\n }\n }\n else {\n return acc | 0;\n }\n break;\n }\n}\nexport function MapTreeModule_size(x) {\n return MapTreeModule_sizeAux(0, x);\n}\nexport function MapTreeModule_mk(l, k, v, r) {\n let mn, mn_1;\n let hl;\n const m = l;\n if (m != null) {\n const m2 = value_1(m);\n hl = ((m2 instanceof MapTreeNode$2) ? ((mn = m2, MapTreeNode$2__get_Height(mn))) : 1);\n }\n else {\n hl = 0;\n }\n let hr;\n const m_1 = r;\n if (m_1 != null) {\n const m2_1 = value_1(m_1);\n hr = ((m2_1 instanceof MapTreeNode$2) ? ((mn_1 = m2_1, MapTreeNode$2__get_Height(mn_1))) : 1);\n }\n else {\n hr = 0;\n }\n const m_2 = ((hl < hr) ? hr : hl) | 0;\n if (m_2 === 0) {\n return MapTreeLeaf$2_$ctor_5BDDA1(k, v);\n }\n else {\n return MapTreeNode$2_$ctor_Z39DE9543(k, v, l, r, m_2 + 1);\n }\n}\nexport function MapTreeModule_rebalance(t1, k, v, t2) {\n let mn, mn_1, m_2, m2_2, mn_2, m_3, m2_3, mn_3;\n let t1h;\n const m = t1;\n if (m != null) {\n const m2 = value_1(m);\n t1h = ((m2 instanceof MapTreeNode$2) ? ((mn = m2, MapTreeNode$2__get_Height(mn))) : 1);\n }\n else {\n t1h = 0;\n }\n let t2h;\n const m_1 = t2;\n if (m_1 != null) {\n const m2_1 = value_1(m_1);\n t2h = ((m2_1 instanceof MapTreeNode$2) ? ((mn_1 = m2_1, MapTreeNode$2__get_Height(mn_1))) : 1);\n }\n else {\n t2h = 0;\n }\n if (t2h > (t1h + 2)) {\n const matchValue = value_1(t2);\n if (matchValue instanceof MapTreeNode$2) {\n const t2$0027 = matchValue;\n if (((m_2 = MapTreeNode$2__get_Left(t2$0027), (m_2 != null) ? ((m2_2 = value_1(m_2), (m2_2 instanceof MapTreeNode$2) ? ((mn_2 = m2_2, MapTreeNode$2__get_Height(mn_2))) : 1)) : 0)) > (t1h + 1)) {\n const matchValue_1 = value_1(MapTreeNode$2__get_Left(t2$0027));\n if (matchValue_1 instanceof MapTreeNode$2) {\n const t2l = matchValue_1;\n return MapTreeModule_mk(MapTreeModule_mk(t1, k, v, MapTreeNode$2__get_Left(t2l)), MapTreeLeaf$2__get_Key(t2l), MapTreeLeaf$2__get_Value(t2l), MapTreeModule_mk(MapTreeNode$2__get_Right(t2l), MapTreeLeaf$2__get_Key(t2$0027), MapTreeLeaf$2__get_Value(t2$0027), MapTreeNode$2__get_Right(t2$0027)));\n }\n else {\n throw new Error(\"internal error: Map.rebalance\");\n }\n }\n else {\n return MapTreeModule_mk(MapTreeModule_mk(t1, k, v, MapTreeNode$2__get_Left(t2$0027)), MapTreeLeaf$2__get_Key(t2$0027), MapTreeLeaf$2__get_Value(t2$0027), MapTreeNode$2__get_Right(t2$0027));\n }\n }\n else {\n throw new Error(\"internal error: Map.rebalance\");\n }\n }\n else if (t1h > (t2h + 2)) {\n const matchValue_2 = value_1(t1);\n if (matchValue_2 instanceof MapTreeNode$2) {\n const t1$0027 = matchValue_2;\n if (((m_3 = MapTreeNode$2__get_Right(t1$0027), (m_3 != null) ? ((m2_3 = value_1(m_3), (m2_3 instanceof MapTreeNode$2) ? ((mn_3 = m2_3, MapTreeNode$2__get_Height(mn_3))) : 1)) : 0)) > (t2h + 1)) {\n const matchValue_3 = value_1(MapTreeNode$2__get_Right(t1$0027));\n if (matchValue_3 instanceof MapTreeNode$2) {\n const t1r = matchValue_3;\n return MapTreeModule_mk(MapTreeModule_mk(MapTreeNode$2__get_Left(t1$0027), MapTreeLeaf$2__get_Key(t1$0027), MapTreeLeaf$2__get_Value(t1$0027), MapTreeNode$2__get_Left(t1r)), MapTreeLeaf$2__get_Key(t1r), MapTreeLeaf$2__get_Value(t1r), MapTreeModule_mk(MapTreeNode$2__get_Right(t1r), k, v, t2));\n }\n else {\n throw new Error(\"internal error: Map.rebalance\");\n }\n }\n else {\n return MapTreeModule_mk(MapTreeNode$2__get_Left(t1$0027), MapTreeLeaf$2__get_Key(t1$0027), MapTreeLeaf$2__get_Value(t1$0027), MapTreeModule_mk(MapTreeNode$2__get_Right(t1$0027), k, v, t2));\n }\n }\n else {\n throw new Error(\"internal error: Map.rebalance\");\n }\n }\n else {\n return MapTreeModule_mk(t1, k, v, t2);\n }\n}\nexport function MapTreeModule_add(comparer, k, v, m) {\n if (m != null) {\n const m2 = value_1(m);\n const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0;\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n if (c < 0) {\n return MapTreeModule_rebalance(MapTreeModule_add(comparer, k, v, MapTreeNode$2__get_Left(mn)), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn));\n }\n else if (c === 0) {\n return MapTreeNode$2_$ctor_Z39DE9543(k, v, MapTreeNode$2__get_Left(mn), MapTreeNode$2__get_Right(mn), MapTreeNode$2__get_Height(mn));\n }\n else {\n return MapTreeModule_rebalance(MapTreeNode$2__get_Left(mn), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeModule_add(comparer, k, v, MapTreeNode$2__get_Right(mn)));\n }\n }\n else if (c < 0) {\n return MapTreeNode$2_$ctor_Z39DE9543(k, v, MapTreeModule_empty(), m, 2);\n }\n else if (c === 0) {\n return MapTreeLeaf$2_$ctor_5BDDA1(k, v);\n }\n else {\n return MapTreeNode$2_$ctor_Z39DE9543(k, v, m, MapTreeModule_empty(), 2);\n }\n }\n else {\n return MapTreeLeaf$2_$ctor_5BDDA1(k, v);\n }\n}\nexport function MapTreeModule_tryFind(comparer_mut, k_mut, m_mut) {\n MapTreeModule_tryFind: while (true) {\n const comparer = comparer_mut, k = k_mut, m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0;\n if (c === 0) {\n return some(MapTreeLeaf$2__get_Value(m2));\n }\n else if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n comparer_mut = comparer;\n k_mut = k;\n m_mut = ((c < 0) ? MapTreeNode$2__get_Left(mn) : MapTreeNode$2__get_Right(mn));\n continue MapTreeModule_tryFind;\n }\n else {\n return void 0;\n }\n }\n else {\n return void 0;\n }\n break;\n }\n}\nexport function MapTreeModule_find(comparer, k, m) {\n const matchValue = MapTreeModule_tryFind(comparer, k, m);\n if (matchValue == null) {\n throw new Error();\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function MapTreeModule_partition1(comparer, f, k, v, acc1, acc2) {\n if (f(k, v)) {\n return [MapTreeModule_add(comparer, k, v, acc1), acc2];\n }\n else {\n return [acc1, MapTreeModule_add(comparer, k, v, acc2)];\n }\n}\nexport function MapTreeModule_partitionAux(comparer_mut, f_mut, m_mut, acc__mut, acc__1_mut) {\n MapTreeModule_partitionAux: while (true) {\n const comparer = comparer_mut, f = f_mut, m = m_mut, acc_ = acc__mut, acc__1 = acc__1_mut;\n const acc = [acc_, acc__1];\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n const acc_1 = MapTreeModule_partitionAux(comparer, f, MapTreeNode$2__get_Right(mn), acc[0], acc[1]);\n const acc_4 = MapTreeModule_partition1(comparer, f, MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), acc_1[0], acc_1[1]);\n comparer_mut = comparer;\n f_mut = f;\n m_mut = MapTreeNode$2__get_Left(mn);\n acc__mut = acc_4[0];\n acc__1_mut = acc_4[1];\n continue MapTreeModule_partitionAux;\n }\n else {\n return MapTreeModule_partition1(comparer, f, MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), acc[0], acc[1]);\n }\n }\n else {\n return acc;\n }\n break;\n }\n}\nexport function MapTreeModule_partition(comparer, f, m) {\n return MapTreeModule_partitionAux(comparer, f, m, MapTreeModule_empty(), MapTreeModule_empty());\n}\nexport function MapTreeModule_filter1(comparer, f, k, v, acc) {\n if (f(k, v)) {\n return MapTreeModule_add(comparer, k, v, acc);\n }\n else {\n return acc;\n }\n}\nexport function MapTreeModule_filterAux(comparer_mut, f_mut, m_mut, acc_mut) {\n MapTreeModule_filterAux: while (true) {\n const comparer = comparer_mut, f = f_mut, m = m_mut, acc = acc_mut;\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n const acc_1 = MapTreeModule_filterAux(comparer, f, MapTreeNode$2__get_Left(mn), acc);\n const acc_2 = MapTreeModule_filter1(comparer, f, MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), acc_1);\n comparer_mut = comparer;\n f_mut = f;\n m_mut = MapTreeNode$2__get_Right(mn);\n acc_mut = acc_2;\n continue MapTreeModule_filterAux;\n }\n else {\n return MapTreeModule_filter1(comparer, f, MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), acc);\n }\n }\n else {\n return acc;\n }\n break;\n }\n}\nexport function MapTreeModule_filter(comparer, f, m) {\n return MapTreeModule_filterAux(comparer, f, m, MapTreeModule_empty());\n}\nexport function MapTreeModule_spliceOutSuccessor(m) {\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n if (MapTreeNode$2__get_Left(mn) == null) {\n return [MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn)];\n }\n else {\n const patternInput = MapTreeModule_spliceOutSuccessor(MapTreeNode$2__get_Left(mn));\n return [patternInput[0], patternInput[1], MapTreeModule_mk(patternInput[2], MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn))];\n }\n }\n else {\n return [MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), MapTreeModule_empty()];\n }\n }\n else {\n throw new Error(\"internal error: Map.spliceOutSuccessor\");\n }\n}\nexport function MapTreeModule_remove(comparer, k, m) {\n if (m != null) {\n const m2 = value_1(m);\n const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0;\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n if (c < 0) {\n return MapTreeModule_rebalance(MapTreeModule_remove(comparer, k, MapTreeNode$2__get_Left(mn)), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn));\n }\n else if (c === 0) {\n if (MapTreeNode$2__get_Left(mn) == null) {\n return MapTreeNode$2__get_Right(mn);\n }\n else if (MapTreeNode$2__get_Right(mn) == null) {\n return MapTreeNode$2__get_Left(mn);\n }\n else {\n const patternInput = MapTreeModule_spliceOutSuccessor(MapTreeNode$2__get_Right(mn));\n return MapTreeModule_mk(MapTreeNode$2__get_Left(mn), patternInput[0], patternInput[1], patternInput[2]);\n }\n }\n else {\n return MapTreeModule_rebalance(MapTreeNode$2__get_Left(mn), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeModule_remove(comparer, k, MapTreeNode$2__get_Right(mn)));\n }\n }\n else if (c === 0) {\n return MapTreeModule_empty();\n }\n else {\n return m;\n }\n }\n else {\n return MapTreeModule_empty();\n }\n}\nexport function MapTreeModule_change(comparer, k, u, m) {\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(mn)) | 0;\n if (c < 0) {\n return MapTreeModule_rebalance(MapTreeModule_change(comparer, k, u, MapTreeNode$2__get_Left(mn)), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeNode$2__get_Right(mn));\n }\n else if (c === 0) {\n const matchValue_1 = u(some(MapTreeLeaf$2__get_Value(mn)));\n if (matchValue_1 != null) {\n return MapTreeNode$2_$ctor_Z39DE9543(k, value_1(matchValue_1), MapTreeNode$2__get_Left(mn), MapTreeNode$2__get_Right(mn), MapTreeNode$2__get_Height(mn));\n }\n else if (MapTreeNode$2__get_Left(mn) == null) {\n return MapTreeNode$2__get_Right(mn);\n }\n else if (MapTreeNode$2__get_Right(mn) == null) {\n return MapTreeNode$2__get_Left(mn);\n }\n else {\n const patternInput = MapTreeModule_spliceOutSuccessor(MapTreeNode$2__get_Right(mn));\n return MapTreeModule_mk(MapTreeNode$2__get_Left(mn), patternInput[0], patternInput[1], patternInput[2]);\n }\n }\n else {\n return MapTreeModule_rebalance(MapTreeNode$2__get_Left(mn), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), MapTreeModule_change(comparer, k, u, MapTreeNode$2__get_Right(mn)));\n }\n }\n else {\n const c_1 = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0;\n if (c_1 < 0) {\n const matchValue_2 = u(void 0);\n if (matchValue_2 != null) {\n return MapTreeNode$2_$ctor_Z39DE9543(k, value_1(matchValue_2), MapTreeModule_empty(), m, 2);\n }\n else {\n return m;\n }\n }\n else if (c_1 === 0) {\n const matchValue_3 = u(some(MapTreeLeaf$2__get_Value(m2)));\n if (matchValue_3 != null) {\n return MapTreeLeaf$2_$ctor_5BDDA1(k, value_1(matchValue_3));\n }\n else {\n return MapTreeModule_empty();\n }\n }\n else {\n const matchValue_4 = u(void 0);\n if (matchValue_4 != null) {\n return MapTreeNode$2_$ctor_Z39DE9543(k, value_1(matchValue_4), m, MapTreeModule_empty(), 2);\n }\n else {\n return m;\n }\n }\n }\n }\n else {\n const matchValue = u(void 0);\n if (matchValue != null) {\n return MapTreeLeaf$2_$ctor_5BDDA1(k, value_1(matchValue));\n }\n else {\n return m;\n }\n }\n}\nexport function MapTreeModule_mem(comparer_mut, k_mut, m_mut) {\n MapTreeModule_mem: while (true) {\n const comparer = comparer_mut, k = k_mut, m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n const c = comparer.Compare(k, MapTreeLeaf$2__get_Key(m2)) | 0;\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n if (c < 0) {\n comparer_mut = comparer;\n k_mut = k;\n m_mut = MapTreeNode$2__get_Left(mn);\n continue MapTreeModule_mem;\n }\n else if (c === 0) {\n return true;\n }\n else {\n comparer_mut = comparer;\n k_mut = k;\n m_mut = MapTreeNode$2__get_Right(mn);\n continue MapTreeModule_mem;\n }\n }\n else {\n return c === 0;\n }\n }\n else {\n return false;\n }\n break;\n }\n}\nexport function MapTreeModule_iterOpt(f_mut, m_mut) {\n MapTreeModule_iterOpt: while (true) {\n const f = f_mut, m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n MapTreeModule_iterOpt(f, MapTreeNode$2__get_Left(mn));\n f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn));\n f_mut = f;\n m_mut = MapTreeNode$2__get_Right(mn);\n continue MapTreeModule_iterOpt;\n }\n else {\n f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2));\n }\n }\n break;\n }\n}\nexport function MapTreeModule_iter(f, m) {\n MapTreeModule_iterOpt(f, m);\n}\nexport function MapTreeModule_tryPickOpt(f_mut, m_mut) {\n MapTreeModule_tryPickOpt: while (true) {\n const f = f_mut, m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n const matchValue = MapTreeModule_tryPickOpt(f, MapTreeNode$2__get_Left(mn));\n if (matchValue == null) {\n const matchValue_1 = f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn));\n if (matchValue_1 == null) {\n f_mut = f;\n m_mut = MapTreeNode$2__get_Right(mn);\n continue MapTreeModule_tryPickOpt;\n }\n else {\n return matchValue_1;\n }\n }\n else {\n return matchValue;\n }\n }\n else {\n return f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2));\n }\n }\n else {\n return void 0;\n }\n break;\n }\n}\nexport function MapTreeModule_tryPick(f, m) {\n return MapTreeModule_tryPickOpt(f, m);\n}\nexport function MapTreeModule_existsOpt(f_mut, m_mut) {\n MapTreeModule_existsOpt: while (true) {\n const f = f_mut, m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n if (MapTreeModule_existsOpt(f, MapTreeNode$2__get_Left(mn)) ? true : f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn))) {\n return true;\n }\n else {\n f_mut = f;\n m_mut = MapTreeNode$2__get_Right(mn);\n continue MapTreeModule_existsOpt;\n }\n }\n else {\n return f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2));\n }\n }\n else {\n return false;\n }\n break;\n }\n}\nexport function MapTreeModule_exists(f, m) {\n return MapTreeModule_existsOpt(f, m);\n}\nexport function MapTreeModule_forallOpt(f_mut, m_mut) {\n MapTreeModule_forallOpt: while (true) {\n const f = f_mut, m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n if (MapTreeModule_forallOpt(f, MapTreeNode$2__get_Left(mn)) && f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn))) {\n f_mut = f;\n m_mut = MapTreeNode$2__get_Right(mn);\n continue MapTreeModule_forallOpt;\n }\n else {\n return false;\n }\n }\n else {\n return f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2));\n }\n }\n else {\n return true;\n }\n break;\n }\n}\nexport function MapTreeModule_forall(f, m) {\n return MapTreeModule_forallOpt(f, m);\n}\nexport function MapTreeModule_map(f, m) {\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n const l2 = MapTreeModule_map(f, MapTreeNode$2__get_Left(mn));\n const v2 = f(MapTreeLeaf$2__get_Value(mn));\n const r2 = MapTreeModule_map(f, MapTreeNode$2__get_Right(mn));\n return MapTreeNode$2_$ctor_Z39DE9543(MapTreeLeaf$2__get_Key(mn), v2, l2, r2, MapTreeNode$2__get_Height(mn));\n }\n else {\n return MapTreeLeaf$2_$ctor_5BDDA1(MapTreeLeaf$2__get_Key(m2), f(MapTreeLeaf$2__get_Value(m2)));\n }\n }\n else {\n return MapTreeModule_empty();\n }\n}\nexport function MapTreeModule_mapiOpt(f, m) {\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n const l2 = MapTreeModule_mapiOpt(f, MapTreeNode$2__get_Left(mn));\n const v2 = f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn));\n const r2 = MapTreeModule_mapiOpt(f, MapTreeNode$2__get_Right(mn));\n return MapTreeNode$2_$ctor_Z39DE9543(MapTreeLeaf$2__get_Key(mn), v2, l2, r2, MapTreeNode$2__get_Height(mn));\n }\n else {\n return MapTreeLeaf$2_$ctor_5BDDA1(MapTreeLeaf$2__get_Key(m2), f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)));\n }\n }\n else {\n return MapTreeModule_empty();\n }\n}\nexport function MapTreeModule_mapi(f, m) {\n return MapTreeModule_mapiOpt(f, m);\n}\nexport function MapTreeModule_foldBackOpt(f_mut, m_mut, x_mut) {\n MapTreeModule_foldBackOpt: while (true) {\n const f = f_mut, m = m_mut, x = x_mut;\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n const x_1 = MapTreeModule_foldBackOpt(f, MapTreeNode$2__get_Right(mn), x);\n const x_2 = f(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), x_1);\n f_mut = f;\n m_mut = MapTreeNode$2__get_Left(mn);\n x_mut = x_2;\n continue MapTreeModule_foldBackOpt;\n }\n else {\n return f(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), x);\n }\n }\n else {\n return x;\n }\n break;\n }\n}\nexport function MapTreeModule_foldBack(f, m, x) {\n return MapTreeModule_foldBackOpt(f, m, x);\n}\nexport function MapTreeModule_foldOpt(f_mut, x_mut, m_mut) {\n MapTreeModule_foldOpt: while (true) {\n const f = f_mut, x = x_mut, m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n f_mut = f;\n x_mut = f(MapTreeModule_foldOpt(f, x, MapTreeNode$2__get_Left(mn)), MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn));\n m_mut = MapTreeNode$2__get_Right(mn);\n continue MapTreeModule_foldOpt;\n }\n else {\n return f(x, MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2));\n }\n }\n else {\n return x;\n }\n break;\n }\n}\nexport function MapTreeModule_fold(f, x, m) {\n return MapTreeModule_foldOpt(f, x, m);\n}\nexport function MapTreeModule_foldSectionOpt(comparer, lo, hi, f, m, x) {\n const foldFromTo = (f_1_mut, m_1_mut, x_1_mut) => {\n foldFromTo: while (true) {\n const f_1 = f_1_mut, m_1 = m_1_mut, x_1 = x_1_mut;\n if (m_1 != null) {\n const m2 = value_1(m_1);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n const cLoKey = comparer.Compare(lo, MapTreeLeaf$2__get_Key(mn)) | 0;\n const cKeyHi = comparer.Compare(MapTreeLeaf$2__get_Key(mn), hi) | 0;\n const x_2 = (cLoKey < 0) ? foldFromTo(f_1, MapTreeNode$2__get_Left(mn), x_1) : x_1;\n const x_3 = ((cLoKey <= 0) && (cKeyHi <= 0)) ? f_1(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn), x_2) : x_2;\n if (cKeyHi < 0) {\n f_1_mut = f_1;\n m_1_mut = MapTreeNode$2__get_Right(mn);\n x_1_mut = x_3;\n continue foldFromTo;\n }\n else {\n return x_3;\n }\n }\n else if ((comparer.Compare(lo, MapTreeLeaf$2__get_Key(m2)) <= 0) && (comparer.Compare(MapTreeLeaf$2__get_Key(m2), hi) <= 0)) {\n return f_1(MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2), x_1);\n }\n else {\n return x_1;\n }\n }\n else {\n return x_1;\n }\n break;\n }\n };\n if (comparer.Compare(lo, hi) === 1) {\n return x;\n }\n else {\n return foldFromTo(f, m, x);\n }\n}\nexport function MapTreeModule_foldSection(comparer, lo, hi, f, m, x) {\n return MapTreeModule_foldSectionOpt(comparer, lo, hi, f, m, x);\n}\nexport function MapTreeModule_toList(m) {\n const loop = (m_1_mut, acc_mut) => {\n loop: while (true) {\n const m_1 = m_1_mut, acc = acc_mut;\n if (m_1 != null) {\n const m2 = value_1(m_1);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n m_1_mut = MapTreeNode$2__get_Left(mn);\n acc_mut = cons([MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn)], loop(MapTreeNode$2__get_Right(mn), acc));\n continue loop;\n }\n else {\n return cons([MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)], acc);\n }\n }\n else {\n return acc;\n }\n break;\n }\n };\n return loop(m, empty_1());\n}\nexport function MapTreeModule_copyToArray(m, arr, i) {\n let j = i;\n MapTreeModule_iter((x, y) => {\n arr[j] = [x, y];\n j = ((j + 1) | 0);\n }, m);\n}\nexport function MapTreeModule_toArray(m) {\n const n = MapTreeModule_size(m) | 0;\n const res = fill(new Array(n), 0, n, [null, null]);\n MapTreeModule_copyToArray(m, res, 0);\n return res;\n}\nexport function MapTreeModule_ofList(comparer, l) {\n return fold_1((acc, tupledArg) => MapTreeModule_add(comparer, tupledArg[0], tupledArg[1], acc), MapTreeModule_empty(), l);\n}\nexport function MapTreeModule_mkFromEnumerator(comparer_mut, acc_mut, e_mut) {\n MapTreeModule_mkFromEnumerator: while (true) {\n const comparer = comparer_mut, acc = acc_mut, e = e_mut;\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const patternInput = e[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n comparer_mut = comparer;\n acc_mut = MapTreeModule_add(comparer, patternInput[0], patternInput[1], acc);\n e_mut = e;\n continue MapTreeModule_mkFromEnumerator;\n }\n else {\n return acc;\n }\n break;\n }\n}\nexport function MapTreeModule_ofArray(comparer, arr) {\n let res = MapTreeModule_empty();\n for (let idx = 0; idx <= (arr.length - 1); idx++) {\n const forLoopVar = arr[idx];\n res = MapTreeModule_add(comparer, forLoopVar[0], forLoopVar[1], res);\n }\n return res;\n}\nexport function MapTreeModule_ofSeq(comparer, c) {\n if (isArrayLike(c)) {\n return MapTreeModule_ofArray(comparer, c);\n }\n else if (c instanceof FSharpList) {\n return MapTreeModule_ofList(comparer, c);\n }\n else {\n const ie = getEnumerator(c);\n try {\n return MapTreeModule_mkFromEnumerator(comparer, MapTreeModule_empty(), ie);\n }\n finally {\n disposeSafe(ie);\n }\n }\n}\nexport class MapTreeModule_MapIterator$2 extends Record {\n constructor(stack, started) {\n super();\n this.stack = stack;\n this.started = started;\n }\n}\nexport function MapTreeModule_MapIterator$2_$reflection(gen0, gen1) {\n return record_type(\"Map.MapTreeModule.MapIterator`2\", [gen0, gen1], MapTreeModule_MapIterator$2, () => [[\"stack\", list_type(option_type(MapTreeLeaf$2_$reflection(gen0, gen1)))], [\"started\", bool_type]]);\n}\nexport function MapTreeModule_collapseLHS(stack_mut) {\n MapTreeModule_collapseLHS: while (true) {\n const stack = stack_mut;\n if (!isEmpty_1(stack)) {\n const rest = tail(stack);\n const m = head(stack);\n if (m != null) {\n const m2 = value_1(m);\n if (m2 instanceof MapTreeNode$2) {\n const mn = m2;\n stack_mut = ofArrayWithTail([MapTreeNode$2__get_Left(mn), MapTreeLeaf$2_$ctor_5BDDA1(MapTreeLeaf$2__get_Key(mn), MapTreeLeaf$2__get_Value(mn)), MapTreeNode$2__get_Right(mn)], rest);\n continue MapTreeModule_collapseLHS;\n }\n else {\n return stack;\n }\n }\n else {\n stack_mut = rest;\n continue MapTreeModule_collapseLHS;\n }\n }\n else {\n return empty_1();\n }\n break;\n }\n}\nexport function MapTreeModule_mkIterator(m) {\n return new MapTreeModule_MapIterator$2(MapTreeModule_collapseLHS(singleton(m)), false);\n}\nexport function MapTreeModule_notStarted() {\n throw new Error(\"enumeration not started\");\n}\nexport function MapTreeModule_alreadyFinished() {\n throw new Error(\"enumeration already finished\");\n}\nexport function MapTreeModule_current(i) {\n if (i.started) {\n const matchValue = i.stack;\n if (!isEmpty_1(matchValue)) {\n if (head(matchValue) != null) {\n const m = value_1(head(matchValue));\n if (m instanceof MapTreeNode$2) {\n throw new Error(\"Please report error: Map iterator, unexpected stack for current\");\n }\n else {\n return [MapTreeLeaf$2__get_Key(m), MapTreeLeaf$2__get_Value(m)];\n }\n }\n else {\n throw new Error(\"Please report error: Map iterator, unexpected stack for current\");\n }\n }\n else {\n return MapTreeModule_alreadyFinished();\n }\n }\n else {\n return MapTreeModule_notStarted();\n }\n}\nexport function MapTreeModule_moveNext(i) {\n if (i.started) {\n const matchValue = i.stack;\n if (!isEmpty_1(matchValue)) {\n if (head(matchValue) != null) {\n const m = value_1(head(matchValue));\n if (m instanceof MapTreeNode$2) {\n throw new Error(\"Please report error: Map iterator, unexpected stack for moveNext\");\n }\n else {\n i.stack = MapTreeModule_collapseLHS(tail(matchValue));\n return !isEmpty_1(i.stack);\n }\n }\n else {\n throw new Error(\"Please report error: Map iterator, unexpected stack for moveNext\");\n }\n }\n else {\n return false;\n }\n }\n else {\n i.started = true;\n return !isEmpty_1(i.stack);\n }\n}\nexport function MapTreeModule_mkIEnumerator(m) {\n let i = MapTreeModule_mkIterator(m);\n return {\n \"System.Collections.Generic.IEnumerator`1.get_Current\"() {\n return MapTreeModule_current(i);\n },\n \"System.Collections.IEnumerator.get_Current\"() {\n return MapTreeModule_current(i);\n },\n \"System.Collections.IEnumerator.MoveNext\"() {\n return MapTreeModule_moveNext(i);\n },\n \"System.Collections.IEnumerator.Reset\"() {\n i = MapTreeModule_mkIterator(m);\n },\n Dispose() {\n },\n };\n}\nexport function MapTreeModule_toSeq(s) {\n return unfold((en_1) => {\n if (en_1[\"System.Collections.IEnumerator.MoveNext\"]()) {\n return [en_1[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), en_1];\n }\n else {\n return void 0;\n }\n }, MapTreeModule_mkIEnumerator(s));\n}\nexport function MapTreeModule_leftmost(m_mut) {\n MapTreeModule_leftmost: while (true) {\n const m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n let matchResult, nd_1;\n if (m2 instanceof MapTreeNode$2) {\n if (MapTreeNode$2__get_Height(m2) > 1) {\n matchResult = 0;\n nd_1 = m2;\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0:\n if (MapTreeNode$2__get_Left(nd_1) == null) {\n return [MapTreeLeaf$2__get_Key(nd_1), MapTreeLeaf$2__get_Value(nd_1)];\n }\n else {\n m_mut = MapTreeNode$2__get_Left(nd_1);\n continue MapTreeModule_leftmost;\n }\n default:\n return [MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)];\n }\n }\n else {\n throw new Error();\n }\n break;\n }\n}\nexport function MapTreeModule_rightmost(m_mut) {\n MapTreeModule_rightmost: while (true) {\n const m = m_mut;\n if (m != null) {\n const m2 = value_1(m);\n let matchResult, nd_1;\n if (m2 instanceof MapTreeNode$2) {\n if (MapTreeNode$2__get_Height(m2) > 1) {\n matchResult = 0;\n nd_1 = m2;\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0:\n if (MapTreeNode$2__get_Right(nd_1) == null) {\n return [MapTreeLeaf$2__get_Key(nd_1), MapTreeLeaf$2__get_Value(nd_1)];\n }\n else {\n m_mut = MapTreeNode$2__get_Right(nd_1);\n continue MapTreeModule_rightmost;\n }\n default:\n return [MapTreeLeaf$2__get_Key(m2), MapTreeLeaf$2__get_Value(m2)];\n }\n }\n else {\n throw new Error();\n }\n break;\n }\n}\nexport class FSharpMap {\n constructor(comparer, tree) {\n this.comparer = comparer;\n this.tree = tree;\n }\n GetHashCode() {\n const this$ = this;\n return FSharpMap__ComputeHashCode(this$) | 0;\n }\n Equals(that) {\n const this$ = this;\n if (that instanceof FSharpMap) {\n const that_1 = that;\n const e1 = getEnumerator(this$);\n try {\n const e2 = getEnumerator(that_1);\n try {\n const loop = () => {\n const m1 = e1[\"System.Collections.IEnumerator.MoveNext\"]();\n if (m1 === e2[\"System.Collections.IEnumerator.MoveNext\"]()) {\n if (!m1) {\n return true;\n }\n else {\n const e1c = e1[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n const e2c = e2[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n if (equals(e1c[0], e2c[0]) && equals(e1c[1], e2c[1])) {\n return loop();\n }\n else {\n return false;\n }\n }\n }\n else {\n return false;\n }\n };\n return loop();\n }\n finally {\n disposeSafe(e2);\n }\n }\n finally {\n disposeSafe(e1);\n }\n }\n else {\n return false;\n }\n }\n toString() {\n const this$ = this;\n return (\"map [\" + join(\"; \", map_1((kv) => format(\"({0}, {1})\", kv[0], kv[1]), this$))) + \"]\";\n }\n get [Symbol.toStringTag]() {\n return \"FSharpMap\";\n }\n toJSON() {\n const this$ = this;\n return Array.from(this$);\n }\n GetEnumerator() {\n const _ = this;\n return MapTreeModule_mkIEnumerator(_.tree);\n }\n [Symbol.iterator]() {\n return toIterator(getEnumerator(this));\n }\n \"System.Collections.IEnumerable.GetEnumerator\"() {\n const _ = this;\n return MapTreeModule_mkIEnumerator(_.tree);\n }\n CompareTo(obj) {\n const m = this;\n if (obj instanceof FSharpMap) {\n const m2 = obj;\n return compareWith((kvp1, kvp2) => {\n const c = m.comparer.Compare(kvp1[0], kvp2[0]) | 0;\n return ((c !== 0) ? c : compare(kvp1[1], kvp2[1])) | 0;\n }, m, m2) | 0;\n }\n else {\n throw new Error(\"not comparable\\\\nParameter name: obj\");\n }\n }\n \"System.Collections.Generic.ICollection`1.Add2B595\"(x) {\n throw new Error(\"Map cannot be mutated\");\n }\n \"System.Collections.Generic.ICollection`1.Clear\"() {\n throw new Error(\"Map cannot be mutated\");\n }\n \"System.Collections.Generic.ICollection`1.Remove2B595\"(x) {\n throw new Error(\"Map cannot be mutated\");\n }\n \"System.Collections.Generic.ICollection`1.Contains2B595\"(x) {\n const m = this;\n return FSharpMap__ContainsKey(m, x[0]) && equals(FSharpMap__get_Item(m, x[0]), x[1]);\n }\n \"System.Collections.Generic.ICollection`1.CopyToZ3B4C077E\"(arr, i) {\n const m = this;\n MapTreeModule_copyToArray(m.tree, arr, i);\n }\n \"System.Collections.Generic.ICollection`1.get_IsReadOnly\"() {\n return true;\n }\n \"System.Collections.Generic.ICollection`1.get_Count\"() {\n const m = this;\n return FSharpMap__get_Count(m) | 0;\n }\n \"System.Collections.Generic.IReadOnlyCollection`1.get_Count\"() {\n const m = this;\n return FSharpMap__get_Count(m) | 0;\n }\n get size() {\n const m = this;\n return FSharpMap__get_Count(m) | 0;\n }\n clear() {\n throw new Error(\"Map cannot be mutated\");\n }\n delete(_arg) {\n throw new Error(\"Map cannot be mutated\");\n return false;\n }\n entries() {\n const m = this;\n return map_1((p) => [p[0], p[1]], m);\n }\n get(k) {\n const m = this;\n return FSharpMap__get_Item(m, k);\n }\n has(k) {\n const m = this;\n return FSharpMap__ContainsKey(m, k);\n }\n keys() {\n const m = this;\n return map_1((p) => p[0], m);\n }\n set(k, v) {\n const m = this;\n throw new Error(\"Map cannot be mutated\");\n return m;\n }\n values() {\n const m = this;\n return map_1((p) => p[1], m);\n }\n forEach(f, thisArg) {\n const m = this;\n iterate_1((p) => {\n f(p[1], p[0], m);\n }, m);\n }\n}\nexport function FSharpMap_$reflection(gen0, gen1) {\n return class_type(\"Map.FSharpMap\", [gen0, gen1], FSharpMap);\n}\nexport function FSharpMap_$ctor(comparer, tree) {\n return new FSharpMap(comparer, tree);\n}\nexport function FSharpMap_Empty(comparer) {\n return FSharpMap_$ctor(comparer, MapTreeModule_empty());\n}\nexport function FSharpMap__get_Comparer(m) {\n return m.comparer;\n}\nexport function FSharpMap__get_Tree(m) {\n return m.tree;\n}\nexport function FSharpMap__Add(m, key, value) {\n return FSharpMap_$ctor(m.comparer, MapTreeModule_add(m.comparer, key, value, m.tree));\n}\nexport function FSharpMap__Change(m, key, f) {\n return FSharpMap_$ctor(m.comparer, MapTreeModule_change(m.comparer, key, f, m.tree));\n}\nexport function FSharpMap__get_IsEmpty(m) {\n return m.tree == null;\n}\nexport function FSharpMap__get_Item(m, key) {\n return MapTreeModule_find(m.comparer, key, m.tree);\n}\nexport function FSharpMap__TryPick(m, f) {\n return MapTreeModule_tryPick(f, m.tree);\n}\nexport function FSharpMap__Exists(m, predicate) {\n return MapTreeModule_exists(predicate, m.tree);\n}\nexport function FSharpMap__Filter(m, predicate) {\n return FSharpMap_$ctor(m.comparer, MapTreeModule_filter(m.comparer, predicate, m.tree));\n}\nexport function FSharpMap__ForAll(m, predicate) {\n return MapTreeModule_forall(predicate, m.tree);\n}\nexport function FSharpMap__Fold(m, f, acc) {\n return MapTreeModule_foldBack(f, m.tree, acc);\n}\nexport function FSharpMap__FoldSection(m, lo, hi, f, acc) {\n return MapTreeModule_foldSection(m.comparer, lo, hi, f, m.tree, acc);\n}\nexport function FSharpMap__Iterate(m, f) {\n MapTreeModule_iter(f, m.tree);\n}\nexport function FSharpMap__MapRange(m, f) {\n return FSharpMap_$ctor(m.comparer, MapTreeModule_map(f, m.tree));\n}\nexport function FSharpMap__Map(m, f) {\n return FSharpMap_$ctor(m.comparer, MapTreeModule_mapi(f, m.tree));\n}\nexport function FSharpMap__Partition(m, predicate) {\n const patternInput = MapTreeModule_partition(m.comparer, predicate, m.tree);\n return [FSharpMap_$ctor(m.comparer, patternInput[0]), FSharpMap_$ctor(m.comparer, patternInput[1])];\n}\nexport function FSharpMap__get_Count(m) {\n return MapTreeModule_size(m.tree);\n}\nexport function FSharpMap__ContainsKey(m, key) {\n return MapTreeModule_mem(m.comparer, key, m.tree);\n}\nexport function FSharpMap__Remove(m, key) {\n return FSharpMap_$ctor(m.comparer, MapTreeModule_remove(m.comparer, key, m.tree));\n}\nexport function FSharpMap__TryGetValue(_, key, value) {\n const matchValue = MapTreeModule_tryFind(_.comparer, key, _.tree);\n if (matchValue == null) {\n return false;\n }\n else {\n const v = value_1(matchValue);\n value.contents = v;\n return true;\n }\n}\nexport function FSharpMap__get_Keys(_) {\n return map_2((kvp) => kvp[0], MapTreeModule_toArray(_.tree));\n}\nexport function FSharpMap__get_Values(_) {\n return map_2((kvp) => kvp[1], MapTreeModule_toArray(_.tree));\n}\nexport function FSharpMap__get_MinKeyValue(m) {\n return MapTreeModule_leftmost(m.tree);\n}\nexport function FSharpMap__get_MaxKeyValue(m) {\n return MapTreeModule_rightmost(m.tree);\n}\nexport function FSharpMap__TryFind(m, key) {\n return MapTreeModule_tryFind(m.comparer, key, m.tree);\n}\nexport function FSharpMap__ToList(m) {\n return MapTreeModule_toList(m.tree);\n}\nexport function FSharpMap__ToArray(m) {\n return MapTreeModule_toArray(m.tree);\n}\nexport function FSharpMap__ComputeHashCode(this$) {\n const combineHash = (x, y) => (((x << 1) + y) + 631);\n let res = 0;\n const enumerator = getEnumerator(this$);\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const activePatternResult = enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n res = (combineHash(res, structuralHash(activePatternResult[0])) | 0);\n res = (combineHash(res, structuralHash(activePatternResult[1])) | 0);\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n return res | 0;\n}\nexport function isEmpty(table) {\n return FSharpMap__get_IsEmpty(table);\n}\nexport function add(key, value, table) {\n return FSharpMap__Add(table, key, value);\n}\nexport function change(key, f, table) {\n return FSharpMap__Change(table, key, f);\n}\nexport function find(key, table) {\n return FSharpMap__get_Item(table, key);\n}\nexport function tryFind(key, table) {\n return FSharpMap__TryFind(table, key);\n}\nexport function remove(key, table) {\n return FSharpMap__Remove(table, key);\n}\nexport function containsKey(key, table) {\n return FSharpMap__ContainsKey(table, key);\n}\nexport function iterate(action, table) {\n FSharpMap__Iterate(table, action);\n}\nexport function tryPick(chooser, table) {\n return FSharpMap__TryPick(table, chooser);\n}\nexport function pick(chooser, table) {\n const matchValue = tryPick(chooser, table);\n if (matchValue != null) {\n return value_1(matchValue);\n }\n else {\n throw new Error();\n }\n}\nexport function exists(predicate, table) {\n return FSharpMap__Exists(table, predicate);\n}\nexport function filter(predicate, table) {\n return FSharpMap__Filter(table, predicate);\n}\nexport function partition(predicate, table) {\n return FSharpMap__Partition(table, predicate);\n}\nexport function forAll(predicate, table) {\n return FSharpMap__ForAll(table, predicate);\n}\nexport function map(mapping, table) {\n return FSharpMap__Map(table, mapping);\n}\nexport function fold(folder, state, table) {\n return MapTreeModule_fold(folder, state, FSharpMap__get_Tree(table));\n}\nexport function foldBack(folder, table, state) {\n return MapTreeModule_foldBack(folder, FSharpMap__get_Tree(table), state);\n}\nexport function toSeq(table) {\n return map_1((kvp) => [kvp[0], kvp[1]], table);\n}\nexport function findKey(predicate, table) {\n return pick_1((kvp) => {\n const k = kvp[0];\n if (predicate(k, kvp[1])) {\n return some(k);\n }\n else {\n return void 0;\n }\n }, table);\n}\nexport function tryFindKey(predicate, table) {\n return tryPick_1((kvp) => {\n const k = kvp[0];\n if (predicate(k, kvp[1])) {\n return some(k);\n }\n else {\n return void 0;\n }\n }, table);\n}\nexport function ofList(elements, comparer) {\n return FSharpMap_$ctor(comparer, MapTreeModule_ofSeq(comparer, elements));\n}\nexport function ofSeq(elements, comparer) {\n return FSharpMap_$ctor(comparer, MapTreeModule_ofSeq(comparer, elements));\n}\nexport function ofArray(elements, comparer) {\n return FSharpMap_$ctor(comparer, MapTreeModule_ofSeq(comparer, elements));\n}\nexport function toList(table) {\n return FSharpMap__ToList(table);\n}\nexport function toArray(table) {\n return FSharpMap__ToArray(table);\n}\nexport function keys(table) {\n return FSharpMap__get_Keys(table);\n}\nexport function values(table) {\n return FSharpMap__get_Values(table);\n}\nexport function minKeyValue(table) {\n return FSharpMap__get_MinKeyValue(table);\n}\nexport function maxKeyValue(table) {\n return FSharpMap__get_MaxKeyValue(table);\n}\nexport function empty(comparer) {\n return FSharpMap_Empty(comparer);\n}\nexport function count(table) {\n return FSharpMap__get_Count(table);\n}\n","namespace Fable.SimpleJson\n\nopen Fable.Parsimmon\n\n#nowarn \"40\"\n\nmodule Parser =\n\n let digits = \n Parsimmon.digit \n |> Parsimmon.atLeastOneOrMany\n |> Parsimmon.concat\n\n let jint = digits |> Parsimmon.map float\n\n let negJint = \n Parsimmon.seq2 (Parsimmon.str \"-\") jint \n |> Parsimmon.map (fun (sign, number) -> -number)\n\n let jfloat =\n let floatWithComma =\n Parsimmon.regex \"-?(0|[1-9][0-9]*)?[.][0-9]+([eE][+-]?[0-9]+)?\"\n let floatWithoutComma =\n Parsimmon.regex \"-?[1-9][0-9]*[eE][+-]?[0-9]+\"\n\n [ floatWithComma; floatWithoutComma ]\n |> Parsimmon.choose\n |> Parsimmon.map float\n\n let jnumber = \n [jfloat; jint; negJint] \n |> Parsimmon.choose\n |> Parsimmon.map JNumber\n\n let jbool = \n [ Parsimmon.stringReturn \"true\" (JBool true)\n Parsimmon.stringReturn \"false\" (JBool false)]\n |> Parsimmon.choose\n\n let jnull = Parsimmon.stringReturn \"null\" JNull\n\n let stringLiteral =\n let escape = \n Parsimmon.oneOf \"\\\"\\\\/bfnrt\"\n |> Parsimmon.map(function\n | \"b\" -> \"\\b\"\n | \"f\" -> \"\\u000C\"\n | \"n\" -> \"\\n\"\n | \"r\" -> \"\\r\"\n | \"t\" -> \"\\t\"\n | c -> c) // every other char is mapped to itself\n\n let escapedCharSnippet = \n Parsimmon.seq2 (Parsimmon.str \"\\\\\") escape\n |> Parsimmon.map snd\n\n let normalCharSnippet = Parsimmon.satisfy (fun c -> c <> \"\\\"\" && c <> \"\\\\\")\n\n let anyCharSnippet = \n normalCharSnippet\n |> Parsimmon.orTry escapedCharSnippet\n |> Parsimmon.many\n |> Parsimmon.concat\n\n anyCharSnippet\n |> Parsimmon.between (Parsimmon.str \"\\\"\") (Parsimmon.str \"\\\"\")\n \n let jstring = stringLiteral.map JString\n\n let withWhitespace p = \n Parsimmon.between (Parsimmon.optionalWhitespace) (Parsimmon.optionalWhitespace) p\n \n let jvalue = \n [ jnull; jbool; jnumber; jstring ]\n |> List.map withWhitespace\n |> Parsimmon.choose\n \n let comma = withWhitespace (Parsimmon.str \",\")\n \n let rec json = Parsimmon.ofLazy <| fun () ->\n \n let leftBracket = withWhitespace (Parsimmon.str \"[\")\n let rightBracket = withWhitespace (Parsimmon.str \"]\")\n \n let arrayValue = Parsimmon.seperateBy comma json\n \n let jarray = \n arrayValue\n |> Parsimmon.between leftBracket rightBracket\n |> Parsimmon.map (List.ofArray >> JArray)\n\n let leftBrace = withWhitespace (Parsimmon.str \"{\")\n let rightBrace = withWhitespace (Parsimmon.str \"}\")\n \n let keyValues = \n Parsimmon.seq3 \n (withWhitespace stringLiteral)\n (withWhitespace (Parsimmon.str \":\"))\n (withWhitespace json)\n |> Parsimmon.map (fun (key, _ , value) -> key,value)\n |> Parsimmon.seperateBy comma\n\n let jobject = \n keyValues\n |> Parsimmon.between leftBrace rightBrace\n |> Parsimmon.map (List.ofArray >> Map.ofList >> JObject)\n\n [jvalue; jarray; jobject]\n |> Parsimmon.choose\n \n let jsonParser = withWhitespace json\n","namespace Fable.SimpleJson\n\nopen Fable.Core\nopen Fable.Parsimmon\nopen Parser\nopen Fable.Import\nopen System\nopen Fable.Core.JsInterop\n\n[]\nmodule InteropUtil =\n []\n let arrayFrom (xs: obj) : obj = jsNative\n []\n let get<'a> (key: string) (x: obj) : 'a = jsNative\n []\n let isDate (x: obj) = jsNative\n []\n let hasKey (key: string) (x: 'a) = jsNative\n let isDateOffset (x: obj) = isDate x && hasKey \"offset\" x\n []\n let getTypeOf (x: obj) : string = jsNative\n let isObjectLiteral (x: obj) = getTypeOf x = \"object\"\n let isBigInt (x: obj) =\n not (isNull x)\n && isObjectLiteral x\n && hasKey \"signInt\" x\n && hasKey \"v\" x\n && hasKey \"digits\" (get \"v\" x)\n && hasKey \"bound\" (get \"v\" x)\n\n []\n let log (x: 'a) : unit = jsNative\n\n []\n let createEmptyObject() : obj = jsNative\n\nmodule SimpleJson =\n /// Tries to parse a string into a Json structured JSON data.\n let tryParse (input: string) : Option =\n Parsimmon.parse input jsonParser\n\n /// Parses the input string into a structured JSON data. Fails with an exception if parsing fails.\n let parse (input: string) : Json =\n match tryParse input with\n | Some result -> result\n | None -> failwithf \"Could not parse the JSON input: %s\" input\n\n /// Stringifies a Json object back to string representation\n let rec toString = function\n | JNull -> \"null\"\n | JBool true -> \"true\"\n | JBool false -> \"false\"\n | JNumber number -> string number\n | JString text -> sprintf \"\\\"%s\\\"\" text\n | JArray elements ->\n elements\n |> List.map toString\n |> String.concat \",\"\n |> sprintf \"[%s]\"\n | JObject map ->\n map\n |> Map.toList\n |> List.map (fun (key,value) -> sprintf \"\\\"%s\\\":%s\" key (toString value))\n |> String.concat \",\"\n |> sprintf \"{%s}\"\n\n []\n let private setValue (key: string) (value: obj) (destination: obj) = jsNative\n let rec toPlainObject (input: Json) : obj =\n match input with\n | JNull -> unbox null\n | JBool value -> unbox value\n | JNumber value -> unbox value\n | JString value -> unbox value\n | JArray values ->\n let array = new ResizeArray()\n for value in values do array.Add(toPlainObject value)\n unbox array\n | JObject map ->\n let jsObject = createEmptyObject()\n for (key, value) in Map.toList map do\n setValue key (toPlainObject value) jsObject\n unbox jsObject\n\n let stringify (value: 'a) : string =\n if isNullOrUndefined value\n then JS.JSON.stringify(null)\n else JS.JSON.stringify(value, (fun key jsonValue ->\n if isBigInt jsonValue then\n let bigInt : bigint = unbox(jsonValue)\n box (string (decimal bigInt))\n elif isDate jsonValue then\n let dateOffset : DateTimeOffset = unbox(jsonValue)\n box (dateOffset.ToString(\"o\"))\n else\n match jsonValue with\n | :? string -> jsonValue\n | :? System.Collections.IEnumerable ->\n if JS.Constructors.Array.isArray(jsonValue) then jsonValue\n else arrayFrom jsonValue\n | _ when isBigInt jsonValue -> box (string (decimal (unbox jsonValue)))\n | _ when isDateOffset jsonValue -> box ((unbox jsonValue).ToString(\"O\"))\n | _ -> jsonValue\n ), 0)\n\n let rec internal parseNative' (x: obj) =\n match x with\n | TypeCheck.NativeString str -> JString str\n | TypeCheck.NativeNumber number -> JNumber number\n | TypeCheck.NativeBool value -> JBool value\n | TypeCheck.Null _ -> JNull\n | TypeCheck.NativeArray arr -> JArray (List.ofArray (Array.map parseNative' arr))\n | TypeCheck.NativeObject object ->\n [ for key in JS.Constructors.Object.keys object -> key, parseNative' (get key object) ]\n |> Map.ofList\n |> JObject\n | _ -> JNull\n\n /// Parses and converts the input string to Json using Javascript's native parsing capabilities\n let parseNative (input: string) =\n let parsed = JS.JSON.parse input\n parseNative' parsed\n\n let tryParseNative (input: string) =\n try Some (parseNative input)\n with | ex -> None\n\n /// Tries to convert an object literal to the Json by calling JSON.stringify on the object first\n let fromObjectLiteral (x: 'a) =\n try Some (parseNative' x)\n with | _ -> None\n\n /// Transforms all keys of the objects within the Json structure\n let rec mapKeys f = function\n | JObject dictionary ->\n dictionary\n |> Map.toList\n |> List.map (fun (key, value) -> f key, mapKeys f value)\n |> Map.ofList\n |> JObject\n | JArray values ->\n values\n |> List.map (mapKeys f)\n |> JArray\n | otherJsonValue -> otherJsonValue\n\n /// Transforms object values recursively using function `f` that takes the key and value of the object and returns a new value\n let rec mapbyKey f = function\n | JObject dictionary ->\n dictionary\n |> Map.toList\n |> List.map (fun (key, value) -> key, f key value)\n |> Map.ofList\n |> JObject\n | JArray values ->\n values\n |> List.map (mapbyKey f)\n |> JArray\n | otherJsonValue -> otherJsonValue\n\n /// Transforms keys of object selectively by path segments\n let mapKeysByPath f json =\n let rec mapKey xs = function\n | JObject dictionary ->\n dictionary\n |> Map.toList\n |> List.map (fun (key, value) ->\n let keyPath = List.concat [xs; [key]]\n match f keyPath with\n | Some nextKey -> nextKey, mapKey keyPath value\n | None -> key, mapKey keyPath value)\n |> Map.ofList\n |> JObject\n | JArray values ->\n values\n |> List.map (mapKey xs)\n |> JArray\n | otherJsonValue -> otherJsonValue\n mapKey [] json\n\n let rec readPath (keys: string list) (input: Json) =\n match keys, input with\n | [ ], _ -> None\n | [ key ], JObject dict -> Map.tryFind key dict\n | firstKey :: rest, JObject dict ->\n match Map.tryFind firstKey dict with\n | Some (JObject nextDict) -> readPath rest (JObject nextDict)\n | _ -> None\n | _ -> None","namespace Fable.SimpleJson\n\nopen Fable.Core\nopen Fable.Core.JsInterop\n\nmodule TypeCheck =\n\n []\n let typeofString (x: obj) : bool = jsNative\n\n []\n let typeofBool (x: obj) : bool = jsNative\n\n []\n let typeofNumber (x: obj) : bool = jsNative\n []\n let typeofObject (x: obj) : bool = jsNative\n\n let (|NativeString|_|) (x: obj) =\n if typeofString x\n then Some (unbox x)\n else None\n\n let (|NativeBool|_|) (x: obj) =\n if typeofBool x\n then Some (unbox x)\n else None\n\n let (|NativeNumber|_|) (x: obj) =\n if typeofNumber x\n then Some (unbox x)\n else None\n\n let (|NativeObject|_|) (x: obj) =\n if typeofObject x\n then Some x\n else None\n\n let (|Null|_|) (x: obj) =\n if isNull x\n then Some x\n else None\n\n let (|NativeArray|_|) (x: obj) =\n if (JS.Constructors.Array.isArray x)\n then Some (unbox x)\n else None","export var NumberStyles;\n(function (NumberStyles) {\n // None = 0x00000000,\n // AllowLeadingWhite = 0x00000001,\n // AllowTrailingWhite = 0x00000002,\n // AllowLeadingSign = 0x00000004,\n // AllowTrailingSign = 0x00000008,\n // AllowParentheses = 0x00000010,\n // AllowDecimalPoint = 0x00000020,\n // AllowThousands = 0x00000040,\n // AllowExponent = 0x00000080,\n // AllowCurrencySymbol = 0x00000100,\n NumberStyles[NumberStyles[\"AllowHexSpecifier\"] = 512] = \"AllowHexSpecifier\";\n // Integer = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign,\n // HexNumber = AllowLeadingWhite | AllowTrailingWhite | AllowHexSpecifier,\n // Number = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign |\n // AllowTrailingSign | AllowDecimalPoint | AllowThousands,\n // Float = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign |\n // AllowDecimalPoint | AllowExponent,\n // Currency = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |\n // AllowParentheses | AllowDecimalPoint | AllowThousands | AllowCurrencySymbol,\n // Any = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |\n // AllowParentheses | AllowDecimalPoint | AllowThousands | AllowCurrencySymbol | AllowExponent,\n})(NumberStyles || (NumberStyles = {}));\nfunction validResponse(regexMatch, radix) {\n const [/*all*/ , sign, prefix, digits] = regexMatch;\n return {\n sign: sign || \"\",\n prefix: prefix || \"\",\n digits,\n radix,\n };\n}\nfunction getRange(unsigned, bitsize) {\n switch (bitsize) {\n case 8: return unsigned ? [0, 255] : [-128, 127];\n case 16: return unsigned ? [0, 65535] : [-32768, 32767];\n case 32: return unsigned ? [0, 4294967295] : [-2147483648, 2147483647];\n default: throw new Error(\"Invalid bit size.\");\n }\n}\nfunction getInvalidDigits(radix) {\n switch (radix) {\n case 2: return /[^0-1]/;\n case 8: return /[^0-7]/;\n case 10: return /[^0-9]/;\n case 16: return /[^0-9a-fA-F]/;\n default:\n throw new Error(\"Invalid Base.\");\n }\n}\nexport function getPrefix(radix) {\n switch (radix) {\n case 2: return \"0b\";\n case 8: return \"0o\";\n case 10: return \"\";\n case 16: return \"0x\";\n default: return \"\";\n }\n}\nexport function getRadix(prefix, style) {\n if (style & NumberStyles.AllowHexSpecifier) {\n return 16;\n }\n else {\n switch (prefix) {\n case \"0b\":\n case \"0B\": return 2;\n case \"0o\":\n case \"0O\": return 8;\n case \"0x\":\n case \"0X\": return 16;\n default: return 10;\n }\n }\n}\nexport function isValid(str, style, radix) {\n const integerRegex = /^\\s*([\\+\\-])?(0[xXoObB])?([0-9a-fA-F]+)\\s*$/;\n const res = integerRegex.exec(str.replace(/_/g, \"\"));\n if (res != null) {\n const [/*all*/ , /*sign*/ , prefix, digits] = res;\n radix = radix || getRadix(prefix, style);\n const invalidDigits = getInvalidDigits(radix);\n if (!invalidDigits.test(digits)) {\n return validResponse(res, radix);\n }\n }\n return null;\n}\nexport function parse(str, style, unsigned, bitsize, radix) {\n const res = isValid(str, style, radix);\n if (res != null) {\n let v = Number.parseInt(res.sign + res.digits, res.radix);\n if (!Number.isNaN(v)) {\n const [umin, umax] = getRange(true, bitsize);\n if (!unsigned && res.radix !== 10 && v >= umin && v <= umax) {\n v = v << (32 - bitsize) >> (32 - bitsize);\n }\n const [min, max] = getRange(unsigned, bitsize);\n if (v >= min && v <= max) {\n return v;\n }\n }\n }\n throw new Error(\"Input string was not in a correct format.\");\n}\nexport function tryParse(str, style, unsigned, bitsize, defValue) {\n try {\n defValue.contents = parse(str, style, unsigned, bitsize);\n return true;\n }\n catch {\n return false;\n }\n}\nexport function op_UnaryNegation_Int8(x) {\n return x === -128 ? x : -x;\n}\nexport function op_UnaryNegation_Int16(x) {\n return x === -32768 ? x : -x;\n}\nexport function op_UnaryNegation_Int32(x) {\n return x === -2147483648 ? x : -x;\n}\nexport function divRem(x, y, out) {\n const div = ~~(x / y);\n const rem = x % y;\n if (out === void 0) {\n return [div, rem];\n }\n else {\n out.contents = rem;\n return div;\n }\n}\n","const ok = (value) => ({\n tag: \"ok\",\n value,\n});\nconst error = (error) => ({ tag: \"error\", error });\nexport class Uri {\n constructor(state) {\n this.uri = state;\n }\n static isAbsoluteUri(uri) {\n try {\n // tslint:disable-next-line no-unused-expression\n new URL(uri);\n return true;\n }\n catch {\n return false;\n }\n }\n static tryCreateWithKind(uri, kind) {\n switch (kind) {\n case 1 /* UriKind.Absolute */:\n return Uri.isAbsoluteUri(uri)\n ? ok(new Uri({ original: uri, value: new URL(uri), kind }))\n : error(\"Invalid URI: The format of the URI could not be determined.\");\n case 2 /* UriKind.Relative */:\n return Uri.isAbsoluteUri(uri)\n ? error(\"URI is not a relative path.\")\n : ok(new Uri({ original: uri, value: uri, kind }));\n case 0 /* UriKind.RelativeOrAbsolute */:\n return Uri.isAbsoluteUri(uri)\n ? ok(new Uri({ original: uri, value: new URL(uri), kind: 1 /* UriKind.Absolute */ }))\n : ok(new Uri({ original: uri, value: uri, kind: 2 /* UriKind.Relative */ }));\n default:\n const never = kind;\n return never;\n }\n }\n static tryCreateWithBase(baseUri, relativeUri) {\n return baseUri.uri.kind !== 1 /* UriKind.Absolute */\n ? error(\"Base URI should have Absolute kind\")\n : typeof relativeUri === \"string\"\n ? ok(new Uri({\n original: new URL(relativeUri, baseUri.uri.value).toString(),\n value: new URL(relativeUri, baseUri.uri.value),\n kind: 1 /* UriKind.Absolute */,\n }))\n : relativeUri.uri.kind === 2 /* UriKind.Relative */\n ? ok(new Uri({\n original: new URL(relativeUri.uri.value, baseUri.uri.value).toString(),\n value: new URL(relativeUri.uri.value, baseUri.uri.value),\n kind: 1 /* UriKind.Absolute */,\n }))\n : ok(baseUri);\n }\n static tryCreateImpl(value, kindOrUri = 1 /* UriKind.Absolute */) {\n return typeof value === \"string\"\n ? typeof kindOrUri !== \"number\"\n ? error(\"Kind must be specified when the baseUri is a string.\")\n : Uri.tryCreateWithKind(value, kindOrUri)\n : typeof kindOrUri === \"number\"\n ? error(\"Kind should not be specified when the baseUri is an absolute Uri.\")\n : Uri.tryCreateWithBase(value, kindOrUri);\n }\n static create(value, kindOrUri = 1 /* UriKind.Absolute */) {\n const result = Uri.tryCreateImpl(value, kindOrUri);\n switch (result.tag) {\n case \"ok\":\n return result.value;\n case \"error\":\n throw new Error(result.error);\n default:\n const never = result;\n return never;\n }\n }\n static tryCreate(value, kindOrUri = 1 /* UriKind.Absolute */, out) {\n const result = Uri.tryCreateImpl(value, kindOrUri);\n switch (result.tag) {\n case \"ok\":\n out.contents = result.value;\n return true;\n case \"error\":\n return false;\n default:\n const never = result;\n return never;\n }\n }\n toString() {\n switch (this.uri.kind) {\n case 1 /* UriKind.Absolute */:\n return decodeURIComponent(this.asUrl().toString());\n case 2 /* UriKind.Relative */:\n return this.uri.value;\n default:\n const never = this.uri;\n return never;\n }\n }\n asUrl() {\n switch (this.uri.kind) {\n case 1 /* UriKind.Absolute */:\n return this.uri.value;\n case 2 /* UriKind.Relative */:\n throw new Error(\"This operation is not supported for a relative URI.\");\n default:\n const never = this.uri;\n return never;\n }\n }\n get isAbsoluteUri() {\n return this.uri.kind === 1 /* UriKind.Absolute */;\n }\n get absoluteUri() {\n return this.asUrl().href;\n }\n get scheme() {\n const protocol = this.asUrl().protocol;\n return protocol.slice(0, protocol.length - 1);\n }\n get host() {\n return this.asUrl().host;\n }\n get absolutePath() {\n return this.asUrl().pathname;\n }\n get query() {\n return this.asUrl().search;\n }\n get pathAndQuery() {\n const url = this.asUrl();\n return url.pathname + url.search;\n }\n get fragment() {\n return this.asUrl().hash;\n }\n get originalString() {\n return this.uri.original;\n }\n}\nexport default Uri;\n","import { getPrefix, isValid } from \"./Int32.js\";\nimport { fromString } from \"./BigInt.js\";\nfunction getMaxValue(unsigned, radix, isNegative) {\n switch (radix) {\n case 2: return unsigned ?\n \"1111111111111111111111111111111111111111111111111111111111111111\" :\n (isNegative ? \"1000000000000000000000000000000000000000000000000000000000000000\"\n : \"111111111111111111111111111111111111111111111111111111111111111\");\n case 8: return unsigned ?\n \"1777777777777777777777\" :\n (isNegative ? \"1000000000000000000000\" : \"777777777777777777777\");\n case 10: return unsigned ?\n \"18446744073709551615\" :\n (isNegative ? \"9223372036854775808\" : \"9223372036854775807\");\n case 16: return unsigned ?\n \"FFFFFFFFFFFFFFFF\" :\n (isNegative ? \"8000000000000000\" : \"7FFFFFFFFFFFFFFF\");\n default: throw new Error(\"Invalid radix.\");\n }\n}\nexport function parse(str, style, unsigned, _bitsize, radix) {\n const res = isValid(str, style, radix);\n if (res != null) {\n const lessOrEqual = (x, y) => {\n const len = Math.max(x.length, y.length);\n return x.padStart(len, \"0\") <= y.padStart(len, \"0\");\n };\n const isNegative = res.sign === \"-\";\n const maxValue = getMaxValue(unsigned || res.radix !== 10, res.radix, isNegative);\n if (lessOrEqual(res.digits.toUpperCase(), maxValue)) {\n str = getPrefix(res.radix) + res.digits;\n str = isNegative ? res.sign + str : str;\n return fromString(str);\n }\n }\n throw new Error(\"Input string was not in a correct format.\");\n}\nexport function tryParse(str, style, unsigned, bitsize, defValue) {\n try {\n defValue.contents = parse(str, style, unsigned, bitsize);\n return true;\n }\n catch {\n return false;\n }\n}\n","/**\n * DateTimeOffset functions.\n *\n * Note: DateOffset instances are always DateObjects in local\n * timezone (because JS dates are all kinds of messed up).\n * A local date returns UTC epoch when `.getTime()` is called.\n *\n * However, this means that in order to construct an UTC date\n * from a DateOffset with offset of +5 hours, you first need\n * to subtract those 5 hours, than add the \"local\" offset.\n * As said, all kinds of messed up.\n *\n * Basically; invariant: date.getTime() always return UTC time.\n */\nimport { fromFloat64, toFloat64 } from \"./BigInt.js\";\nimport DateTime, { create as createDate, dateOffsetToString, daysInMonth, parseRaw, ticksToUnixEpochMilliseconds, unixEpochMillisecondsToTicks } from \"./Date.js\";\nimport { compareDates, padWithZeros } from \"./Util.js\";\nexport default function DateTimeOffset(value, offset) {\n checkOffsetInRange(offset);\n const d = new Date(value);\n d.offset = offset != null ? offset : new Date().getTimezoneOffset() * -60000;\n return d;\n}\nexport function offset(value) {\n return value.offset || 0;\n}\nfunction checkOffsetInRange(offset) {\n if (offset != null && offset !== 0) {\n if (offset % 60000 !== 0) {\n throw new Error(\"Offset must be specified in whole minutes.\");\n }\n if (Math.abs(offset / 3600000) > 14) {\n throw new Error(\"Offset must be within plus or minus 14 hours.\");\n }\n }\n}\nexport function fromDate(date, offset) {\n let offset2 = 0;\n switch (date.kind) {\n case 1 /* DateKind.UTC */:\n if (offset != null && offset !== 0) {\n throw new Error(\"The UTC Offset for Utc DateTime instances must be 0.\");\n }\n offset2 = 0;\n break;\n case 2 /* DateKind.Local */:\n offset2 = date.getTimezoneOffset() * -60000;\n if (offset != null && offset !== offset2) {\n throw new Error(\"The UTC Offset of the local dateTime parameter does not match the offset argument.\");\n }\n break;\n case 0 /* DateKind.Unspecified */:\n default:\n if (offset == null) {\n offset2 = date.getTimezoneOffset() * -60000;\n }\n else {\n offset2 = offset;\n }\n break;\n }\n return DateTimeOffset(date.getTime(), offset2);\n}\nexport function fromTicks(ticks, offset) {\n const ms = ticksToUnixEpochMilliseconds(ticks) - offset;\n return DateTimeOffset(ms, offset);\n}\nexport function fromUnixTimeMilliseconds(ms) {\n return DateTimeOffset(toFloat64(ms), 0);\n}\nexport function fromUnixTimeSeconds(seconds) {\n return DateTimeOffset(toFloat64(seconds * 1000n), 0);\n}\nexport function getUtcTicks(date) {\n return unixEpochMillisecondsToTicks(date.getTime(), 0);\n}\nexport function minValue() {\n // This is \"0001-01-01T00:00:00.000Z\", actual JS min value is -8640000000000000\n return DateTimeOffset(-62135596800000, 0);\n}\nexport function maxValue() {\n // This is \"9999-12-31T23:59:59.999Z\", actual JS max value is 8640000000000000\n return DateTimeOffset(253402300799999, 0);\n}\nexport function parse(str) {\n const [date, offsetMatch] = parseRaw(str);\n const offset = offsetMatch == null\n ? date.getTimezoneOffset() * -60000\n : (offsetMatch === \"Z\" ? 0 : offsetMatch * 60000);\n return DateTimeOffset(date.getTime(), offset);\n}\nexport function tryParse(v, defValue) {\n try {\n defValue.contents = parse(v);\n return true;\n }\n catch (_err) {\n return false;\n }\n}\nexport function create(year, month, day, h, m, s, ms, offset) {\n if (offset == null) {\n offset = ms;\n ms = 0;\n }\n checkOffsetInRange(offset);\n let date;\n if (offset === 0) {\n date = new Date(Date.UTC(year, month - 1, day, h, m, s, ms));\n if (year <= 99) {\n date.setUTCFullYear(year, month - 1, day);\n }\n }\n else {\n const str = padWithZeros(year, 4) + \"-\" +\n padWithZeros(month, 2) + \"-\" +\n padWithZeros(day, 2) + \"T\" +\n padWithZeros(h, 2) + \":\" +\n padWithZeros(m, 2) + \":\" +\n padWithZeros(s, 2) + \".\" +\n padWithZeros(ms, 3) +\n dateOffsetToString(offset);\n date = new Date(str);\n }\n const dateValue = date.getTime();\n if (isNaN(dateValue)) {\n throw new Error(\"The parameters describe an unrepresentable Date\");\n }\n return DateTimeOffset(dateValue, offset);\n}\nexport function now() {\n const date = new Date();\n const offset = date.getTimezoneOffset() * -60000;\n return DateTimeOffset(date.getTime(), offset);\n}\nexport function utcNow() {\n const date = now();\n return DateTimeOffset(date.getTime(), 0);\n}\nexport function toUniversalTime(date) {\n return DateTime(date.getTime(), 1 /* DateKind.UTC */);\n}\nexport function toLocalTime(date) {\n return DateTime(date.getTime(), 2 /* DateKind.Local */);\n}\nexport function timeOfDay(d) {\n const d2 = new Date(d.getTime() + (d.offset ?? 0));\n return d2.getUTCHours() * 3600000\n + d2.getUTCMinutes() * 60000\n + d2.getUTCSeconds() * 1000\n + d2.getUTCMilliseconds();\n}\nexport function date(d) {\n const d2 = new Date(d.getTime() + (d.offset ?? 0));\n return createDate(d2.getUTCFullYear(), d2.getUTCMonth() + 1, d2.getUTCDate(), 0, 0, 0, 0);\n}\nexport function day(d) {\n return new Date(d.getTime() + (d.offset ?? 0)).getUTCDate();\n}\nexport function hour(d) {\n return new Date(d.getTime() + (d.offset ?? 0)).getUTCHours();\n}\nexport function millisecond(d) {\n return new Date(d.getTime() + (d.offset ?? 0)).getUTCMilliseconds();\n}\nexport function minute(d) {\n return new Date(d.getTime() + (d.offset ?? 0)).getUTCMinutes();\n}\nexport function month(d) {\n return new Date(d.getTime() + (d.offset ?? 0)).getUTCMonth() + 1;\n}\nexport function second(d) {\n return new Date(d.getTime() + (d.offset ?? 0)).getUTCSeconds();\n}\nexport function year(d) {\n return new Date(d.getTime() + (d.offset ?? 0)).getUTCFullYear();\n}\nexport function dayOfWeek(d) {\n return new Date(d.getTime() + (d.offset ?? 0)).getUTCDay();\n}\nexport function dayOfYear(d) {\n const d2 = new Date(d.getTime() + (d.offset ?? 0));\n const _year = d2.getUTCFullYear();\n const _month = d2.getUTCMonth() + 1;\n let _day = d2.getUTCDate();\n for (let i = 1; i < _month; i++) {\n _day += daysInMonth(_year, i);\n }\n return _day;\n}\nexport function add(d, ts) {\n return DateTimeOffset(d.getTime() + ts, (d.offset ?? 0));\n}\nexport function addDays(d, v) {\n return add(d, v * 86400000);\n}\nexport function addHours(d, v) {\n return add(d, v * 3600000);\n}\nexport function addMinutes(d, v) {\n return add(d, v * 60000);\n}\nexport function addSeconds(d, v) {\n return add(d, v * 1000);\n}\nexport function addMilliseconds(d, v) {\n return add(d, v);\n}\nexport function addTicks(d, v) {\n return add(d, toFloat64(v / 10000n));\n}\nexport function addYears(d, v) {\n const newMonth = d.getUTCMonth() + 1;\n const newYear = d.getUTCFullYear() + v;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, d.getUTCDate());\n return create(newYear, newMonth, newDay, d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds(), (d.offset ?? 0));\n}\nexport function addMonths(d, v) {\n const d2 = new Date(d.getTime() + (d.offset ?? 0));\n let newMonth = d2.getUTCMonth() + 1 + v;\n let newMonth_ = 0;\n let yearOffset = 0;\n if (newMonth > 12) {\n newMonth_ = newMonth % 12;\n yearOffset = Math.floor(newMonth / 12);\n newMonth = newMonth_;\n }\n else if (newMonth < 1) {\n newMonth_ = 12 + newMonth % 12;\n yearOffset = Math.floor(newMonth / 12) + (newMonth_ === 12 ? -1 : 0);\n newMonth = newMonth_;\n }\n const newYear = d2.getUTCFullYear() + yearOffset;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, d2.getUTCDate());\n return create(newYear, newMonth, newDay, d2.getUTCHours(), d2.getUTCMinutes(), d2.getUTCSeconds(), d2.getUTCMilliseconds(), (d.offset ?? 0));\n}\nexport function subtract(d, that) {\n return typeof that === \"number\"\n ? DateTimeOffset(d.getTime() - that, (d.offset ?? 0))\n : d.getTime() - that.getTime();\n}\nexport function equals(d1, d2) {\n return d1.getTime() === d2.getTime();\n}\nexport function equalsExact(d1, d2) {\n return d1.getTime() === d2.getTime() && d1.offset === d2.offset;\n}\nexport function compare(d1, d2) {\n return compareDates(d1, d2);\n}\nexport const compareTo = compare;\nexport function op_Addition(x, y) {\n return add(x, y);\n}\nexport function op_Subtraction(x, y) {\n return subtract(x, y);\n}\nexport function toOffset(d, offset) {\n return DateTimeOffset(d.getTime(), offset);\n}\nexport function toUnixTimeMilliseconds(d) {\n return fromFloat64(d.getTime());\n}\nexport function toUnixTimeSeconds(d) {\n return fromFloat64(d.getTime() / 1000.0);\n}\n","import { DateTime, getTicks, dayOfYear as Date_dayOfYear, year as Date_year, month as Date_month, day as Date_day, daysInMonth as Date_daysInMonth, ticksToUnixEpochMilliseconds } from \"./Date.js\";\nimport { padWithZeros } from \"./Util.js\";\nexport function fromUnixMilliseconds(value) {\n return DateTime(value, 1 /* DateKind.UTC */);\n}\nexport function create(year, month, day) {\n const d = fromUnixMilliseconds(Date.UTC(year, month - 1, day));\n if (year <= 99) {\n d.setUTCFullYear(year);\n }\n return d;\n}\nexport function maxValue() {\n // This is \"9999-12-31T00:00:00.000Z\"\n return fromUnixMilliseconds(253402214400000);\n}\nexport function minValue() {\n // This is \"0001-01-01T00:00:00.000Z\"\n return fromUnixMilliseconds(-62135596800000);\n}\nexport function dayNumber(d) {\n return Number((getTicks(d) / 864000000000n));\n}\nexport function fromDayNumber(dayNumber) {\n const ticks = 864000000000n * BigInt(dayNumber);\n return fromUnixMilliseconds(ticksToUnixEpochMilliseconds(ticks));\n}\nexport function fromDateTime(d) {\n return create(Date_year(d), Date_month(d), Date_day(d));\n}\nexport function day(d) {\n return d.getUTCDate();\n}\nexport function month(d) {\n return d.getUTCMonth() + 1;\n}\nexport function year(d) {\n return d.getUTCFullYear();\n}\nexport function dayOfWeek(d) {\n return d.getUTCDay();\n}\nexport function dayOfYear(d) {\n return Date_dayOfYear(d);\n}\nexport function toDateTime(d, time, kind = 0 /* DateKind.Unspecified */) {\n return DateTime(d.getTime() + time + (kind !== 1 /* DateKind.UTC */ ? d.getTimezoneOffset() : 0) * 60000, kind);\n}\nexport function toString(d, format = \"d\", _provider) {\n if ([\"d\", \"o\", \"O\"].indexOf(format) === -1) {\n throw new Error(\"Custom formats are not supported\");\n }\n const y = padWithZeros(year(d), 4);\n const m = padWithZeros(month(d), 2);\n const dd = padWithZeros(day(d), 2);\n return format === \"d\" ? `${m}/${dd}/${y}` : `${y}-${m}-${dd}`;\n}\nexport function parse(str) {\n function fail() {\n throw new Error(`String '${str}' was not recognized as a valid DateOnly.`);\n }\n // Allowed separators: . , / -\n // TODO whitespace alone as the separator\n //\n // Whitespace around separators\n //\n // Allowed format types:\n // yyyy/mm/dd\n // mm/dd/yyyy\n // mm/dd\n // mm/yyyy\n // yyyy/mm\n const r = /^\\s*(\\d{1,4})(?:\\s*[.,-\\/]\\s*(\\d{1,2}))?\\s*[.,-\\/]\\s*(\\d{1,4})\\s*$/.exec(str);\n if (r != null) {\n let y = 0;\n let m = 0;\n let d = 1;\n if (r[2] == null) {\n if (r[1].length < 3) {\n if (r[3].length < 3) {\n // 12/30 = December 30, {CurrentYear}\n y = new Date().getFullYear();\n m = +r[1];\n d = +r[3];\n }\n else {\n // 12/2000 = December 1, 2000\n m = +r[1];\n y = +r[3];\n }\n }\n else {\n if (r[3].length > 2)\n fail();\n // 2000/12 = December 1, 2000\n y = +r[1];\n m = +r[3];\n }\n }\n else {\n // 2000/1/30 or 1/30/2000\n const yearFirst = r[1].length > 2;\n const yTmp = r[yearFirst ? 1 : 3];\n y = +yTmp;\n // year 0-29 is 2000-2029, 30-99 is 1930-1999\n if (yTmp.length < 3)\n y += y >= 30 ? 1900 : 2000;\n m = +r[yearFirst ? 2 : 1];\n d = +r[yearFirst ? 3 : 2];\n }\n if (y > 0 && m > 0 && m < 13 && d > 0 && d <= Date_daysInMonth(y, m))\n return create(y, m, d);\n }\n return fail();\n}\nexport function tryParse(v, defValue) {\n try {\n defValue.contents = parse(v);\n return true;\n }\n catch {\n return false;\n }\n}\n","import { trim } from \"./String.js\";\n// RFC 4122 compliant. From https://stackoverflow.com/a/13653180/3922220\n// const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n// Relax GUID parsing, see #1637\nconst guidRegex = /^[\\(\\{]{0,2}[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}[\\)\\}]{0,2}$/;\nconst guidRegexNoHyphen = /^([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{12})$/;\nconst guidRegexHex = /^\\{0x[0-9a-f]{8},(0x[0-9a-f]{4},){2}\\{(0x[0-9a-f]{2},){7}0x[0-9a-f]{2}\\}\\}$/;\nconst guidHexCaptures = /^([0-9a-f]{8})-(([0-9a-f]{4})-)(([0-9a-f]{4})-)([0-9a-f]{2})([0-9a-f]{2})-([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/;\nexport function toString(str, format, _provider) {\n if (format && format?.length > 0) {\n switch (format) {\n case \"N\":\n return str.replace(/-/g, '');\n case \"D\":\n return str;\n case \"B\":\n return \"{\" + str + \"}\";\n case \"P\":\n return \"(\" + str + \")\";\n case \"X\":\n return str.replace(guidHexCaptures, \"{0x$1,0x$3,0x$5,{0x$6,0x$7,0x$8,0x$9,0x$10,0x$11,0x$12,0x$13}}\");\n default:\n throw new Error(\"Unrecognized Guid print format\");\n }\n }\n else {\n return str;\n }\n}\n/** Validates UUID as specified in RFC4122 (versions 1-5). */\nexport function parse(str) {\n function hyphenateGuid(str) {\n return str.replace(guidRegexNoHyphen, \"$1-$2-$3-$4-$5\");\n }\n const wsTrimAndLowered = str.trim().toLowerCase();\n if (guidRegex.test(wsTrimAndLowered)) {\n return trim(wsTrimAndLowered, \"{\", \"}\", \"(\", \")\");\n }\n else if (guidRegexNoHyphen.test(wsTrimAndLowered)) {\n return hyphenateGuid(wsTrimAndLowered);\n }\n else if (guidRegexHex.test(wsTrimAndLowered)) {\n return hyphenateGuid(wsTrimAndLowered.replace(/[\\{\\},]|0x/g, ''));\n }\n else {\n throw new Error(\"Guid should contain 32 digits with 4 dashes: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\n }\n}\nexport function tryParse(str, defValue) {\n try {\n defValue.contents = parse(str);\n return true;\n }\n catch {\n return false;\n }\n}\n// From https://gist.github.com/LeverOne/1308368\nexport function newGuid() {\n let b = \"\";\n for (let a = 0; a++ < 36;) {\n b += a * 51 & 52\n ? (a ^ 15 ? 8 ^ Math.random() * (a ^ 20 ? 16 : 4) : 4).toString(16)\n : \"-\";\n }\n return b;\n}\n// Maps for number <-> hex string conversion\nlet _convertMapsInitialized = false;\nlet _byteToHex;\nlet _hexToByte;\nfunction initConvertMaps() {\n _byteToHex = new Array(256);\n _hexToByte = {};\n for (let i = 0; i < 256; i++) {\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n _hexToByte[_byteToHex[i]] = i;\n }\n _convertMapsInitialized = true;\n}\n/** Parse a UUID into it's component bytes */\n// Adapted from https://github.com/zefferus/uuid-parse\nexport function guidToArray(s) {\n if (!_convertMapsInitialized) {\n initConvertMaps();\n }\n let i = 0;\n const buf = new Uint8Array(16);\n s.toLowerCase().replace(/[0-9a-f]{2}/g, ((oct) => {\n switch (i) {\n // .NET saves first three byte groups with different endianness\n // See https://stackoverflow.com/a/16722909/3922220\n case 0:\n case 1:\n case 2:\n case 3:\n buf[3 - i++] = _hexToByte[oct];\n break;\n case 4:\n case 5:\n buf[9 - i++] = _hexToByte[oct];\n break;\n case 6:\n case 7:\n buf[13 - i++] = _hexToByte[oct];\n break;\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n buf[i++] = _hexToByte[oct];\n break;\n }\n }));\n // Zero out remaining bytes if string was short\n while (i < 16) {\n buf[i++] = 0;\n }\n return buf;\n}\n/** Convert UUID byte array into a string */\nexport function arrayToGuid(buf) {\n if (buf.length !== 16) {\n throw new Error(\"Byte array for GUID must be exactly 16 bytes long\");\n }\n if (!_convertMapsInitialized) {\n initConvertMaps();\n }\n const guid = _byteToHex[buf[3]] + _byteToHex[buf[2]] +\n _byteToHex[buf[1]] + _byteToHex[buf[0]] + \"-\" +\n _byteToHex[buf[5]] + _byteToHex[buf[4]] + \"-\" +\n _byteToHex[buf[7]] + _byteToHex[buf[6]] + \"-\" +\n _byteToHex[buf[8]] + _byteToHex[buf[9]] + \"-\" +\n _byteToHex[buf[10]] + _byteToHex[buf[11]] +\n _byteToHex[buf[12]] + _byteToHex[buf[13]] +\n _byteToHex[buf[14]] + _byteToHex[buf[15]];\n return guid;\n}\n","const littleEndian = true;\nexport function isLittleEndian() {\n return littleEndian;\n}\nexport function getBytesBoolean(value) {\n const bytes = new Uint8Array(1);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setUint8(0, value ? 1 : 0);\n return bytes;\n}\nexport function getBytesChar(value) {\n const bytes = new Uint8Array(2);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setUint16(0, value.charCodeAt(0), littleEndian);\n return bytes;\n}\nexport function getBytesInt16(value) {\n const bytes = new Uint8Array(2);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setInt16(0, value, littleEndian);\n return bytes;\n}\nexport function getBytesInt32(value) {\n const bytes = new Uint8Array(4);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setInt32(0, value, littleEndian);\n return bytes;\n}\nexport function getBytesInt64(value) {\n const bytes = new Uint8Array(8);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setBigInt64(0, value, littleEndian);\n return bytes;\n}\nexport function getBytesUInt16(value) {\n const bytes = new Uint8Array(2);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setUint16(0, value, littleEndian);\n return bytes;\n}\nexport function getBytesUInt32(value) {\n const bytes = new Uint8Array(4);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setUint32(0, value, littleEndian);\n return bytes;\n}\nexport function getBytesUInt64(value) {\n const bytes = new Uint8Array(8);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setBigUint64(0, value, littleEndian);\n return bytes;\n}\nexport function getBytesSingle(value) {\n const bytes = new Uint8Array(4);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setFloat32(0, value, littleEndian);\n return bytes;\n}\nexport function getBytesDouble(value) {\n const bytes = new Uint8Array(8);\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n view.setFloat64(0, value, littleEndian);\n return bytes;\n}\nexport function int64BitsToDouble(value) {\n const buffer = new ArrayBuffer(8);\n const view = new DataView(buffer);\n view.setBigInt64(0, value, littleEndian);\n return view.getFloat64(0, littleEndian);\n}\nexport function doubleToInt64Bits(value) {\n const buffer = new ArrayBuffer(8);\n const view = new DataView(buffer);\n view.setFloat64(0, value, littleEndian);\n return view.getBigInt64(0, littleEndian);\n}\nexport function toBoolean(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getUint8(offset) === 1 ? true : false;\n}\nexport function toChar(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n const code = view.getUint16(offset, littleEndian);\n return String.fromCharCode(code);\n}\nexport function toInt16(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getInt16(offset, littleEndian);\n}\nexport function toInt32(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getInt32(offset, littleEndian);\n}\nexport function toInt64(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getBigInt64(offset, littleEndian);\n}\nexport function toUInt16(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getUint16(offset, littleEndian);\n}\nexport function toUInt32(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getUint32(offset, littleEndian);\n}\nexport function toUInt64(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getBigUint64(offset, littleEndian);\n}\nexport function toSingle(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat32(offset, littleEndian);\n}\nexport function toDouble(bytes, offset) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n const view = new DataView(array.buffer, array.byteOffset, array.byteLength);\n return view.getFloat64(offset, littleEndian);\n}\nexport function toString(bytes, offset, count) {\n const array = ArrayBuffer.isView(bytes) ? bytes : Uint8Array.from(bytes);\n let buffer = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n if (offset != null && count != null) {\n buffer = buffer.subarray(offset, offset + count);\n }\n else if (offset != null) {\n buffer = buffer.subarray(offset);\n }\n return Array.from(buffer).map((b) => (\"0\" + b.toString(16)).slice(-2)).join(\"-\");\n}\n","import { record_type, bool_type, list_type, option_type, class_type } from \"./Reflection.js\";\nimport { some, value as value_1 } from \"./Option.js\";\nimport { structuralHash, toIterator, disposeSafe, getEnumerator, isArrayLike } from \"./Util.js\";\nimport { toString, Record } from \"./Types.js\";\nimport { fold as fold_2, cons, singleton as singleton_1, empty as empty_1, ofArrayWithTail, tail, head, isEmpty as isEmpty_1, FSharpList } from \"./List.js\";\nimport { fold as fold_1, fill } from \"./Array.js\";\nimport { join } from \"./String.js\";\nimport { exists as exists_1, cache, forAll as forAll_1, fold as fold_3, reduce, iterate as iterate_1, map as map_1 } from \"./Seq.js\";\nimport { HashSet__get_Comparer, HashSet_$ctor_Z6150332D, HashSet } from \"./MutableSet.js\";\nexport class SetTreeLeaf$1 {\n constructor(k) {\n this.k = k;\n }\n}\nexport function SetTreeLeaf$1_$reflection(gen0) {\n return class_type(\"Set.SetTreeLeaf`1\", [gen0], SetTreeLeaf$1);\n}\nexport function SetTreeLeaf$1_$ctor_2B595(k) {\n return new SetTreeLeaf$1(k);\n}\nexport function SetTreeLeaf$1__get_Key(_) {\n return _.k;\n}\nexport class SetTreeNode$1 extends SetTreeLeaf$1 {\n constructor(v, left, right, h) {\n super(v);\n this.left = left;\n this.right = right;\n this.h = (h | 0);\n }\n}\nexport function SetTreeNode$1_$reflection(gen0) {\n return class_type(\"Set.SetTreeNode`1\", [gen0], SetTreeNode$1, SetTreeLeaf$1_$reflection(gen0));\n}\nexport function SetTreeNode$1_$ctor_5F465FC9(v, left, right, h) {\n return new SetTreeNode$1(v, left, right, h);\n}\nexport function SetTreeNode$1__get_Left(_) {\n return _.left;\n}\nexport function SetTreeNode$1__get_Right(_) {\n return _.right;\n}\nexport function SetTreeNode$1__get_Height(_) {\n return _.h;\n}\nexport function SetTreeModule_empty() {\n return void 0;\n}\nexport function SetTreeModule_countAux(t_mut, acc_mut) {\n SetTreeModule_countAux: while (true) {\n const t = t_mut, acc = acc_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n t_mut = SetTreeNode$1__get_Left(tn);\n acc_mut = SetTreeModule_countAux(SetTreeNode$1__get_Right(tn), acc + 1);\n continue SetTreeModule_countAux;\n }\n else {\n return (acc + 1) | 0;\n }\n }\n else {\n return acc | 0;\n }\n break;\n }\n}\nexport function SetTreeModule_count(s) {\n return SetTreeModule_countAux(s, 0);\n}\nexport function SetTreeModule_mk(l, k, r) {\n let tn, tn_1;\n let hl;\n const t = l;\n if (t != null) {\n const t2 = value_1(t);\n hl = ((t2 instanceof SetTreeNode$1) ? ((tn = t2, SetTreeNode$1__get_Height(tn))) : 1);\n }\n else {\n hl = 0;\n }\n let hr;\n const t_1 = r;\n if (t_1 != null) {\n const t2_1 = value_1(t_1);\n hr = ((t2_1 instanceof SetTreeNode$1) ? ((tn_1 = t2_1, SetTreeNode$1__get_Height(tn_1))) : 1);\n }\n else {\n hr = 0;\n }\n const m = ((hl < hr) ? hr : hl) | 0;\n if (m === 0) {\n return SetTreeLeaf$1_$ctor_2B595(k);\n }\n else {\n return SetTreeNode$1_$ctor_5F465FC9(k, l, r, m + 1);\n }\n}\nexport function SetTreeModule_rebalance(t1, v, t2) {\n let tn, tn_1, t_2, t2_3, tn_2, t_3, t2_4, tn_3;\n let t1h;\n const t = t1;\n if (t != null) {\n const t2_1 = value_1(t);\n t1h = ((t2_1 instanceof SetTreeNode$1) ? ((tn = t2_1, SetTreeNode$1__get_Height(tn))) : 1);\n }\n else {\n t1h = 0;\n }\n let t2h;\n const t_1 = t2;\n if (t_1 != null) {\n const t2_2 = value_1(t_1);\n t2h = ((t2_2 instanceof SetTreeNode$1) ? ((tn_1 = t2_2, SetTreeNode$1__get_Height(tn_1))) : 1);\n }\n else {\n t2h = 0;\n }\n if (t2h > (t1h + 2)) {\n const matchValue = value_1(t2);\n if (matchValue instanceof SetTreeNode$1) {\n const t2$0027 = matchValue;\n if (((t_2 = SetTreeNode$1__get_Left(t2$0027), (t_2 != null) ? ((t2_3 = value_1(t_2), (t2_3 instanceof SetTreeNode$1) ? ((tn_2 = t2_3, SetTreeNode$1__get_Height(tn_2))) : 1)) : 0)) > (t1h + 1)) {\n const matchValue_1 = value_1(SetTreeNode$1__get_Left(t2$0027));\n if (matchValue_1 instanceof SetTreeNode$1) {\n const t2l = matchValue_1;\n return SetTreeModule_mk(SetTreeModule_mk(t1, v, SetTreeNode$1__get_Left(t2l)), SetTreeLeaf$1__get_Key(t2l), SetTreeModule_mk(SetTreeNode$1__get_Right(t2l), SetTreeLeaf$1__get_Key(t2$0027), SetTreeNode$1__get_Right(t2$0027)));\n }\n else {\n throw new Error(\"internal error: Set.rebalance\");\n }\n }\n else {\n return SetTreeModule_mk(SetTreeModule_mk(t1, v, SetTreeNode$1__get_Left(t2$0027)), SetTreeLeaf$1__get_Key(t2$0027), SetTreeNode$1__get_Right(t2$0027));\n }\n }\n else {\n throw new Error(\"internal error: Set.rebalance\");\n }\n }\n else if (t1h > (t2h + 2)) {\n const matchValue_2 = value_1(t1);\n if (matchValue_2 instanceof SetTreeNode$1) {\n const t1$0027 = matchValue_2;\n if (((t_3 = SetTreeNode$1__get_Right(t1$0027), (t_3 != null) ? ((t2_4 = value_1(t_3), (t2_4 instanceof SetTreeNode$1) ? ((tn_3 = t2_4, SetTreeNode$1__get_Height(tn_3))) : 1)) : 0)) > (t2h + 1)) {\n const matchValue_3 = value_1(SetTreeNode$1__get_Right(t1$0027));\n if (matchValue_3 instanceof SetTreeNode$1) {\n const t1r = matchValue_3;\n return SetTreeModule_mk(SetTreeModule_mk(SetTreeNode$1__get_Left(t1$0027), SetTreeLeaf$1__get_Key(t1$0027), SetTreeNode$1__get_Left(t1r)), SetTreeLeaf$1__get_Key(t1r), SetTreeModule_mk(SetTreeNode$1__get_Right(t1r), v, t2));\n }\n else {\n throw new Error(\"internal error: Set.rebalance\");\n }\n }\n else {\n return SetTreeModule_mk(SetTreeNode$1__get_Left(t1$0027), SetTreeLeaf$1__get_Key(t1$0027), SetTreeModule_mk(SetTreeNode$1__get_Right(t1$0027), v, t2));\n }\n }\n else {\n throw new Error(\"internal error: Set.rebalance\");\n }\n }\n else {\n return SetTreeModule_mk(t1, v, t2);\n }\n}\nexport function SetTreeModule_add(comparer, k, t) {\n if (t != null) {\n const t2 = value_1(t);\n const c = comparer.Compare(k, SetTreeLeaf$1__get_Key(t2)) | 0;\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n if (c < 0) {\n return SetTreeModule_rebalance(SetTreeModule_add(comparer, k, SetTreeNode$1__get_Left(tn)), SetTreeLeaf$1__get_Key(tn), SetTreeNode$1__get_Right(tn));\n }\n else if (c === 0) {\n return t;\n }\n else {\n return SetTreeModule_rebalance(SetTreeNode$1__get_Left(tn), SetTreeLeaf$1__get_Key(tn), SetTreeModule_add(comparer, k, SetTreeNode$1__get_Right(tn)));\n }\n }\n else {\n const c_1 = comparer.Compare(k, SetTreeLeaf$1__get_Key(t2)) | 0;\n if (c_1 < 0) {\n return SetTreeNode$1_$ctor_5F465FC9(k, SetTreeModule_empty(), t, 2);\n }\n else if (c_1 === 0) {\n return t;\n }\n else {\n return SetTreeNode$1_$ctor_5F465FC9(k, t, SetTreeModule_empty(), 2);\n }\n }\n }\n else {\n return SetTreeLeaf$1_$ctor_2B595(k);\n }\n}\nexport function SetTreeModule_balance(comparer, t1, k, t2) {\n if (t1 != null) {\n const t1$0027 = value_1(t1);\n if (t2 != null) {\n const t2$0027 = value_1(t2);\n if (t1$0027 instanceof SetTreeNode$1) {\n const t1n = t1$0027;\n if (t2$0027 instanceof SetTreeNode$1) {\n const t2n = t2$0027;\n if ((SetTreeNode$1__get_Height(t1n) + 2) < SetTreeNode$1__get_Height(t2n)) {\n return SetTreeModule_rebalance(SetTreeModule_balance(comparer, t1, k, SetTreeNode$1__get_Left(t2n)), SetTreeLeaf$1__get_Key(t2n), SetTreeNode$1__get_Right(t2n));\n }\n else if ((SetTreeNode$1__get_Height(t2n) + 2) < SetTreeNode$1__get_Height(t1n)) {\n return SetTreeModule_rebalance(SetTreeNode$1__get_Left(t1n), SetTreeLeaf$1__get_Key(t1n), SetTreeModule_balance(comparer, SetTreeNode$1__get_Right(t1n), k, t2));\n }\n else {\n return SetTreeModule_mk(t1, k, t2);\n }\n }\n else {\n return SetTreeModule_add(comparer, k, SetTreeModule_add(comparer, SetTreeLeaf$1__get_Key(t2$0027), t1));\n }\n }\n else {\n return SetTreeModule_add(comparer, k, SetTreeModule_add(comparer, SetTreeLeaf$1__get_Key(t1$0027), t2));\n }\n }\n else {\n return SetTreeModule_add(comparer, k, t1);\n }\n }\n else {\n return SetTreeModule_add(comparer, k, t2);\n }\n}\nexport function SetTreeModule_split(comparer, pivot, t) {\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n const c = comparer.Compare(pivot, SetTreeLeaf$1__get_Key(tn)) | 0;\n if (c < 0) {\n const patternInput = SetTreeModule_split(comparer, pivot, SetTreeNode$1__get_Left(tn));\n return [patternInput[0], patternInput[1], SetTreeModule_balance(comparer, patternInput[2], SetTreeLeaf$1__get_Key(tn), SetTreeNode$1__get_Right(tn))];\n }\n else if (c === 0) {\n return [SetTreeNode$1__get_Left(tn), true, SetTreeNode$1__get_Right(tn)];\n }\n else {\n const patternInput_1 = SetTreeModule_split(comparer, pivot, SetTreeNode$1__get_Right(tn));\n return [SetTreeModule_balance(comparer, SetTreeNode$1__get_Left(tn), SetTreeLeaf$1__get_Key(tn), patternInput_1[0]), patternInput_1[1], patternInput_1[2]];\n }\n }\n else {\n const c_1 = comparer.Compare(SetTreeLeaf$1__get_Key(t2), pivot) | 0;\n if (c_1 < 0) {\n return [t, false, SetTreeModule_empty()];\n }\n else if (c_1 === 0) {\n return [SetTreeModule_empty(), true, SetTreeModule_empty()];\n }\n else {\n return [SetTreeModule_empty(), false, t];\n }\n }\n }\n else {\n return [SetTreeModule_empty(), false, SetTreeModule_empty()];\n }\n}\nexport function SetTreeModule_spliceOutSuccessor(t) {\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n if (SetTreeNode$1__get_Left(tn) == null) {\n return [SetTreeLeaf$1__get_Key(tn), SetTreeNode$1__get_Right(tn)];\n }\n else {\n const patternInput = SetTreeModule_spliceOutSuccessor(SetTreeNode$1__get_Left(tn));\n return [patternInput[0], SetTreeModule_mk(patternInput[1], SetTreeLeaf$1__get_Key(tn), SetTreeNode$1__get_Right(tn))];\n }\n }\n else {\n return [SetTreeLeaf$1__get_Key(t2), SetTreeModule_empty()];\n }\n }\n else {\n throw new Error(\"internal error: Set.spliceOutSuccessor\");\n }\n}\nexport function SetTreeModule_remove(comparer, k, t) {\n if (t != null) {\n const t2 = value_1(t);\n const c = comparer.Compare(k, SetTreeLeaf$1__get_Key(t2)) | 0;\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n if (c < 0) {\n return SetTreeModule_rebalance(SetTreeModule_remove(comparer, k, SetTreeNode$1__get_Left(tn)), SetTreeLeaf$1__get_Key(tn), SetTreeNode$1__get_Right(tn));\n }\n else if (c === 0) {\n if (SetTreeNode$1__get_Left(tn) == null) {\n return SetTreeNode$1__get_Right(tn);\n }\n else if (SetTreeNode$1__get_Right(tn) == null) {\n return SetTreeNode$1__get_Left(tn);\n }\n else {\n const patternInput = SetTreeModule_spliceOutSuccessor(SetTreeNode$1__get_Right(tn));\n return SetTreeModule_mk(SetTreeNode$1__get_Left(tn), patternInput[0], patternInput[1]);\n }\n }\n else {\n return SetTreeModule_rebalance(SetTreeNode$1__get_Left(tn), SetTreeLeaf$1__get_Key(tn), SetTreeModule_remove(comparer, k, SetTreeNode$1__get_Right(tn)));\n }\n }\n else if (c === 0) {\n return SetTreeModule_empty();\n }\n else {\n return t;\n }\n }\n else {\n return t;\n }\n}\nexport function SetTreeModule_mem(comparer_mut, k_mut, t_mut) {\n SetTreeModule_mem: while (true) {\n const comparer = comparer_mut, k = k_mut, t = t_mut;\n if (t != null) {\n const t2 = value_1(t);\n const c = comparer.Compare(k, SetTreeLeaf$1__get_Key(t2)) | 0;\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n if (c < 0) {\n comparer_mut = comparer;\n k_mut = k;\n t_mut = SetTreeNode$1__get_Left(tn);\n continue SetTreeModule_mem;\n }\n else if (c === 0) {\n return true;\n }\n else {\n comparer_mut = comparer;\n k_mut = k;\n t_mut = SetTreeNode$1__get_Right(tn);\n continue SetTreeModule_mem;\n }\n }\n else {\n return c === 0;\n }\n }\n else {\n return false;\n }\n break;\n }\n}\nexport function SetTreeModule_iter(f_mut, t_mut) {\n SetTreeModule_iter: while (true) {\n const f = f_mut, t = t_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n SetTreeModule_iter(f, SetTreeNode$1__get_Left(tn));\n f(SetTreeLeaf$1__get_Key(tn));\n f_mut = f;\n t_mut = SetTreeNode$1__get_Right(tn);\n continue SetTreeModule_iter;\n }\n else {\n f(SetTreeLeaf$1__get_Key(t2));\n }\n }\n break;\n }\n}\nexport function SetTreeModule_foldBackOpt(f_mut, t_mut, x_mut) {\n SetTreeModule_foldBackOpt: while (true) {\n const f = f_mut, t = t_mut, x = x_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n f_mut = f;\n t_mut = SetTreeNode$1__get_Left(tn);\n x_mut = f(SetTreeLeaf$1__get_Key(tn), SetTreeModule_foldBackOpt(f, SetTreeNode$1__get_Right(tn), x));\n continue SetTreeModule_foldBackOpt;\n }\n else {\n return f(SetTreeLeaf$1__get_Key(t2), x);\n }\n }\n else {\n return x;\n }\n break;\n }\n}\nexport function SetTreeModule_foldBack(f, m, x) {\n return SetTreeModule_foldBackOpt(f, m, x);\n}\nexport function SetTreeModule_foldOpt(f_mut, x_mut, t_mut) {\n SetTreeModule_foldOpt: while (true) {\n const f = f_mut, x = x_mut, t = t_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n f_mut = f;\n x_mut = f(SetTreeModule_foldOpt(f, x, SetTreeNode$1__get_Left(tn)), SetTreeLeaf$1__get_Key(tn));\n t_mut = SetTreeNode$1__get_Right(tn);\n continue SetTreeModule_foldOpt;\n }\n else {\n return f(x, SetTreeLeaf$1__get_Key(t2));\n }\n }\n else {\n return x;\n }\n break;\n }\n}\nexport function SetTreeModule_fold(f, x, m) {\n return SetTreeModule_foldOpt(f, x, m);\n}\nexport function SetTreeModule_forall(f_mut, t_mut) {\n SetTreeModule_forall: while (true) {\n const f = f_mut, t = t_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n if (f(SetTreeLeaf$1__get_Key(tn)) && SetTreeModule_forall(f, SetTreeNode$1__get_Left(tn))) {\n f_mut = f;\n t_mut = SetTreeNode$1__get_Right(tn);\n continue SetTreeModule_forall;\n }\n else {\n return false;\n }\n }\n else {\n return f(SetTreeLeaf$1__get_Key(t2));\n }\n }\n else {\n return true;\n }\n break;\n }\n}\nexport function SetTreeModule_exists(f_mut, t_mut) {\n SetTreeModule_exists: while (true) {\n const f = f_mut, t = t_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n if (f(SetTreeLeaf$1__get_Key(tn)) ? true : SetTreeModule_exists(f, SetTreeNode$1__get_Left(tn))) {\n return true;\n }\n else {\n f_mut = f;\n t_mut = SetTreeNode$1__get_Right(tn);\n continue SetTreeModule_exists;\n }\n }\n else {\n return f(SetTreeLeaf$1__get_Key(t2));\n }\n }\n else {\n return false;\n }\n break;\n }\n}\nexport function SetTreeModule_subset(comparer, a, b) {\n return SetTreeModule_forall((x) => SetTreeModule_mem(comparer, x, b), a);\n}\nexport function SetTreeModule_properSubset(comparer, a, b) {\n if (SetTreeModule_forall((x) => SetTreeModule_mem(comparer, x, b), a)) {\n return SetTreeModule_exists((x_1) => !SetTreeModule_mem(comparer, x_1, a), b);\n }\n else {\n return false;\n }\n}\nexport function SetTreeModule_filterAux(comparer_mut, f_mut, t_mut, acc_mut) {\n SetTreeModule_filterAux: while (true) {\n const comparer = comparer_mut, f = f_mut, t = t_mut, acc = acc_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n const acc_1 = f(SetTreeLeaf$1__get_Key(tn)) ? SetTreeModule_add(comparer, SetTreeLeaf$1__get_Key(tn), acc) : acc;\n comparer_mut = comparer;\n f_mut = f;\n t_mut = SetTreeNode$1__get_Left(tn);\n acc_mut = SetTreeModule_filterAux(comparer, f, SetTreeNode$1__get_Right(tn), acc_1);\n continue SetTreeModule_filterAux;\n }\n else if (f(SetTreeLeaf$1__get_Key(t2))) {\n return SetTreeModule_add(comparer, SetTreeLeaf$1__get_Key(t2), acc);\n }\n else {\n return acc;\n }\n }\n else {\n return acc;\n }\n break;\n }\n}\nexport function SetTreeModule_filter(comparer, f, s) {\n return SetTreeModule_filterAux(comparer, f, s, SetTreeModule_empty());\n}\nexport function SetTreeModule_diffAux(comparer_mut, t_mut, acc_mut) {\n SetTreeModule_diffAux: while (true) {\n const comparer = comparer_mut, t = t_mut, acc = acc_mut;\n if (acc == null) {\n return acc;\n }\n else if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n comparer_mut = comparer;\n t_mut = SetTreeNode$1__get_Left(tn);\n acc_mut = SetTreeModule_diffAux(comparer, SetTreeNode$1__get_Right(tn), SetTreeModule_remove(comparer, SetTreeLeaf$1__get_Key(tn), acc));\n continue SetTreeModule_diffAux;\n }\n else {\n return SetTreeModule_remove(comparer, SetTreeLeaf$1__get_Key(t2), acc);\n }\n }\n else {\n return acc;\n }\n break;\n }\n}\nexport function SetTreeModule_diff(comparer, a, b) {\n return SetTreeModule_diffAux(comparer, b, a);\n}\nexport function SetTreeModule_union(comparer, t1, t2) {\n if (t1 != null) {\n const t1$0027 = value_1(t1);\n if (t2 != null) {\n const t2$0027 = value_1(t2);\n if (t1$0027 instanceof SetTreeNode$1) {\n const t1n = t1$0027;\n if (t2$0027 instanceof SetTreeNode$1) {\n const t2n = t2$0027;\n if (SetTreeNode$1__get_Height(t1n) > SetTreeNode$1__get_Height(t2n)) {\n const patternInput = SetTreeModule_split(comparer, SetTreeLeaf$1__get_Key(t1n), t2);\n return SetTreeModule_balance(comparer, SetTreeModule_union(comparer, SetTreeNode$1__get_Left(t1n), patternInput[0]), SetTreeLeaf$1__get_Key(t1n), SetTreeModule_union(comparer, SetTreeNode$1__get_Right(t1n), patternInput[2]));\n }\n else {\n const patternInput_1 = SetTreeModule_split(comparer, SetTreeLeaf$1__get_Key(t2n), t1);\n return SetTreeModule_balance(comparer, SetTreeModule_union(comparer, SetTreeNode$1__get_Left(t2n), patternInput_1[0]), SetTreeLeaf$1__get_Key(t2n), SetTreeModule_union(comparer, SetTreeNode$1__get_Right(t2n), patternInput_1[2]));\n }\n }\n else {\n return SetTreeModule_add(comparer, SetTreeLeaf$1__get_Key(t2$0027), t1);\n }\n }\n else {\n return SetTreeModule_add(comparer, SetTreeLeaf$1__get_Key(t1$0027), t2);\n }\n }\n else {\n return t1;\n }\n }\n else {\n return t2;\n }\n}\nexport function SetTreeModule_intersectionAux(comparer_mut, b_mut, t_mut, acc_mut) {\n SetTreeModule_intersectionAux: while (true) {\n const comparer = comparer_mut, b = b_mut, t = t_mut, acc = acc_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n const acc_1 = SetTreeModule_intersectionAux(comparer, b, SetTreeNode$1__get_Right(tn), acc);\n const acc_2 = SetTreeModule_mem(comparer, SetTreeLeaf$1__get_Key(tn), b) ? SetTreeModule_add(comparer, SetTreeLeaf$1__get_Key(tn), acc_1) : acc_1;\n comparer_mut = comparer;\n b_mut = b;\n t_mut = SetTreeNode$1__get_Left(tn);\n acc_mut = acc_2;\n continue SetTreeModule_intersectionAux;\n }\n else if (SetTreeModule_mem(comparer, SetTreeLeaf$1__get_Key(t2), b)) {\n return SetTreeModule_add(comparer, SetTreeLeaf$1__get_Key(t2), acc);\n }\n else {\n return acc;\n }\n }\n else {\n return acc;\n }\n break;\n }\n}\nexport function SetTreeModule_intersection(comparer, a, b) {\n return SetTreeModule_intersectionAux(comparer, b, a, SetTreeModule_empty());\n}\nexport function SetTreeModule_partition1(comparer, f, k, acc1, acc2) {\n if (f(k)) {\n return [SetTreeModule_add(comparer, k, acc1), acc2];\n }\n else {\n return [acc1, SetTreeModule_add(comparer, k, acc2)];\n }\n}\nexport function SetTreeModule_partitionAux(comparer_mut, f_mut, t_mut, acc__mut, acc__1_mut) {\n SetTreeModule_partitionAux: while (true) {\n const comparer = comparer_mut, f = f_mut, t = t_mut, acc_ = acc__mut, acc__1 = acc__1_mut;\n const acc = [acc_, acc__1];\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n const acc_1 = SetTreeModule_partitionAux(comparer, f, SetTreeNode$1__get_Right(tn), acc[0], acc[1]);\n const acc_4 = SetTreeModule_partition1(comparer, f, SetTreeLeaf$1__get_Key(tn), acc_1[0], acc_1[1]);\n comparer_mut = comparer;\n f_mut = f;\n t_mut = SetTreeNode$1__get_Left(tn);\n acc__mut = acc_4[0];\n acc__1_mut = acc_4[1];\n continue SetTreeModule_partitionAux;\n }\n else {\n return SetTreeModule_partition1(comparer, f, SetTreeLeaf$1__get_Key(t2), acc[0], acc[1]);\n }\n }\n else {\n return acc;\n }\n break;\n }\n}\nexport function SetTreeModule_partition(comparer, f, s) {\n return SetTreeModule_partitionAux(comparer, f, s, SetTreeModule_empty(), SetTreeModule_empty());\n}\nexport function SetTreeModule_minimumElementAux(t_mut, n_mut) {\n SetTreeModule_minimumElementAux: while (true) {\n const t = t_mut, n = n_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n t_mut = SetTreeNode$1__get_Left(tn);\n n_mut = SetTreeLeaf$1__get_Key(tn);\n continue SetTreeModule_minimumElementAux;\n }\n else {\n return SetTreeLeaf$1__get_Key(t2);\n }\n }\n else {\n return n;\n }\n break;\n }\n}\nexport function SetTreeModule_minimumElementOpt(t) {\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n return some(SetTreeModule_minimumElementAux(SetTreeNode$1__get_Left(tn), SetTreeLeaf$1__get_Key(tn)));\n }\n else {\n return some(SetTreeLeaf$1__get_Key(t2));\n }\n }\n else {\n return void 0;\n }\n}\nexport function SetTreeModule_maximumElementAux(t_mut, n_mut) {\n SetTreeModule_maximumElementAux: while (true) {\n const t = t_mut, n = n_mut;\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n t_mut = SetTreeNode$1__get_Right(tn);\n n_mut = SetTreeLeaf$1__get_Key(tn);\n continue SetTreeModule_maximumElementAux;\n }\n else {\n return SetTreeLeaf$1__get_Key(t2);\n }\n }\n else {\n return n;\n }\n break;\n }\n}\nexport function SetTreeModule_maximumElementOpt(t) {\n if (t != null) {\n const t2 = value_1(t);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n return some(SetTreeModule_maximumElementAux(SetTreeNode$1__get_Right(tn), SetTreeLeaf$1__get_Key(tn)));\n }\n else {\n return some(SetTreeLeaf$1__get_Key(t2));\n }\n }\n else {\n return void 0;\n }\n}\nexport function SetTreeModule_minimumElement(s) {\n const matchValue = SetTreeModule_minimumElementOpt(s);\n if (matchValue == null) {\n throw new Error(\"Set contains no elements\");\n }\n else {\n return value_1(matchValue);\n }\n}\nexport function SetTreeModule_maximumElement(s) {\n const matchValue = SetTreeModule_maximumElementOpt(s);\n if (matchValue == null) {\n throw new Error(\"Set contains no elements\");\n }\n else {\n return value_1(matchValue);\n }\n}\nexport class SetTreeModule_SetIterator$1 extends Record {\n constructor(stack, started) {\n super();\n this.stack = stack;\n this.started = started;\n }\n}\nexport function SetTreeModule_SetIterator$1_$reflection(gen0) {\n return record_type(\"Set.SetTreeModule.SetIterator`1\", [gen0], SetTreeModule_SetIterator$1, () => [[\"stack\", list_type(option_type(SetTreeLeaf$1_$reflection(gen0)))], [\"started\", bool_type]]);\n}\nexport function SetTreeModule_collapseLHS(stack_mut) {\n SetTreeModule_collapseLHS: while (true) {\n const stack = stack_mut;\n if (!isEmpty_1(stack)) {\n const x = head(stack);\n const rest = tail(stack);\n if (x != null) {\n const x2 = value_1(x);\n if (x2 instanceof SetTreeNode$1) {\n const xn = x2;\n stack_mut = ofArrayWithTail([SetTreeNode$1__get_Left(xn), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(xn)), SetTreeNode$1__get_Right(xn)], rest);\n continue SetTreeModule_collapseLHS;\n }\n else {\n return stack;\n }\n }\n else {\n stack_mut = rest;\n continue SetTreeModule_collapseLHS;\n }\n }\n else {\n return empty_1();\n }\n break;\n }\n}\nexport function SetTreeModule_mkIterator(s) {\n return new SetTreeModule_SetIterator$1(SetTreeModule_collapseLHS(singleton_1(s)), false);\n}\nexport function SetTreeModule_notStarted() {\n throw new Error(\"Enumeration not started\");\n}\nexport function SetTreeModule_alreadyFinished() {\n throw new Error(\"Enumeration already started\");\n}\nexport function SetTreeModule_current(i) {\n if (i.started) {\n const matchValue = i.stack;\n if (isEmpty_1(matchValue)) {\n return SetTreeModule_alreadyFinished();\n }\n else if (head(matchValue) != null) {\n const t = value_1(head(matchValue));\n return SetTreeLeaf$1__get_Key(t);\n }\n else {\n throw new Error(\"Please report error: Set iterator, unexpected stack for current\");\n }\n }\n else {\n return SetTreeModule_notStarted();\n }\n}\nexport function SetTreeModule_moveNext(i) {\n if (i.started) {\n const matchValue = i.stack;\n if (!isEmpty_1(matchValue)) {\n if (head(matchValue) != null) {\n const t = value_1(head(matchValue));\n if (t instanceof SetTreeNode$1) {\n throw new Error(\"Please report error: Set iterator, unexpected stack for moveNext\");\n }\n else {\n i.stack = SetTreeModule_collapseLHS(tail(matchValue));\n return !isEmpty_1(i.stack);\n }\n }\n else {\n throw new Error(\"Please report error: Set iterator, unexpected stack for moveNext\");\n }\n }\n else {\n return false;\n }\n }\n else {\n i.started = true;\n return !isEmpty_1(i.stack);\n }\n}\nexport function SetTreeModule_mkIEnumerator(s) {\n let i = SetTreeModule_mkIterator(s);\n return {\n \"System.Collections.Generic.IEnumerator`1.get_Current\"() {\n return SetTreeModule_current(i);\n },\n \"System.Collections.IEnumerator.get_Current\"() {\n return SetTreeModule_current(i);\n },\n \"System.Collections.IEnumerator.MoveNext\"() {\n return SetTreeModule_moveNext(i);\n },\n \"System.Collections.IEnumerator.Reset\"() {\n i = SetTreeModule_mkIterator(s);\n },\n Dispose() {\n },\n };\n}\n/**\n * Set comparison. Note this can be expensive.\n */\nexport function SetTreeModule_compareStacks(comparer_mut, l1_mut, l2_mut) {\n SetTreeModule_compareStacks: while (true) {\n const comparer = comparer_mut, l1 = l1_mut, l2 = l2_mut;\n if (!isEmpty_1(l1)) {\n if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n if (head(l1) != null) {\n const x1_3 = value_1(head(l1));\n const x2_3 = value_1(head(l2));\n if (x1_3 instanceof SetTreeNode$1) {\n const x1n_2 = x1_3;\n if (SetTreeNode$1__get_Left(x1n_2) == null) {\n if (x2_3 instanceof SetTreeNode$1) {\n const x2n_2 = x2_3;\n if (SetTreeNode$1__get_Left(x2n_2) == null) {\n const c = comparer.Compare(SetTreeLeaf$1__get_Key(x1n_2), SetTreeLeaf$1__get_Key(x2n_2)) | 0;\n if (c !== 0) {\n return c | 0;\n }\n else {\n comparer_mut = comparer;\n l1_mut = cons(SetTreeNode$1__get_Right(x1n_2), tail(l1));\n l2_mut = cons(SetTreeNode$1__get_Right(x2n_2), tail(l2));\n continue SetTreeModule_compareStacks;\n }\n }\n else {\n let matchResult, t1_6, x1_4, t2_6, x2_4;\n if (!isEmpty_1(l1)) {\n if (head(l1) != null) {\n matchResult = 0;\n t1_6 = tail(l1);\n x1_4 = value_1(head(l1));\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult = 1;\n t2_6 = tail(l2);\n x2_4 = value_1(head(l2));\n }\n else {\n matchResult = 2;\n }\n }\n else {\n matchResult = 2;\n }\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult = 1;\n t2_6 = tail(l2);\n x2_4 = value_1(head(l2));\n }\n else {\n matchResult = 2;\n }\n }\n else {\n matchResult = 2;\n }\n switch (matchResult) {\n case 0:\n if (x1_4 instanceof SetTreeNode$1) {\n const x1n_3 = x1_4;\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x1n_3), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x1n_3), SetTreeModule_empty(), SetTreeNode$1__get_Right(x1n_3), 0)], t1_6);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x1_4))], t1_6);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n case 1:\n if (x2_4 instanceof SetTreeNode$1) {\n const x2n_3 = x2_4;\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x2n_3), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x2n_3), SetTreeModule_empty(), SetTreeNode$1__get_Right(x2n_3), 0)], t2_6);\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x2_4))], t2_6);\n continue SetTreeModule_compareStacks;\n }\n default:\n throw new Error(\"unexpected state in SetTree.compareStacks\");\n }\n }\n }\n else {\n const c_1 = comparer.Compare(SetTreeLeaf$1__get_Key(x1n_2), SetTreeLeaf$1__get_Key(x2_3)) | 0;\n if (c_1 !== 0) {\n return c_1 | 0;\n }\n else {\n comparer_mut = comparer;\n l1_mut = cons(SetTreeNode$1__get_Right(x1n_2), tail(l1));\n l2_mut = cons(SetTreeModule_empty(), tail(l2));\n continue SetTreeModule_compareStacks;\n }\n }\n }\n else {\n let matchResult_1, t1_7, x1_5, t2_7, x2_5;\n if (!isEmpty_1(l1)) {\n if (head(l1) != null) {\n matchResult_1 = 0;\n t1_7 = tail(l1);\n x1_5 = value_1(head(l1));\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult_1 = 1;\n t2_7 = tail(l2);\n x2_5 = value_1(head(l2));\n }\n else {\n matchResult_1 = 2;\n }\n }\n else {\n matchResult_1 = 2;\n }\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult_1 = 1;\n t2_7 = tail(l2);\n x2_5 = value_1(head(l2));\n }\n else {\n matchResult_1 = 2;\n }\n }\n else {\n matchResult_1 = 2;\n }\n switch (matchResult_1) {\n case 0:\n if (x1_5 instanceof SetTreeNode$1) {\n const x1n_4 = x1_5;\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x1n_4), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x1n_4), SetTreeModule_empty(), SetTreeNode$1__get_Right(x1n_4), 0)], t1_7);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x1_5))], t1_7);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n case 1:\n if (x2_5 instanceof SetTreeNode$1) {\n const x2n_4 = x2_5;\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x2n_4), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x2n_4), SetTreeModule_empty(), SetTreeNode$1__get_Right(x2n_4), 0)], t2_7);\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x2_5))], t2_7);\n continue SetTreeModule_compareStacks;\n }\n default:\n throw new Error(\"unexpected state in SetTree.compareStacks\");\n }\n }\n }\n else if (x2_3 instanceof SetTreeNode$1) {\n const x2n_5 = x2_3;\n if (SetTreeNode$1__get_Left(x2n_5) == null) {\n const c_2 = comparer.Compare(SetTreeLeaf$1__get_Key(x1_3), SetTreeLeaf$1__get_Key(x2n_5)) | 0;\n if (c_2 !== 0) {\n return c_2 | 0;\n }\n else {\n comparer_mut = comparer;\n l1_mut = cons(SetTreeModule_empty(), tail(l1));\n l2_mut = cons(SetTreeNode$1__get_Right(x2n_5), tail(l2));\n continue SetTreeModule_compareStacks;\n }\n }\n else {\n let matchResult_2, t1_8, x1_6, t2_8, x2_6;\n if (!isEmpty_1(l1)) {\n if (head(l1) != null) {\n matchResult_2 = 0;\n t1_8 = tail(l1);\n x1_6 = value_1(head(l1));\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult_2 = 1;\n t2_8 = tail(l2);\n x2_6 = value_1(head(l2));\n }\n else {\n matchResult_2 = 2;\n }\n }\n else {\n matchResult_2 = 2;\n }\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult_2 = 1;\n t2_8 = tail(l2);\n x2_6 = value_1(head(l2));\n }\n else {\n matchResult_2 = 2;\n }\n }\n else {\n matchResult_2 = 2;\n }\n switch (matchResult_2) {\n case 0:\n if (x1_6 instanceof SetTreeNode$1) {\n const x1n_5 = x1_6;\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x1n_5), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x1n_5), SetTreeModule_empty(), SetTreeNode$1__get_Right(x1n_5), 0)], t1_8);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x1_6))], t1_8);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n case 1:\n if (x2_6 instanceof SetTreeNode$1) {\n const x2n_6 = x2_6;\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x2n_6), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x2n_6), SetTreeModule_empty(), SetTreeNode$1__get_Right(x2n_6), 0)], t2_8);\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x2_6))], t2_8);\n continue SetTreeModule_compareStacks;\n }\n default:\n throw new Error(\"unexpected state in SetTree.compareStacks\");\n }\n }\n }\n else {\n const c_3 = comparer.Compare(SetTreeLeaf$1__get_Key(x1_3), SetTreeLeaf$1__get_Key(x2_3)) | 0;\n if (c_3 !== 0) {\n return c_3 | 0;\n }\n else {\n comparer_mut = comparer;\n l1_mut = tail(l1);\n l2_mut = tail(l2);\n continue SetTreeModule_compareStacks;\n }\n }\n }\n else {\n const x2 = value_1(head(l2));\n let matchResult_3, t1_2, x1, t2_2, x2_1;\n if (!isEmpty_1(l1)) {\n if (head(l1) != null) {\n matchResult_3 = 0;\n t1_2 = tail(l1);\n x1 = value_1(head(l1));\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult_3 = 1;\n t2_2 = tail(l2);\n x2_1 = value_1(head(l2));\n }\n else {\n matchResult_3 = 2;\n }\n }\n else {\n matchResult_3 = 2;\n }\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult_3 = 1;\n t2_2 = tail(l2);\n x2_1 = value_1(head(l2));\n }\n else {\n matchResult_3 = 2;\n }\n }\n else {\n matchResult_3 = 2;\n }\n switch (matchResult_3) {\n case 0:\n if (x1 instanceof SetTreeNode$1) {\n const x1n = x1;\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x1n), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x1n), SetTreeModule_empty(), SetTreeNode$1__get_Right(x1n), 0)], t1_2);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x1))], t1_2);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n case 1:\n if (x2_1 instanceof SetTreeNode$1) {\n const x2n = x2_1;\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x2n), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x2n), SetTreeModule_empty(), SetTreeNode$1__get_Right(x2n), 0)], t2_2);\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x2_1))], t2_2);\n continue SetTreeModule_compareStacks;\n }\n default:\n throw new Error(\"unexpected state in SetTree.compareStacks\");\n }\n }\n }\n else if (head(l1) != null) {\n const x1_1 = value_1(head(l1));\n let matchResult_4, t1_4, x1_2, t2_4, x2_2;\n if (!isEmpty_1(l1)) {\n if (head(l1) != null) {\n matchResult_4 = 0;\n t1_4 = tail(l1);\n x1_2 = value_1(head(l1));\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult_4 = 1;\n t2_4 = tail(l2);\n x2_2 = value_1(head(l2));\n }\n else {\n matchResult_4 = 2;\n }\n }\n else {\n matchResult_4 = 2;\n }\n }\n else if (!isEmpty_1(l2)) {\n if (head(l2) != null) {\n matchResult_4 = 1;\n t2_4 = tail(l2);\n x2_2 = value_1(head(l2));\n }\n else {\n matchResult_4 = 2;\n }\n }\n else {\n matchResult_4 = 2;\n }\n switch (matchResult_4) {\n case 0:\n if (x1_2 instanceof SetTreeNode$1) {\n const x1n_1 = x1_2;\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x1n_1), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x1n_1), SetTreeModule_empty(), SetTreeNode$1__get_Right(x1n_1), 0)], t1_4);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x1_2))], t1_4);\n l2_mut = l2;\n continue SetTreeModule_compareStacks;\n }\n case 1:\n if (x2_2 instanceof SetTreeNode$1) {\n const x2n_1 = x2_2;\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeNode$1__get_Left(x2n_1), SetTreeNode$1_$ctor_5F465FC9(SetTreeLeaf$1__get_Key(x2n_1), SetTreeModule_empty(), SetTreeNode$1__get_Right(x2n_1), 0)], t2_4);\n continue SetTreeModule_compareStacks;\n }\n else {\n comparer_mut = comparer;\n l1_mut = l1;\n l2_mut = ofArrayWithTail([SetTreeModule_empty(), SetTreeLeaf$1_$ctor_2B595(SetTreeLeaf$1__get_Key(x2_2))], t2_4);\n continue SetTreeModule_compareStacks;\n }\n default:\n throw new Error(\"unexpected state in SetTree.compareStacks\");\n }\n }\n else {\n comparer_mut = comparer;\n l1_mut = tail(l1);\n l2_mut = tail(l2);\n continue SetTreeModule_compareStacks;\n }\n }\n else {\n return 1;\n }\n }\n else if (isEmpty_1(l2)) {\n return 0;\n }\n else {\n return -1;\n }\n break;\n }\n}\nexport function SetTreeModule_compare(comparer, t1, t2) {\n if (t1 == null) {\n if (t2 == null) {\n return 0;\n }\n else {\n return -1;\n }\n }\n else if (t2 == null) {\n return 1;\n }\n else {\n return SetTreeModule_compareStacks(comparer, singleton_1(t1), singleton_1(t2)) | 0;\n }\n}\nexport function SetTreeModule_choose(s) {\n return SetTreeModule_minimumElement(s);\n}\nexport function SetTreeModule_toList(t) {\n const loop = (t$0027_mut, acc_mut) => {\n loop: while (true) {\n const t$0027 = t$0027_mut, acc = acc_mut;\n if (t$0027 != null) {\n const t2 = value_1(t$0027);\n if (t2 instanceof SetTreeNode$1) {\n const tn = t2;\n t$0027_mut = SetTreeNode$1__get_Left(tn);\n acc_mut = cons(SetTreeLeaf$1__get_Key(tn), loop(SetTreeNode$1__get_Right(tn), acc));\n continue loop;\n }\n else {\n return cons(SetTreeLeaf$1__get_Key(t2), acc);\n }\n }\n else {\n return acc;\n }\n break;\n }\n };\n return loop(t, empty_1());\n}\nexport function SetTreeModule_copyToArray(s, arr, i) {\n let j = i;\n SetTreeModule_iter((x) => {\n arr[j] = x;\n j = ((j + 1) | 0);\n }, s);\n}\nexport function SetTreeModule_toArray(s) {\n const n = SetTreeModule_count(s) | 0;\n const res = fill(new Array(n), 0, n, null);\n SetTreeModule_copyToArray(s, res, 0);\n return res;\n}\nexport function SetTreeModule_mkFromEnumerator(comparer_mut, acc_mut, e_mut) {\n SetTreeModule_mkFromEnumerator: while (true) {\n const comparer = comparer_mut, acc = acc_mut, e = e_mut;\n if (e[\"System.Collections.IEnumerator.MoveNext\"]()) {\n comparer_mut = comparer;\n acc_mut = SetTreeModule_add(comparer, e[\"System.Collections.Generic.IEnumerator`1.get_Current\"](), acc);\n e_mut = e;\n continue SetTreeModule_mkFromEnumerator;\n }\n else {\n return acc;\n }\n break;\n }\n}\nexport function SetTreeModule_ofArray(comparer, l) {\n return fold_1((acc, k) => SetTreeModule_add(comparer, k, acc), SetTreeModule_empty(), l);\n}\nexport function SetTreeModule_ofList(comparer, l) {\n return fold_2((acc, k) => SetTreeModule_add(comparer, k, acc), SetTreeModule_empty(), l);\n}\nexport function SetTreeModule_ofSeq(comparer, c) {\n if (isArrayLike(c)) {\n return SetTreeModule_ofArray(comparer, c);\n }\n else if (c instanceof FSharpList) {\n return SetTreeModule_ofList(comparer, c);\n }\n else {\n const ie = getEnumerator(c);\n try {\n return SetTreeModule_mkFromEnumerator(comparer, SetTreeModule_empty(), ie);\n }\n finally {\n disposeSafe(ie);\n }\n }\n}\nexport class FSharpSet {\n constructor(comparer, tree) {\n this.comparer = comparer;\n this.tree = tree;\n }\n GetHashCode() {\n const this$ = this;\n return FSharpSet__ComputeHashCode(this$) | 0;\n }\n Equals(that) {\n let that_1;\n const this$ = this;\n return (that instanceof FSharpSet) && ((that_1 = that, SetTreeModule_compare(FSharpSet__get_Comparer(this$), FSharpSet__get_Tree(this$), FSharpSet__get_Tree(that_1)) === 0));\n }\n toString() {\n const this$ = this;\n return (\"set [\" + join(\"; \", map_1((x) => {\n let copyOfStruct = x;\n return toString(copyOfStruct);\n }, this$))) + \"]\";\n }\n get [Symbol.toStringTag]() {\n return \"FSharpSet\";\n }\n toJSON() {\n const this$ = this;\n return Array.from(this$);\n }\n CompareTo(that) {\n const s = this;\n return SetTreeModule_compare(FSharpSet__get_Comparer(s), FSharpSet__get_Tree(s), FSharpSet__get_Tree(that)) | 0;\n }\n \"System.Collections.Generic.ICollection`1.Add2B595\"(x) {\n throw new Error(\"ReadOnlyCollection\");\n }\n \"System.Collections.Generic.ICollection`1.Clear\"() {\n throw new Error(\"ReadOnlyCollection\");\n }\n \"System.Collections.Generic.ICollection`1.Remove2B595\"(x) {\n throw new Error(\"ReadOnlyCollection\");\n }\n \"System.Collections.Generic.ICollection`1.Contains2B595\"(x) {\n const s = this;\n return SetTreeModule_mem(FSharpSet__get_Comparer(s), x, FSharpSet__get_Tree(s));\n }\n \"System.Collections.Generic.ICollection`1.CopyToZ3B4C077E\"(arr, i) {\n const s = this;\n SetTreeModule_copyToArray(FSharpSet__get_Tree(s), arr, i);\n }\n \"System.Collections.Generic.ICollection`1.get_IsReadOnly\"() {\n return true;\n }\n \"System.Collections.Generic.ICollection`1.get_Count\"() {\n const s = this;\n return FSharpSet__get_Count(s) | 0;\n }\n \"System.Collections.Generic.IReadOnlyCollection`1.get_Count\"() {\n const s = this;\n return FSharpSet__get_Count(s) | 0;\n }\n GetEnumerator() {\n const s = this;\n return SetTreeModule_mkIEnumerator(FSharpSet__get_Tree(s));\n }\n [Symbol.iterator]() {\n return toIterator(getEnumerator(this));\n }\n \"System.Collections.IEnumerable.GetEnumerator\"() {\n const s = this;\n return SetTreeModule_mkIEnumerator(FSharpSet__get_Tree(s));\n }\n get size() {\n const s = this;\n return FSharpSet__get_Count(s) | 0;\n }\n add(k) {\n const s = this;\n throw new Error(\"Set cannot be mutated\");\n return s;\n }\n clear() {\n throw new Error(\"Set cannot be mutated\");\n }\n delete(k) {\n throw new Error(\"Set cannot be mutated\");\n return false;\n }\n has(k) {\n const s = this;\n return FSharpSet__Contains(s, k);\n }\n keys() {\n const s = this;\n return map_1((x) => x, s);\n }\n values() {\n const s = this;\n return map_1((x) => x, s);\n }\n entries() {\n const s = this;\n return map_1((v) => [v, v], s);\n }\n forEach(f, thisArg) {\n const s = this;\n iterate_1((x) => {\n f(x, x, s);\n }, s);\n }\n}\nexport function FSharpSet_$reflection(gen0) {\n return class_type(\"Set.FSharpSet\", [gen0], FSharpSet);\n}\nexport function FSharpSet_$ctor(comparer, tree) {\n return new FSharpSet(comparer, tree);\n}\nexport function FSharpSet__get_Comparer(set$) {\n return set$.comparer;\n}\nexport function FSharpSet__get_Tree(set$) {\n return set$.tree;\n}\nexport function FSharpSet_Empty(comparer) {\n return FSharpSet_$ctor(comparer, SetTreeModule_empty());\n}\nexport function FSharpSet__Add(s, value) {\n return FSharpSet_$ctor(FSharpSet__get_Comparer(s), SetTreeModule_add(FSharpSet__get_Comparer(s), value, FSharpSet__get_Tree(s)));\n}\nexport function FSharpSet__Remove(s, value) {\n return FSharpSet_$ctor(FSharpSet__get_Comparer(s), SetTreeModule_remove(FSharpSet__get_Comparer(s), value, FSharpSet__get_Tree(s)));\n}\nexport function FSharpSet__get_Count(s) {\n return SetTreeModule_count(FSharpSet__get_Tree(s));\n}\nexport function FSharpSet__Contains(s, value) {\n return SetTreeModule_mem(FSharpSet__get_Comparer(s), value, FSharpSet__get_Tree(s));\n}\nexport function FSharpSet__Iterate(s, x) {\n SetTreeModule_iter(x, FSharpSet__get_Tree(s));\n}\nexport function FSharpSet__Fold(s, f, z) {\n const f_1 = f;\n return SetTreeModule_fold((x, z_1) => f_1(z_1, x), z, FSharpSet__get_Tree(s));\n}\nexport function FSharpSet__get_IsEmpty(s) {\n return FSharpSet__get_Tree(s) == null;\n}\nexport function FSharpSet__Partition(s, f) {\n if (FSharpSet__get_Tree(s) == null) {\n return [s, s];\n }\n else {\n const patternInput = SetTreeModule_partition(FSharpSet__get_Comparer(s), f, FSharpSet__get_Tree(s));\n return [FSharpSet_$ctor(FSharpSet__get_Comparer(s), patternInput[0]), FSharpSet_$ctor(FSharpSet__get_Comparer(s), patternInput[1])];\n }\n}\nexport function FSharpSet__Filter(s, f) {\n if (FSharpSet__get_Tree(s) == null) {\n return s;\n }\n else {\n return FSharpSet_$ctor(FSharpSet__get_Comparer(s), SetTreeModule_filter(FSharpSet__get_Comparer(s), f, FSharpSet__get_Tree(s)));\n }\n}\nexport function FSharpSet__Map(s, f, comparer) {\n return FSharpSet_$ctor(comparer, SetTreeModule_fold((acc, k) => SetTreeModule_add(comparer, f(k), acc), SetTreeModule_empty(), FSharpSet__get_Tree(s)));\n}\nexport function FSharpSet__Exists(s, f) {\n return SetTreeModule_exists(f, FSharpSet__get_Tree(s));\n}\nexport function FSharpSet__ForAll(s, f) {\n return SetTreeModule_forall(f, FSharpSet__get_Tree(s));\n}\nexport function FSharpSet_op_Subtraction(set1, set2) {\n if (FSharpSet__get_Tree(set1) == null) {\n return set1;\n }\n else if (FSharpSet__get_Tree(set2) == null) {\n return set1;\n }\n else {\n return FSharpSet_$ctor(FSharpSet__get_Comparer(set1), SetTreeModule_diff(FSharpSet__get_Comparer(set1), FSharpSet__get_Tree(set1), FSharpSet__get_Tree(set2)));\n }\n}\nexport function FSharpSet_op_Addition(set1, set2) {\n if (FSharpSet__get_Tree(set2) == null) {\n return set1;\n }\n else if (FSharpSet__get_Tree(set1) == null) {\n return set2;\n }\n else {\n return FSharpSet_$ctor(FSharpSet__get_Comparer(set1), SetTreeModule_union(FSharpSet__get_Comparer(set1), FSharpSet__get_Tree(set1), FSharpSet__get_Tree(set2)));\n }\n}\nexport function FSharpSet_Intersection(a, b) {\n if (FSharpSet__get_Tree(b) == null) {\n return b;\n }\n else if (FSharpSet__get_Tree(a) == null) {\n return a;\n }\n else {\n return FSharpSet_$ctor(FSharpSet__get_Comparer(a), SetTreeModule_intersection(FSharpSet__get_Comparer(a), FSharpSet__get_Tree(a), FSharpSet__get_Tree(b)));\n }\n}\nexport function FSharpSet_IntersectionMany(sets) {\n return reduce(FSharpSet_Intersection, sets);\n}\nexport function FSharpSet_Equality(a, b) {\n return SetTreeModule_compare(FSharpSet__get_Comparer(a), FSharpSet__get_Tree(a), FSharpSet__get_Tree(b)) === 0;\n}\nexport function FSharpSet_Compare(a, b) {\n return SetTreeModule_compare(FSharpSet__get_Comparer(a), FSharpSet__get_Tree(a), FSharpSet__get_Tree(b));\n}\nexport function FSharpSet__get_Choose(x) {\n return SetTreeModule_choose(FSharpSet__get_Tree(x));\n}\nexport function FSharpSet__get_MinimumElement(x) {\n return SetTreeModule_minimumElement(FSharpSet__get_Tree(x));\n}\nexport function FSharpSet__get_MaximumElement(x) {\n return SetTreeModule_maximumElement(FSharpSet__get_Tree(x));\n}\nexport function FSharpSet__IsSubsetOf(x, otherSet) {\n return SetTreeModule_subset(FSharpSet__get_Comparer(x), FSharpSet__get_Tree(x), FSharpSet__get_Tree(otherSet));\n}\nexport function FSharpSet__IsSupersetOf(x, otherSet) {\n return SetTreeModule_subset(FSharpSet__get_Comparer(x), FSharpSet__get_Tree(otherSet), FSharpSet__get_Tree(x));\n}\nexport function FSharpSet__IsProperSubsetOf(x, otherSet) {\n return SetTreeModule_properSubset(FSharpSet__get_Comparer(x), FSharpSet__get_Tree(x), FSharpSet__get_Tree(otherSet));\n}\nexport function FSharpSet__IsProperSupersetOf(x, otherSet) {\n return SetTreeModule_properSubset(FSharpSet__get_Comparer(x), FSharpSet__get_Tree(otherSet), FSharpSet__get_Tree(x));\n}\nexport function FSharpSet__ToList(x) {\n return SetTreeModule_toList(FSharpSet__get_Tree(x));\n}\nexport function FSharpSet__ToArray(x) {\n return SetTreeModule_toArray(FSharpSet__get_Tree(x));\n}\nexport function FSharpSet__ComputeHashCode(this$) {\n let res = 0;\n const enumerator = getEnumerator(this$);\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const x_1 = enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n res = ((((res << 1) + structuralHash(x_1)) + 631) | 0);\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n return Math.abs(res) | 0;\n}\nexport function isEmpty(set$) {\n return FSharpSet__get_IsEmpty(set$);\n}\nexport function contains(element, set$) {\n return FSharpSet__Contains(set$, element);\n}\nexport function add(value, set$) {\n return FSharpSet__Add(set$, value);\n}\nexport function singleton(value, comparer) {\n return FSharpSet__Add(FSharpSet_Empty(comparer), value);\n}\nexport function remove(value, set$) {\n return FSharpSet__Remove(set$, value);\n}\nexport function union(set1, set2) {\n return FSharpSet_op_Addition(set1, set2);\n}\nexport function unionMany(sets, comparer) {\n return fold_3(FSharpSet_op_Addition, FSharpSet_Empty(comparer), sets);\n}\nexport function intersect(set1, set2) {\n return FSharpSet_Intersection(set1, set2);\n}\nexport function intersectMany(sets) {\n return FSharpSet_IntersectionMany(sets);\n}\nexport function iterate(action, set$) {\n FSharpSet__Iterate(set$, action);\n}\nexport function empty(comparer) {\n return FSharpSet_Empty(comparer);\n}\nexport function forAll(predicate, set$) {\n return FSharpSet__ForAll(set$, predicate);\n}\nexport function exists(predicate, set$) {\n return FSharpSet__Exists(set$, predicate);\n}\nexport function filter(predicate, set$) {\n return FSharpSet__Filter(set$, predicate);\n}\nexport function partition(predicate, set$) {\n return FSharpSet__Partition(set$, predicate);\n}\nexport function fold(folder, state, set$) {\n return SetTreeModule_fold(folder, state, FSharpSet__get_Tree(set$));\n}\nexport function foldBack(folder, set$, state) {\n return SetTreeModule_foldBack(folder, FSharpSet__get_Tree(set$), state);\n}\nexport function map(mapping, set$, comparer) {\n return FSharpSet__Map(set$, mapping, comparer);\n}\nexport function count(set$) {\n return FSharpSet__get_Count(set$);\n}\nexport function ofList(elements, comparer) {\n return FSharpSet_$ctor(comparer, SetTreeModule_ofSeq(comparer, elements));\n}\nexport function ofArray(array, comparer) {\n return FSharpSet_$ctor(comparer, SetTreeModule_ofArray(comparer, array));\n}\nexport function toList(set$) {\n return FSharpSet__ToList(set$);\n}\nexport function toArray(set$) {\n return FSharpSet__ToArray(set$);\n}\nexport function toSeq(set$) {\n return map_1((x) => x, set$);\n}\nexport function ofSeq(elements, comparer) {\n return FSharpSet_$ctor(comparer, SetTreeModule_ofSeq(comparer, elements));\n}\nexport function difference(set1, set2) {\n return FSharpSet_op_Subtraction(set1, set2);\n}\nexport function isSubset(set1, set2) {\n return SetTreeModule_subset(FSharpSet__get_Comparer(set1), FSharpSet__get_Tree(set1), FSharpSet__get_Tree(set2));\n}\nexport function isSuperset(set1, set2) {\n return SetTreeModule_subset(FSharpSet__get_Comparer(set1), FSharpSet__get_Tree(set2), FSharpSet__get_Tree(set1));\n}\nexport function isProperSubset(set1, set2) {\n return SetTreeModule_properSubset(FSharpSet__get_Comparer(set1), FSharpSet__get_Tree(set1), FSharpSet__get_Tree(set2));\n}\nexport function isProperSuperset(set1, set2) {\n return SetTreeModule_properSubset(FSharpSet__get_Comparer(set1), FSharpSet__get_Tree(set2), FSharpSet__get_Tree(set1));\n}\nexport function minElement(set$) {\n return FSharpSet__get_MinimumElement(set$);\n}\nexport function maxElement(set$) {\n return FSharpSet__get_MaximumElement(set$);\n}\nexport function unionWith(s1, s2) {\n return fold_3((acc, x) => acc.add(x), s1, s2);\n}\nexport function newMutableSetWith(s1, s2) {\n if (s1 instanceof HashSet) {\n const s1_1 = s1;\n return HashSet_$ctor_Z6150332D(s2, HashSet__get_Comparer(s1_1));\n }\n else {\n return new Set(s2);\n }\n}\nexport function intersectWith(s1, s2) {\n const s2_1 = newMutableSetWith(s1, s2);\n iterate_1((x) => {\n if (!s2_1.has(x)) {\n s1.delete(x);\n }\n }, s1.values());\n}\nexport function exceptWith(s1, s2) {\n iterate_1((x) => {\n s1.delete(x);\n }, s2);\n}\nexport function isSubsetOf(s1, s2) {\n const s2_1 = newMutableSetWith(s1, s2);\n return forAll_1((arg) => s2_1.has(arg), s1.values());\n}\nexport function isSupersetOf(s1, s2) {\n return forAll_1((arg) => s1.has(arg), s2);\n}\nexport function isProperSubsetOf(s1, s2) {\n const s2_1 = newMutableSetWith(s1, s2);\n if (s2_1.size > s1.size) {\n return forAll_1((arg) => s2_1.has(arg), s1.values());\n }\n else {\n return false;\n }\n}\nexport function isProperSupersetOf(s1, s2) {\n const s2_1 = cache(s2);\n if (exists_1((arg_1) => !s1.has(arg_1), s2_1)) {\n return forAll_1((arg_2) => s1.has(arg_2), s2_1);\n }\n else {\n return false;\n }\n}\n","import { disposeSafe, defaultOf, toIterator, getEnumerator } from \"./Util.js\";\nimport { iterate, map, iterateIndexed, concat } from \"./Seq.js\";\nimport { some } from \"./Option.js\";\nimport { FSharpRef } from \"./Types.js\";\nimport { class_type } from \"./Reflection.js\";\nimport { getItemFromDict, tryGetValue } from \"./MapUtil.js\";\nexport class HashSet {\n constructor(items, comparer) {\n const this$ = new FSharpRef(defaultOf());\n this.comparer = comparer;\n this$.contents = this;\n this.hashMap = (new Map([]));\n this[\"init@9\"] = 1;\n const enumerator = getEnumerator(items);\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const item = enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n HashSet__Add_2B595(this$.contents, item);\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n }\n get [Symbol.toStringTag]() {\n return \"HashSet\";\n }\n toJSON() {\n const this$ = this;\n return Array.from(this$);\n }\n \"System.Collections.IEnumerable.GetEnumerator\"() {\n const this$ = this;\n return getEnumerator(this$);\n }\n GetEnumerator() {\n const this$ = this;\n return getEnumerator(concat(this$.hashMap.values()));\n }\n [Symbol.iterator]() {\n return toIterator(getEnumerator(this));\n }\n \"System.Collections.Generic.ICollection`1.Add2B595\"(item) {\n const this$ = this;\n HashSet__Add_2B595(this$, item);\n }\n \"System.Collections.Generic.ICollection`1.Clear\"() {\n const this$ = this;\n HashSet__Clear(this$);\n }\n \"System.Collections.Generic.ICollection`1.Contains2B595\"(item) {\n const this$ = this;\n return HashSet__Contains_2B595(this$, item);\n }\n \"System.Collections.Generic.ICollection`1.CopyToZ3B4C077E\"(array, arrayIndex) {\n const this$ = this;\n iterateIndexed((i, e) => {\n array[arrayIndex + i] = e;\n }, this$);\n }\n \"System.Collections.Generic.ICollection`1.get_Count\"() {\n const this$ = this;\n return HashSet__get_Count(this$) | 0;\n }\n \"System.Collections.Generic.ICollection`1.get_IsReadOnly\"() {\n return false;\n }\n \"System.Collections.Generic.ICollection`1.Remove2B595\"(item) {\n const this$ = this;\n return HashSet__Remove_2B595(this$, item);\n }\n get size() {\n const this$ = this;\n return HashSet__get_Count(this$) | 0;\n }\n add(k) {\n const this$ = this;\n HashSet__Add_2B595(this$, k);\n return this$;\n }\n clear() {\n const this$ = this;\n HashSet__Clear(this$);\n }\n delete(k) {\n const this$ = this;\n return HashSet__Remove_2B595(this$, k);\n }\n has(k) {\n const this$ = this;\n return HashSet__Contains_2B595(this$, k);\n }\n keys() {\n const this$ = this;\n return map((x) => x, this$);\n }\n values() {\n const this$ = this;\n return map((x) => x, this$);\n }\n entries() {\n const this$ = this;\n return map((v) => [v, v], this$);\n }\n forEach(f, thisArg) {\n const this$ = this;\n iterate((x) => {\n f(x, x, this$);\n }, this$);\n }\n}\nexport function HashSet_$reflection(gen0) {\n return class_type(\"Fable.Collections.HashSet\", [gen0], HashSet);\n}\nexport function HashSet_$ctor_Z6150332D(items, comparer) {\n return new HashSet(items, comparer);\n}\nfunction HashSet__TryFindIndex_2B595(this$, k) {\n const h = this$.comparer.GetHashCode(k) | 0;\n let matchValue;\n let outArg = defaultOf();\n matchValue = [tryGetValue(this$.hashMap, h, new FSharpRef(() => outArg, (v) => {\n outArg = v;\n })), outArg];\n if (matchValue[0]) {\n return [true, h, matchValue[1].findIndex((v_1) => this$.comparer.Equals(k, v_1))];\n }\n else {\n return [false, h, -1];\n }\n}\nfunction HashSet__TryFind_2B595(this$, k) {\n const matchValue = HashSet__TryFindIndex_2B595(this$, k);\n let matchResult;\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n matchResult = 0;\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0:\n return some(getItemFromDict(this$.hashMap, matchValue[1])[matchValue[2]]);\n default:\n return void 0;\n }\n}\nexport function HashSet__get_Comparer(this$) {\n return this$.comparer;\n}\nexport function HashSet__Clear(this$) {\n this$.hashMap.clear();\n}\nexport function HashSet__get_Count(this$) {\n let count = 0;\n let enumerator = getEnumerator(this$.hashMap.values());\n try {\n while (enumerator[\"System.Collections.IEnumerator.MoveNext\"]()) {\n const items = enumerator[\"System.Collections.Generic.IEnumerator`1.get_Current\"]();\n count = ((count + items.length) | 0);\n }\n }\n finally {\n disposeSafe(enumerator);\n }\n return count | 0;\n}\nexport function HashSet__Add_2B595(this$, k) {\n const matchValue = HashSet__TryFindIndex_2B595(this$, k);\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n return false;\n }\n else {\n const value = void (getItemFromDict(this$.hashMap, matchValue[1]).push(k));\n return true;\n }\n }\n else {\n this$.hashMap.set(matchValue[1], [k]);\n return true;\n }\n}\nexport function HashSet__Contains_2B595(this$, k) {\n const matchValue = HashSet__TryFindIndex_2B595(this$, k);\n let matchResult;\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n matchResult = 0;\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0:\n return true;\n default:\n return false;\n }\n}\nexport function HashSet__Remove_2B595(this$, k) {\n const matchValue = HashSet__TryFindIndex_2B595(this$, k);\n let matchResult;\n if (matchValue[0]) {\n if (matchValue[2] > -1) {\n matchResult = 0;\n }\n else {\n matchResult = 1;\n }\n }\n else {\n matchResult = 1;\n }\n switch (matchResult) {\n case 0: {\n getItemFromDict(this$.hashMap, matchValue[1]).splice(matchValue[2], 1);\n return true;\n }\n default:\n return false;\n }\n}\n","import { comparePrimitives, padLeftAndRightWithZeros, padWithZeros } from \"./Util.js\";\nimport { toInt64 } from \"./BigInt.js\";\n/**\n * Calls:\n * - `Math.ceil` if the `value` is **negative**\n * - `Math.floor` if the `value` is **positive**\n * @param value Value to round\n */\nfunction signedRound(value) {\n return value < 0 ? Math.ceil(value) : Math.floor(value);\n}\nexport function create(d = 0, h = 0, m = 0, s = 0, ms = 0) {\n switch (arguments.length) {\n case 1:\n // ticks\n return fromTicks(arguments[0]);\n case 3:\n // h,m,s\n d = 0, h = arguments[0], m = arguments[1], s = arguments[2], ms = 0;\n break;\n default:\n // d,h,m,s,ms\n break;\n }\n return d * 86400000 + h * 3600000 + m * 60000 + s * 1000 + ms;\n}\nexport function fromTicks(ticks) {\n return Number(BigInt(ticks) / 10000n);\n}\nexport function fromDays(d) {\n return create(d, 0, 0, 0);\n}\nexport function fromHours(h) {\n return create(h, 0, 0);\n}\nexport function fromMinutes(m) {\n return create(0, m, 0);\n}\nexport function fromSeconds(s) {\n return create(0, 0, s);\n}\nexport function days(ts) {\n return signedRound(ts / 86400000);\n}\nexport function hours(ts) {\n return signedRound(ts % 86400000 / 3600000);\n}\nexport function minutes(ts) {\n return signedRound(ts % 3600000 / 60000);\n}\nexport function seconds(ts) {\n return signedRound(ts % 60000 / 1000);\n}\nexport function milliseconds(ts) {\n return signedRound(ts % 1000);\n}\nexport function ticks(ts) {\n return toInt64(BigInt(ts) * 10000n);\n}\nexport function totalDays(ts) {\n return ts / 86400000;\n}\nexport function totalHours(ts) {\n return ts / 3600000;\n}\nexport function totalMinutes(ts) {\n return ts / 60000;\n}\nexport function totalSeconds(ts) {\n return ts / 1000;\n}\nexport function negate(ts) {\n return ts * -1;\n}\nexport function add(ts1, ts2) {\n return ts1 + ts2;\n}\nexport function subtract(ts1, ts2) {\n return ts1 - ts2;\n}\nexport function multiply(ts, factor) {\n return ts * factor;\n}\nexport function divide(ts, b) {\n return ts / b;\n}\nexport const op_Addition = add;\nexport const op_Subtraction = subtract;\nexport const op_Multiply = multiply;\nexport const op_Division = divide;\nexport const compare = comparePrimitives;\nexport const compareTo = comparePrimitives;\nexport function duration(x) {\n return Math.abs(x);\n}\nexport function toString(ts, format = \"c\", _provider) {\n if ([\"c\", \"g\", \"G\"].indexOf(format) === -1) {\n throw new Error(\"Custom formats are not supported\");\n }\n const d = Math.abs(days(ts));\n const h = Math.abs(hours(ts));\n const m = Math.abs(minutes(ts));\n const s = Math.abs(seconds(ts));\n const ms = Math.abs(milliseconds(ts));\n const sign = ts < 0 ? \"-\" : \"\";\n return `${sign}${d === 0 && (format === \"c\" || format === \"g\") ? \"\" : format === \"c\" ? d + \".\" : d + \":\"}${format === \"g\" ? h : padWithZeros(h, 2)}:${padWithZeros(m, 2)}:${padWithZeros(s, 2)}${ms === 0 && (format === \"c\" || format === \"g\") ? \"\" : format === \"g\" ? \".\" + padWithZeros(ms, 3) : \".\" + padLeftAndRightWithZeros(ms, 3, 7)}`;\n}\nexport function parse(str) {\n const firstDot = str.search(\"\\\\.\");\n const firstColon = str.search(\"\\\\:\");\n if (firstDot === -1 && firstColon === -1) { // There is only a day ex: 4\n const d = parseInt(str, 0);\n if (isNaN(d)) {\n throw new Error(`String '${str}' was not recognized as a valid TimeSpan.`);\n }\n else {\n return create(d, 0, 0, 0, 0);\n }\n }\n if (firstColon > 0) { // process time part\n // WIP: (-?)(((\\d+)\\.)?([0-9]|0[0-9]|1[0-9]|2[0-3]):(\\d+)(:\\d+(\\.\\d{1,7})?)?|\\d+(?:(?!\\.)))\n const r = /^(-?)((\\d+)\\.)?(?:0*)([0-9]|0[0-9]|1[0-9]|2[0-3]):(?:0*)([0-5][0-9]|[0-9])(:(?:0*)([0-5][0-9]|[0-9]))?\\.?(\\d+)?$/.exec(str);\n if (r != null && r[4] != null && r[5] != null) {\n let d = 0;\n let ms = 0;\n let s = 0;\n const sign = r[1] != null && r[1] === \"-\" ? -1 : 1;\n const h = +r[4];\n const m = +r[5];\n if (r[3] != null) {\n d = +r[3];\n }\n if (r[7] != null) {\n s = +r[7];\n }\n if (r[8] != null) {\n // Depending on the number of decimals passed, we need to adapt the numbers\n switch (r[8].length) {\n case 1:\n ms = +r[8] * 100;\n break;\n case 2:\n ms = +r[8] * 10;\n break;\n case 3:\n ms = +r[8];\n break;\n case 4:\n ms = +r[8] / 10;\n break;\n case 5:\n ms = +r[8] / 100;\n break;\n case 6:\n ms = +r[8] / 1000;\n break;\n case 7:\n ms = +r[8] / 10000;\n break;\n default:\n throw new Error(`String '${str}' was not recognized as a valid TimeSpan.`);\n }\n }\n return sign * create(d, h, m, s, ms);\n }\n }\n throw new Error(`String '${str}' was not recognized as a valid TimeSpan.`);\n}\nexport function tryParse(v, defValue) {\n try {\n defValue.contents = parse(v);\n return true;\n }\n catch {\n return false;\n }\n}\n","export default function isBrowser() {\n return typeof window !== \"undefined\" && typeof window.document !== \"undefined\";\n}","namespace Fable.SimpleJson\n\nopen System\nopen Fable.Core\nopen FSharp.Reflection\nopen System.Numerics\nopen System.Collections\nopen System.Collections.Generic\nopen Fable.Core.JsInterop\n\nmodule Node =\n\n /// Converts Base64 string into a byte array in Node environment\n []\n let bytesFromBase64 (value: string) : byte array = jsNative\n\nmodule Convert =\n let internal isBrowser () : bool = importDefault \"./isBrowser.js\"\n\n let insideBrowser = isBrowser()\n\n []\n let private isUndefined (value: obj) : bool = jsNative\n let private isDefined (value: obj) : bool = not (isUndefined value)\n\n /// Uses internal representation of F# maps to determine whether we are using Fable 3 or not\n let usingFable3() =\n #if FABLE_COMPILER_3\n true\n #else\n let map = JS.JSON.parse(JS.JSON.stringify (Map.ofList [ 1, 1; 2, 2 ]))\n let tree = get \"tree\" map\n isDefined tree && isDefined (get \"k\" tree) && isDefined (get \"v\" tree) && isDefined (get \"h\" tree)\n #endif\n\n let isUsingFable3 = usingFable3()\n\n []\n let internal insideWorker : bool = jsNative\n\n []\n let internal setProp o k v = jsNative\n\n type InternalMap =\n | MapEmpty\n | MapOne of string * Json\n | MapNode of string * Json * InternalMap * InternalMap\n\n let rec flattenMap = function\n | MapEmpty -> [ ]\n | MapOne (key, value) -> [ key, value ]\n | MapNode (key, value, left, right) ->\n [ yield! flattenMap left\n yield! flattenMap right\n yield (key, value) ]\n\n let (|KeyValue|_|) key (map: Map) =\n map\n |> Map.tryFind key\n |> Option.map (fun value -> key, value, Map.remove key map)\n\n let (|NonArray|_|) = function\n | JArray _ -> None\n | json -> Some json\n\n let (|MapEmpty|_|) json =\n match json with\n | JString \"MapEmpty\" -> Some json\n | _ -> None\n\n let (|MapKey|_|) = function\n | JNumber number -> Some (string number)\n | JString key -> Some key\n | _ -> None\n\n let (|MapOne|_|) = function\n | JArray [ JString \"MapOne\"; MapKey key; value ] -> Some (key, value)\n | _ -> None\n\n let (|MapNode|_|) = function\n | JArray [ JString \"MapNode\"; MapKey key; value; left; right; JNumber _ ] ->\n Some (key, value, left, right)\n | _ -> None\n\n let rec generateMap json =\n match json with\n | MapEmpty _ -> Some InternalMap.MapEmpty\n | MapOne (key, value) -> Some (InternalMap.MapOne (key, value))\n | MapNode (key, value, left, right) ->\n match generateMap left, generateMap right with\n | Some leftMap, Some rightMap ->\n Some (InternalMap.MapNode(key, value, leftMap, rightMap))\n | _ -> None\n | _ -> None\n\n let rec flatteFable3Map (tree: Map) =\n [\n match Map.tryFind \"k\" tree, Map.tryFind \"v\" tree with\n | Some (JString key), Some value -> (key, value)\n | _ -> ()\n\n match Map.tryFind \"left\" tree with\n | Some (JObject left) -> yield! flatteFable3Map left\n | _ -> ()\n\n match Map.tryFind \"right\" tree with\n | Some (JObject right) -> yield! flatteFable3Map right\n | _ -> ()\n ]\n\n let rec flattenFable3Lists (linkedList: Map) =\n [\n match Map.tryFind \"head\" linkedList with\n | Some value -> value\n | None -> ()\n\n match Map.tryFind \"tail\" linkedList with\n | Some (JObject tail) -> yield! flattenFable3Lists tail\n | _ -> ()\n ]\n\n /// Returns whether the type information resembles a type of a sequence of elements (including tuples)\n let arrayLike = function\n | TypeInfo.Array _ -> true\n | TypeInfo.List _ -> true\n | TypeInfo.Seq _ -> true\n | TypeInfo.Tuple _ -> true\n | TypeInfo.Set _ -> true\n | TypeInfo.ResizeArray _ -> true\n | TypeInfo.HashSet _ -> true\n | _ -> false\n\n let isRecord = function\n | TypeInfo.Record recordType -> true\n | _ -> false\n\n let unionOfRecords = function\n | TypeInfo.Union getCases ->\n let (unionCases, unionType) = getCases()\n unionCases\n |> Seq.forall (fun case -> case.CaseTypes.Length = 1 && isRecord case.CaseTypes.[0])\n | _ ->\n false\n\n let optional = function\n | TypeInfo.Option _ -> true\n | _ -> false\n\n let isQuoted (input: string) =\n input.StartsWith \"\\\"\" && input.EndsWith \"\\\"\"\n\n let betweenQuotes (input: string) = \"\\\"\" + input + \"\\\"\"\n\n let removeQuotes (input: string) =\n input.Substring(1, input.Length - 2)\n\n let rec fromJsonAs (input: Json) (typeInfo: Fable.SimpleJson.TypeInfo) : obj =\n match input, typeInfo with\n | JNumber value, TypeInfo.Float -> unbox value\n | JString value, TypeInfo.Float when value.ToLower() = \"nan\" -> unbox (Double.NaN)\n | JString value, TypeInfo.Float -> unbox (float value)\n | JNumber value, TypeInfo.Float32 -> unbox (float32 value)\n | JString value, TypeInfo.Float32 when value.ToLower() = \"nan\" -> unbox (Double.NaN)\n | JString value, TypeInfo.Float32 -> unbox (float32 value)\n // reading number as int -> floor it\n | JNumber value, TypeInfo.Int32 -> unbox (JS.Math.floor(value))\n | JBool value, TypeInfo.Bool -> unbox value\n // reading int from string -> parse it\n | JString value, TypeInfo.Int32 -> unbox (int value)\n | JString value, TypeInfo.Char -> unbox (char value)\n | JNumber value, TypeInfo.Char -> unbox (char (unbox value))\n // reading into strings\n | JString value, TypeInfo.String -> unbox value\n | JNumber value, TypeInfo.String -> unbox (string value)\n // uri\n | JString value, TypeInfo.Uri -> unbox(Uri(value))\n // decimals\n | JString value, TypeInfo.Decimal -> unbox (decimal value)\n | JNumber value, TypeInfo.Decimal -> unbox (decimal value)\n | JString value, TypeInfo.Short -> unbox (int16 value)\n | JNumber value, TypeInfo.Short -> unbox (int16 value)\n // Unsigned integers\n | JNumber value, TypeInfo.UInt16 -> unbox (uint16 value)\n | JString value, TypeInfo.UInt16 -> unbox (uint16 value)\n | JNumber value, TypeInfo.UInt32 -> unbox (uint32 value)\n | JString value, TypeInfo.UInt32 -> unbox (uint32 value)\n | JNumber value, TypeInfo.UInt64 -> unbox (uint64 value)\n | JString value, TypeInfo.UInt64 -> unbox (uint64 value)\n | JNumber value, TypeInfo.TimeSpan -> unbox (JS.Math.floor value)\n | JString value, TypeInfo.Enum getlElemType ->\n let (underlyingType, originalType) = getlElemType()\n match underlyingType with\n | TypeInfo.Int32 ->\n match Int32.TryParse(value) with\n | true, parsedNumber ->\n unbox parsedNumber\n | false, _ ->\n failwithf \"The value '%s' is not valid for enum of type '%s'\" value originalType.Name\n | TypeInfo.Long ->\n match Int64.TryParse(value) with\n | true, parsedNumber ->\n unbox parsedNumber\n | false, _ ->\n failwithf \"The value '%s' is not valid for enum of type '%s'\" value originalType.Name\n | other ->\n failwithf \"The value '%s' cannot be converted to enum of type '%s'\" value originalType.Name\n | JNumber value, TypeInfo.Enum getElemType ->\n let (_, originalType) = getElemType()\n unbox value\n // byte[] coming from the server is serialized as base64 string\n // convert it back to the actual byte array\n | JString value, TypeInfo.Array getElemType ->\n let elemType = getElemType()\n match elemType with\n | TypeInfo.Byte ->\n if insideWorker || insideBrowser\n then unbox (Convert.FromBase64String value)\n else unbox (Node.bytesFromBase64 value)\n | otherType -> failwithf \"Cannot convert arbitrary string '%s' to %A\" value otherType\n\n // null values for strings are just the null string\n | JNull, TypeInfo.String -> unbox null\n | JNull, TypeInfo.Unit -> unbox ()\n | genericJson, TypeInfo.Object -> unbox (SimpleJson.toPlainObject genericJson)\n // int64 as string -> parse it\n | JString value, TypeInfo.Long -> unbox (int64 value)\n | JString value, TypeInfo.Byte -> unbox (byte value)\n | JNumber value, TypeInfo.Byte -> unbox (byte value)\n | JNumber value, TypeInfo.SByte -> unbox (sbyte value)\n | JString value, TypeInfo.SByte -> unbox (sbyte value)\n // BigInt as string -> parse it\n | JString value, TypeInfo.BigInt -> unbox (BigInteger.Parse value)\n | JNumber value, TypeInfo.BigInt -> unbox (bigint (JS.Math.floor(value)))\n // parse formatted date time\n | JString value, TypeInfo.DateTime -> unbox (DateTime.Parse(value))\n // parse formatted date time offset\n | JString value, TypeInfo.DateTimeOffset -> unbox (DateTimeOffset.Parse(value))\n | JNumber value, TypeInfo.DateTimeOffset ->\n let seconds = int64 (JS.Math.floor(value))\n unbox (DateTimeOffset.FromUnixTimeSeconds seconds)\n#if NET6_0_OR_GREATER\n // TimeOnly, DateOnly\n | JNumber value, TypeInfo.DateOnly -> unbox (DateOnly.FromDayNumber (int value))\n | JString value, TypeInfo.DateOnly -> unbox (DateOnly.FromDayNumber (int value))\n | JString value, TypeInfo.TimeOnly -> unbox (TimeOnly (int64 value))\n#endif\n\n // deserialize union from objects\n // { \"One\": 20 } or {\"One\": [20]} -> One of int\n | JObject values, TypeInfo.Union (getTypes) ->\n let (cases, unionType) = getTypes()\n match Map.toList values with\n | [ caseName, JArray values ] ->\n cases\n |> Array.tryFind (fun case -> case.CaseName = caseName)\n |> function\n | None ->\n let caseNames = Array.map (fun case -> sprintf \" '%s' \" case.CaseName) cases\n let expectedCases = String.concat \", \" caseNames\n failwithf \"Case %s was not valid for type '%s', expected one of the cases [%s]\" caseName unionType.Name expectedCases\n | Some foundCase when Array.length foundCase.CaseTypes = 1 && arrayLike foundCase.CaseTypes.[0] ->\n let deserialized = fromJsonAs (JArray values) foundCase.CaseTypes.[0]\n FSharpValue.MakeUnion(foundCase.Info, [| deserialized |])\n |> unbox\n | Some foundCase when Array.length foundCase.CaseTypes = 1 && optional foundCase.CaseTypes.[0] ->\n let parsedOptional = unbox (fromJsonAs (JArray values) foundCase.CaseTypes.[0])\n FSharpValue.MakeUnion(foundCase.Info, [| parsedOptional |])\n |> unbox\n | Some foundCase ->\n if Array.length foundCase.CaseTypes = 1\n && not (arrayLike foundCase.CaseTypes.[0])\n && Array.length foundCase.CaseTypes <> List.length values\n then failwithf \"Expected case '%s' to have %d argument types but the JSON data only contained %d values\" foundCase.CaseName (Array.length foundCase.CaseTypes) (List.length values)\n let parsedValues =\n Array.ofList values\n |> Array.zip foundCase.CaseTypes\n |> Array.map (fun (valueType, value) -> fromJsonAs value valueType)\n FSharpValue.MakeUnion(foundCase.Info, parsedValues)\n |> unbox\n | [ caseName, NonArray json ] ->\n cases\n |> Array.tryFind (fun case -> case.CaseName = caseName)\n |> function\n | Some ({ CaseName = caseName; Info = caseInfo; CaseTypes = [| caseType |] }) ->\n FSharpValue.MakeUnion(caseInfo, [| unbox fromJsonAs json caseType |])\n |> unbox\n | _ ->\n let caseNames = Array.map (fun case -> sprintf \" '%s' \" case.CaseName) cases\n let expectedCases = String.concat \", \" caseNames\n failwithf \"Case %s was not valid for type '%s', expected one of the cases [%s]\" caseName unionType.Name expectedCases\n\n // Specific for Fable 3\n | otherwise when Map.containsKey \"tag\" values && Map.containsKey \"fields\" values && Map.count values = 2 ->\n match Map.tryFind \"tag\" values, Map.tryFind \"fields\" values with\n | Some (JNumber caseIndex), Some (JArray fieldValues) ->\n let foundCase = cases.[int caseIndex]\n let values =\n fieldValues\n |> Array.ofList\n |> Array.mapi (fun index value -> fromJsonAs value (foundCase.CaseTypes.[index]))\n\n FSharpValue.MakeUnion(foundCase.Info, values)\n | _ ->\n failwithf \"Could not deserialize JSON(%s) into type %s\" (SimpleJson.toString (JObject values)) unionType.FullName\n\n | otherwise when unionOfRecords typeInfo ->\n let discriminators = [\"__typename\"; \"$typename\"; \"$type\" ]\n let foundDiscriminatorKey =\n discriminators\n |> List.tryFind (fun keyword -> Map.containsKey keyword values)\n\n match foundDiscriminatorKey with\n | None ->\n failwithf \"Could not serialize the JSON object into the union of records of type %s because the JSON did not contain a known discriminator. Expected '__typename', '$typeName' or '$type'\" unionType.Name\n | Some discriminatorKey ->\n let discriminatorValueJson = Map.find discriminatorKey values\n match discriminatorValueJson with\n | JString discriminatorValue ->\n let foundUnionCase =\n cases\n |> Seq.tryFind (fun case -> case.CaseName.ToUpperInvariant() = discriminatorValue.ToUpperInvariant())\n\n match foundUnionCase with\n | None ->\n failwithf \"Union of records of type '%s' does not have a matching case '%s'\" unionType.Name discriminatorValue\n | Some case ->\n // Assuming the case types is [recordType]\n // one element of types and the first element is a record\n // as satisfied by the unionOfRecords function\n let record = unbox (fromJsonAs (JObject values) (case.CaseTypes.[0]))\n FSharpValue.MakeUnion(case.Info, [| record |])\n | otherwise ->\n failwithf \"Union of records of type '%s' cannot be deserialized with the value of the discriminator key is not a string to match against a specific union case\" unionType.Name\n | otherwise ->\n // TODO!!! Better error messages here\n let unexpectedJson = JS.JSON.stringify otherwise\n let expectedType = JS.JSON.stringify cases\n failwithf \"Expected JSON:\\n%s\\nto match the type\\n%s\" unexpectedJson expectedType\n | JNull, TypeInfo.Option _ -> unbox None\n | jsonValue, TypeInfo.Option optionalTypeDelayed when jsonValue <> JNull ->\n let optionalType = optionalTypeDelayed()\n let parsedOptional = unbox (fromJsonAs jsonValue optionalType)\n unbox Some parsedOptional\n | JString value, TypeInfo.Guid _ -> unbox (System.Guid.Parse(value))\n // int64 as a number, convert it to int then to in64\n | JNumber value , TypeInfo.Long _ -> unbox int64 (int value)\n // int64 as the internal representation from Long.js\n // then reconstruct it from the high/low (two integers) components\n | JObject dict, TypeInfo.Long _ ->\n let get key = Map.tryFind key dict\n [ get \"low\"; get \"high\"; get \"unsigned\" ]\n |> List.choose id\n |> function\n | [ JNumber low; JNumber high; JBool _ ] ->\n let lowBytes = BitConverter.GetBytes(int low)\n let highBytes = BitConverter.GetBytes(int high)\n let combinedBytes = Array.concat [ lowBytes; highBytes ]\n BitConverter.ToInt64(combinedBytes, 0)\n |> unbox\n | _ -> failwithf \"Unable to construct int64 from object literal { low: int, high: int, unsigned: bool }\"\n // convert a single case string to union\n // \"One\" -> One, here is a special case where the case in quoted inside the string\n | JString caseName, TypeInfo.Union getTypes when isQuoted caseName ->\n let (caseTypes, unionType) = getTypes()\n caseTypes\n |> Array.tryFind (fun case -> case.CaseName = removeQuotes caseName)\n |> function\n | Some ({ Info = caseInfo }) -> unbox (FSharpValue.MakeUnion(caseInfo, [||]))\n | None ->\n let caseNames = Array.map (fun case -> sprintf \" '%s' \" case.CaseName) caseTypes\n let expectedCases = String.concat \", \" caseNames\n failwithf \"Case %s was not valid for type '%s', expected one of the cases [%s]\" caseName unionType.Name expectedCases\n // convert a single case string to union\n // \"One\" -> One\n | JString caseName, TypeInfo.Union getTypes ->\n let (caseTypes, unionType) = getTypes()\n caseTypes\n |> Array.tryFind (fun case -> case.CaseName = caseName)\n |> function\n | Some ({ Info = caseInfo }) -> unbox (FSharpValue.MakeUnion(caseInfo, [||]))\n | None ->\n let caseNames = Array.map (fun case -> sprintf \" '%s' \" case.CaseName) caseTypes\n let expectedCases = String.concat \", \" caseNames\n failwithf \"Case %s was not valid for type '%s', expected one of the cases [%s]\" caseName unionType.Name expectedCases\n | JString serializedRecord, TypeInfo.Record getFields ->\n fromJsonAs (SimpleJson.parse serializedRecord) typeInfo\n // convert unions from arrays\n // [\"One\", 20] -> One of int\n | JArray caseValue, TypeInfo.Union getTypes ->\n let (cases, unionType) = getTypes()\n match caseValue with\n // Union case without values\n | [ JString caseName ] ->\n cases\n |> Array.tryFind (fun case -> case.CaseName = caseName)\n |> function\n | Some ({ CaseName = caseName; Info = caseInfo; CaseTypes = caseInfoTypes }) ->\n // single case without values\n unbox (FSharpValue.MakeUnion(caseInfo, [||]))\n | None ->\n let caseNames = Array.map (fun case -> sprintf \" '%s' \" case.CaseName) cases\n let expectedCases = String.concat \", \" caseNames\n failwithf \"Case '%s' was not valid for type '%s', expected one of the cases [%s]\" caseName unionType.Name expectedCases\n | JString caseName :: values ->\n cases\n |> Array.tryFind (fun case -> case.CaseName = caseName)\n |> function\n | None ->\n let caseNames = Array.map (fun ({ CaseName = name }) -> name) cases\n let expectedCases = String.concat \", \" caseNames\n failwithf \"Case %s was not valid, expected one of [%s]\" caseName expectedCases\n | Some ({ CaseName = foundCaseName; Info = caseInfo; CaseTypes = types }) ->\n if Array.length types <> List.length values\n then failwithf \"The number of union case parameters for '%s' is different\" foundCaseName\n let parsedValues =\n Array.ofList values\n |> Array.zip types\n |> Array.map (fun (valueType, value) -> fromJsonAs value valueType)\n FSharpValue.MakeUnion(caseInfo, parsedValues)\n |> unbox\n | otherwise ->\n let unexpectedJson = JS.JSON.stringify otherwise\n let expectedType = JS.JSON.stringify cases\n failwithf \"Expected JSON:\\n%s\\nto match the type\\n%s\" unexpectedJson expectedType\n // Arrays\n | JArray values, TypeInfo.Array elementTypeDelayed ->\n let elementType = elementTypeDelayed()\n values\n |> List.map (fun value -> unbox (fromJsonAs value elementType))\n |> Array.ofList\n |> unbox\n // Lists\n | JArray values, TypeInfo.List elementTypeDelayed ->\n let elementType = elementTypeDelayed()\n values\n |> List.map (fun value -> unbox (fromJsonAs value elementType))\n |> unbox\n\n // Specific for Fable 3\n | JObject linkedList, TypeInfo.List elementTypeDelayed ->\n let elementType = elementTypeDelayed()\n let flattenedList = flattenFable3Lists linkedList\n flattenedList\n |> List.map (fun value -> unbox (fromJsonAs value elementType))\n |> unbox\n\n | JArray values, TypeInfo.Set elementTypeDelayed ->\n let elementType = elementTypeDelayed()\n values\n |> List.map (fun value -> unbox (fromJsonAs value elementType))\n |> Set.ofList\n |> unbox\n\n | JArray values, TypeInfo.Seq elementTypeDelayed ->\n let elementType = elementTypeDelayed()\n let converted = List.map (fun value -> unbox (fromJsonAs value elementType)) values\n unbox converted\n // Tuples, become just arrays\n | JArray array, TypeInfo.Tuple tupleTypesDelayed ->\n let tupleTypes = tupleTypesDelayed()\n array\n |> Array.ofList\n |> Array.zip tupleTypes\n |> Array.map (fun (jsonType, jsonData) -> fromJsonAs jsonData jsonType)\n |> unbox\n // Records\n | JObject dict, TypeInfo.Record getTypes ->\n let fields, recordType = getTypes()\n // Match the JSON object literal keys with their types\n let recordValues =\n let values = Map.toList dict\n fields\n |> Array.map (fun ({ FieldName = fieldName; FieldType = fieldType }) ->\n values\n |> List.tryFind (fun (key, value) -> fieldName = key)\n |> function\n | Some (key, value) -> unbox (fromJsonAs value fieldType)\n | None ->\n match fieldType with\n // field type is an option of something, just return None\n | TypeInfo.Option _ -> unbox None\n | _ ->\n // field type is required and it doens't exist in the JSON\n // then generate a nice error message\n let dictKeys =\n Map.toList dict\n |> List.map (fst >> sprintf \"'%s'\")\n |> String.concat \", \"\n |> sprintf \"[ %s ]\"\n let recordFields =\n fields\n |> Array.map (fun ({ FieldName = name; FieldType = innerFieldType }) ->\n match innerFieldType with\n | TypeInfo.Option _ -> sprintf \"optional('%s')\" name\n | _ -> sprintf \"required('%s')\" name)\n |> String.concat \", \"\n |> sprintf \"[ %s ]\"\n failwithf \"Could not find the required key '%s' in the JSON object literal with keys %s to match with record type '%s' that has fields %s\" fieldName dictKeys recordType.Name recordFields)\n unbox (FSharpValue.MakeRecord(recordType, recordValues))\n\n | JArray tuples, TypeInfo.Map getTypes ->\n let (keyType, valueType) = getTypes()\n let pairs =\n [ for keyValuePair in tuples do\n let tuple = fromJsonAs keyValuePair (TypeInfo.Tuple (let a = [| keyType; valueType |] in fun () -> a))\n yield tuple ]\n match keyType with\n | TypeInfo.Int32\n | TypeInfo.String\n | TypeInfo.Bool ->\n pairs\n |> unbox<(string * obj) list>\n |> Map.ofList\n |> unbox\n | _ ->\n pairs\n |> unbox<(IStructuralComparable * obj) list>\n |> Map.ofList\n |> unbox\n\n | JArray tuples, TypeInfo.Dictionary getTypes ->\n let (keyType, valueType, originalType) = getTypes()\n let pairs =\n [ for keyValuePair in tuples do\n let tuple = fromJsonAs keyValuePair (TypeInfo.Tuple (fun () -> [| keyType; valueType |]))\n yield tuple ]\n\n let output =\n match keyType with\n | TypeInfo.Union _ -> Dictionary, _>()\n | TypeInfo.Record _ -> Dictionary<{| dummy: int |}, _>() |> unbox\n | _ -> Dictionary() |> unbox\n\n for (key, value) in (unbox<(IStructuralComparable * obj) list> pairs) do output.Add(unbox key, value)\n unbox output\n\n | JObject dict, TypeInfo.Dictionary getTypes ->\n let (keyType, valueType, originalType) = getTypes()\n dict\n |> Map.toList\n |> List.map (fun (key, value) -> fromJsonAs (JString key) keyType, fromJsonAs value valueType )\n |> fun pairs ->\n let output =\n match keyType with\n | TypeInfo.Union _ -> Dictionary, _>()\n | TypeInfo.Record _ -> Dictionary<{| dummy: int |}, _>() |> unbox\n | _ -> Dictionary() |> unbox\n\n for (key, value) in pairs do output.Add(unbox key, value)\n\n unbox output\n\n | JArray items, TypeInfo.HashSet getType ->\n let elemType = getType()\n let hashset =\n match elemType with\n | TypeInfo.Union _ -> HashSet>()\n | TypeInfo.Record _ -> HashSet<{| dummy: int |}>() |> unbox\n | _ -> HashSet() |> unbox\n\n for item in items do\n let deserialized = fromJsonAs item elemType\n hashset.Add(unbox deserialized) |> ignore\n\n unbox hashset\n\n | JObject map, TypeInfo.Map getTypes ->\n let (keyType, valueType) = getTypes()\n // check whether the map is serialized to it's internal representation\n // and convert that to back to a normal map from the data\n match Map.tryFind \"comparer\" map, Map.tryFind \"tree\" map with\n | Some (JObject comparer), Some (JArray tree) when Map.isEmpty comparer ->\n match generateMap (JArray tree) with\n | Some internalMap ->\n let pairs =\n flattenMap internalMap\n |> List.map (fun (key, value) ->\n let nextKey =\n if not (isQuoted key)\n then unbox (fromJsonAs (JString key) keyType)\n else unbox (fromJsonAs (SimpleJson.parseNative key) keyType)\n let nextValue = unbox (fromJsonAs value valueType)\n unbox nextKey, nextValue)\n match keyType with\n | TypeInfo.Int32\n | TypeInfo.String\n | TypeInfo.Bool ->\n pairs\n |> unbox<(string * obj) list>\n |> Map.ofList\n |> unbox\n | _ ->\n pairs\n |> unbox<(IStructuralComparable * obj) list>\n |> Map.ofList\n |> unbox\n\n | None ->\n let inputJson = SimpleJson.toString (JArray tree)\n failwithf \"Could not generate map from JSON\\n %s\" inputJson\n\n // Specific for Fable 3\n | Some (JObject comparer), Some (JObject tree) when Map.isEmpty comparer ->\n let flattenedMap = Map.ofList (flatteFable3Map tree)\n fromJsonAs (JObject flattenedMap) typeInfo\n | _ ->\n // if comparer and tree are not present,\n // assume we are parsing Fable 1 object literal\n // and converting that to map\n let pairs =\n map\n |> Map.toList\n |> List.map (fun (key, value) ->\n let nextKey =\n if not (isQuoted key)\n then\n if Converter.isPrimitive keyType || Converter.enumUnion keyType\n then\n // for primitive type, just read them as string and parse\n unbox (fromJsonAs (JString key) keyType)\n else\n // server-side JSON can still be complex (for complex types)\n // but doesn't have to be quoted, parse again here\n unbox (fromJsonAs (SimpleJson.parseNative key) keyType)\n else\n unbox (fromJsonAs (SimpleJson.parseNative key) keyType)\n let nextValue = unbox (fromJsonAs value valueType)\n unbox nextKey, nextValue)\n\n match keyType with\n | TypeInfo.Int32\n | TypeInfo.String\n | TypeInfo.Bool ->\n pairs\n |> unbox<(string * obj) list>\n |> Map.ofList\n |> unbox\n | _ ->\n pairs\n |> unbox<(IStructuralComparable * obj) list>\n |> Map.ofList\n |> unbox\n | _, TypeInfo.Any getType ->\n let unknownType = getType()\n failwithf \"Cannot convert %s to %s\" (SimpleJson.toString input) unknownType.FullName\n | _ ->\n failwithf \"Cannot convert %s to %s\" (SimpleJson.toString input) (JS.JSON.stringify typeInfo)\n\n let fromJson<'t> json typeInfo =\n unbox<'t> (fromJsonAs json typeInfo)\n\n let quoteText (inputText: string) : string = importDefault \"./quote.js\"\n\n let rec serialize value (typeInfo: TypeInfo) =\n match typeInfo with\n | TypeInfo.String ->\n let content = unbox value\n if isNull content\n then \"null\"\n else quoteText content\n | TypeInfo.Unit -> \"null\"\n | TypeInfo.Float\n | TypeInfo.Float32 ->\n if Double.IsNaN(unbox value)\n then quoteText \"NaN\"\n else string (unbox value)\n | TypeInfo.Char -> quoteText (string (unbox value))\n | TypeInfo.Byte\n | TypeInfo.SByte\n | TypeInfo.UInt16\n | TypeInfo.UInt32\n | TypeInfo.Short\n | TypeInfo.Enum _\n | TypeInfo.TimeSpan\n | TypeInfo.Int32 -> string (unbox value)\n | TypeInfo.UInt64\n | TypeInfo.Long -> betweenQuotes (string (unbox value))\n | TypeInfo.BigInt -> betweenQuotes (string (unbox value))\n | TypeInfo.Decimal -> betweenQuotes (string (unbox value))\n | TypeInfo.Bool -> if unbox value then \"true\" else \"false\"\n | TypeInfo.Guid -> betweenQuotes ((unbox value).ToString())\n | TypeInfo.Uri -> betweenQuotes ((unbox value).ToString())\n | TypeInfo.DateTime -> betweenQuotes ((unbox value).ToString(\"O\"))\n | TypeInfo.DateTimeOffset -> betweenQuotes ((unbox value).ToString(\"O\"))\n#if NET6_0_OR_GREATER\n | TypeInfo.DateOnly -> string (unbox value).DayNumber\n | TypeInfo.TimeOnly -> betweenQuotes (string (unbox value).Ticks)\n#endif\n | TypeInfo.Record getFields ->\n let (fieldTypes, recordType) = getFields()\n let serializedFields =\n fieldTypes\n |> Array.map (fun field ->\n let fieldValue = FSharpValue.GetRecordField(value, field.PropertyInfo)\n sprintf \"\\\"%s\\\": %s\" field.FieldName (serialize fieldValue field.FieldType)\n )\n\n \"{\" + String.concat \", \" serializedFields + \"}\"\n\n | TypeInfo.ResizeArray getElementType ->\n let elementType = getElementType()\n let values =\n value\n |> unbox>\n |> Seq.map (fun element -> serialize element elementType)\n |> String.concat \", \"\n\n \"[\" + values + \"]\"\n\n | TypeInfo.HashSet getElementType ->\n let elementType = getElementType()\n let values =\n value\n |> unbox>\n |> Seq.map (fun element -> serialize element elementType)\n |> String.concat \", \"\n\n \"[\" + values + \"]\"\n\n | TypeInfo.Set getElementType ->\n let elementType = getElementType()\n let values =\n value\n |> unbox>\n |> Seq.map (fun element -> serialize element elementType)\n |> String.concat \", \"\n\n \"[\" + values + \"]\"\n\n | TypeInfo.Array getElementType ->\n let elementType = getElementType()\n let values =\n value\n |> unbox\n |> Array.map (fun element -> serialize element elementType)\n |> String.concat \", \"\n\n \"[\" + values + \"]\"\n\n | TypeInfo.List getElementType ->\n let elementType = getElementType()\n let values =\n value\n |> unbox\n |> List.map (fun element -> serialize element elementType)\n |> String.concat \", \"\n\n \"[\" + values + \"]\"\n\n | TypeInfo.Seq getElementType ->\n let elementType = getElementType()\n let values =\n value\n |> unbox\n |> Seq.toArray\n |> Array.map (fun element -> serialize element elementType)\n |> String.concat \", \"\n\n \"[\" + values + \"]\"\n\n | TypeInfo.Option getElementType ->\n match unbox value with\n | None -> \"null\"\n | Some existingValue -> serialize existingValue (getElementType())\n\n | TypeInfo.Union getCases ->\n let (unionCases, unionType) = getCases()\n let (usedCase, fields) = FSharpValue.GetUnionFields(value, unionType)\n let caseTypes =\n unionCases\n |> Array.find (fun case -> case.CaseName = usedCase.Name)\n |> fun case -> case.CaseTypes\n\n if enumUnion typeInfo || Array.isEmpty caseTypes then\n betweenQuotes usedCase.Name\n elif caseTypes.Length = 1 then\n \"{\" + betweenQuotes usedCase.Name + \": \" + serialize fields.[0] caseTypes.[0] + \"}\"\n else\n let serializedFields =\n caseTypes\n |> Array.mapi (fun index caseType -> serialize fields.[index] caseType)\n |> String.concat \", \"\n\n \"{\" + betweenQuotes usedCase.Name + \": \" + \"[\" + serializedFields + \"] }\"\n\n | TypeInfo.Map getPairTypes ->\n let (keyType, valueType) = getPairTypes()\n\n let serializedValues =\n value\n |> unbox>\n |> Map.toArray\n |> Array.map (fun (key, value) ->\n let serializedKey = serialize key keyType\n let serializedValue = serialize value valueType\n\n if isPrimitive keyType || enumUnion keyType then\n if not (isQuoted serializedKey)\n then (quoteText serializedKey) + \": \" + serializedValue\n else serializedKey + \": \" + serializedValue\n else\n \"[\" + serializedKey + \", \" + serializedValue + \"]\"\n )\n |> String.concat \", \"\n\n if isPrimitive keyType || enumUnion keyType\n then \"{\" + serializedValues + \"}\"\n else \"[\" + serializedValues + \"]\"\n\n | TypeInfo.Dictionary getPairTypes ->\n let (keyType, valueType, originalType) = getPairTypes()\n let serializedValues =\n value\n |> unbox>\n |> Seq.map (fun pair ->\n let (key, value) = pair.Key, pair.Value\n let serializedKey = serialize key keyType\n let serializedValue = serialize value valueType\n\n if isPrimitive keyType || enumUnion keyType then\n if not (isQuoted serializedKey)\n then (betweenQuotes serializedKey) + \": \" + serializedValue\n else serializedKey + \": \" + serializedValue\n else\n \"[\" + serializedKey + \", \" + serializedValue + \"]\"\n )\n |> String.concat \", \"\n\n if isPrimitive keyType || enumUnion keyType\n then \"{\" + serializedValues + \"}\"\n else \"[\" + serializedValues + \"]\"\n\n | TypeInfo.Tuple getTupleTypes ->\n let tupleTypes = getTupleTypes()\n\n if tupleTypes.Length = 1 then\n \"[\" + serialize value tupleTypes.[0] + \"]\"\n else\n let serializedValues =\n value\n |> unbox\n |> Array.mapi (fun index element -> serialize element tupleTypes.[index])\n |> String.concat \", \"\n\n \"[\" + serializedValues + \"]\"\n\n | TypeInfo.Object ->\n SimpleJson.stringify value\n\n | TypeInfo.Any getType ->\n // fallback to low-level serialization\n SimpleJson.stringify value\n\n | _ ->\n \"null\"\n\n[]\nmodule ConverterExtensions =\n type Json with\n\n /// \n /// Serialized the input value object into JSON, uses built-in JSON.stringify and should be used with Fable 2.x or earlier\n /// \n static member stringify (value: obj) : string =\n if Convert.isUsingFable3\n then JS.console.warn(\"It looks like you using the function Json.stringify from Fable.SimpleJson while also using Fable 3 (nagareyama). Please use Json.serialize instead which supports both Fable 3 and Fable 2.x\")\n SimpleJson.stringify value\n\n /// \n /// Serialized the input value into JSON using Reflection. Compatible with Fable 2.x and Fable 3 (codename: nagareyama)\n /// \n static member inline serialize<'t> (value: 't) : string =\n let typeInfo = TypeInfo.createFrom<'t>()\n Convert.serialize value typeInfo\n\n /// Parses the input string as JSON and tries to convert it as the given type argument\n static member inline parseAs<'t> (input: string) : 't =\n match SimpleJson.tryParse input with\n | None -> failwith \"Couldn't parse the input JSON string because it seems to be invalid\"\n | Some inputJson ->\n let typeInfo = TypeInfo.createFrom<'t> ()\n Convert.fromJson<'t> inputJson typeInfo\n\n /// Parses the input string as JSON using native parsing and tries to convert it as the given type argument\n static member inline parseNativeAs<'t> (input: string) : 't =\n let inputJson = SimpleJson.parseNative input\n let typeInfo = TypeInfo.createFrom<'t> ()\n Convert.fromJson<'t> inputJson typeInfo\n\n /// Tries to parse the input string as JSON and tries to convert it as the given type argument, returing a (hopefully) useful error message when it fails\n static member inline tryParseAs<'t> (input: string) : Result<'t, string> =\n try Ok (Json.parseAs<'t> input)\n with | ex -> Error ex.Message\n\n /// Tries to parse the input string as JSON using native parsing and tries to convert it as the given type argument\n static member inline tryParseNativeAs<'t> (input: string) : Result<'t, string> =\n try Ok (Json.parseNativeAs<'t> input)\n with | ex -> Error ex.Message\n\n /// Tries to convert parsed JSON object as the given type parameter argument, this method is used when you want to apply transformations to the JSON object before parsing\n static member inline convertFromJsonAs<'t> (input: Json) : 't =\n let typeInfo = TypeInfo.createFrom<'t> ()\n Convert.fromJson<'t> input typeInfo\n\n /// Tries to convert parsed JSON object as the given type parameter argument, this method is used when you want to apply transformations to the JSON object before parsing\n static member inline tryConvertFromJsonAs<'t> (input: Json) : Result<'t, string> =\n try Ok (Json.convertFromJsonAs<'t> input)\n with | ex -> Error ex.Message\n","import { hours, minutes, seconds, milliseconds } from \"./TimeSpan.js\";\nimport { padWithZeros } from \"./Util.js\";\nconst millisecondsPerDay = 86400000;\nexport function create(h = 0, m = 0, s = 0, ms = 0) {\n if (h < 0 || m < 0 || s < 0 || ms < 0)\n throw new Error(\"The parameters describe an unrepresentable TimeOnly.\");\n return h * 3600000 + m * 60000 + s * 1000 + ms;\n}\nexport function fromTicks(ticks) {\n return Number(BigInt(ticks) / 10000n);\n}\nexport function fromTimeSpan(timeSpan) {\n if (timeSpan < 0 || timeSpan >= millisecondsPerDay)\n throw new Error(\"The TimeSpan describes an unrepresentable TimeOnly.\");\n return timeSpan;\n}\nexport function fromDateTime(d) {\n return d.kind === 1 /* DateKind.UTC */\n ? create(d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds())\n : create(d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n}\nexport function maxValue() {\n // This is \"23:59:59.999\"\n return millisecondsPerDay - 1;\n}\nexport function add(t, ts, wrappedDays) {\n if (wrappedDays === undefined) {\n const t2 = (t + ts) % millisecondsPerDay;\n return t2 < 0 ? millisecondsPerDay + t2 : t2;\n }\n wrappedDays.contents = ts / millisecondsPerDay;\n let newMs = t + ts % millisecondsPerDay;\n if (newMs < 0) {\n wrappedDays.contents--;\n newMs += millisecondsPerDay;\n }\n else {\n if (newMs >= millisecondsPerDay) {\n wrappedDays.contents++;\n newMs -= millisecondsPerDay;\n }\n }\n return newMs;\n}\nexport function addHours(t, h) {\n return add(t, h * 3600000);\n}\nexport function addMinutes(t, m) {\n return add(t, m * 60000);\n}\nexport function isBetween(t, start, end) {\n return start <= end\n ? (start <= t && end > t)\n : (start <= t || end > t);\n}\nexport function toString(t, format = \"t\", _provider) {\n if ([\"r\", \"R\", \"o\", \"O\", \"t\", \"T\"].indexOf(format) === -1) {\n throw new Error(\"Custom formats are not supported\");\n }\n const base = `${padWithZeros(hours(t), 2)}:${padWithZeros(minutes(t), 2)}`;\n if (format === \"t\")\n return base;\n const s = padWithZeros(seconds(t), 2);\n // We're limited to millisecond precision, so the last 4 digits will always be 0\n return `${base}${format === \"o\" || format === \"O\" ? `:${s}.${padWithZeros(milliseconds(t), 3)}0000` : `:${s}`}`;\n}\nexport function parse(str) {\n // Allowed format types:\n // hh:mm\n // hh:mm:ss\n // hh:mm:ss.fffffff\n const r = /^\\s*([0-1]?\\d|2[0-3])\\s*:\\s*([0-5]?\\d)(\\s*:\\s*([0-5]?\\d)(\\.(\\d+))?)?\\s*$/.exec(str);\n if (r != null && r[1] != null && r[2] != null) {\n let ms = 0;\n let s = 0;\n const h = +r[1];\n const m = +r[2];\n if (r[4] != null) {\n s = +r[4];\n }\n if (r[6] != null) {\n // Depending on the number of decimals passed, we need to adapt the numbers\n switch (r[6].length) {\n case 1:\n ms = +r[6] * 100;\n break;\n case 2:\n ms = +r[6] * 10;\n break;\n case 3:\n ms = +r[6];\n break;\n case 4:\n ms = +r[6] / 10;\n break;\n case 5:\n ms = +r[6] / 100;\n break;\n case 6:\n ms = +r[6] / 1000;\n break;\n default:\n ms = +r[6].substring(0, 7) / 10000;\n break;\n }\n }\n return create(h, m, s, Math.trunc(ms));\n }\n throw new Error(`String '${str}' was not recognized as a valid TimeOnly.`);\n}\nexport function tryParse(v, defValue) {\n try {\n defValue.contents = parse(v);\n return true;\n }\n catch {\n return false;\n }\n}\nexport function op_Subtraction(left, right) {\n return add(left, -right);\n}\n","export default function quote(inputText) {\n var escapable = /[\\\\\\\"\\x00-\\x1f\\x7f-\\x9f\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n var meta = {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\"': '\\\\\"',\n '\\\\': '\\\\\\\\'\n }\n\n escapable.lastIndex = 0;\n return escapable.test(inputText) ?\n '\"' + inputText.replace(escapable, function (a) {\n var c = meta[a];\n return typeof c === 'string' ? c :\n '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n }) + '\"' :\n '\"' + inputText + '\"';\n}","namespace Fable.Remoting.Client\n\nopen System\nopen Fable.Core\nopen Fable.SimpleJson\nopen Browser.Types\n\nmodule internal Blob =\n /// Creates a Blob from the given input string\n []\n let fromBinaryEncodedText (value: byte[]) : Blob = jsNative\n\n /// Asynchronously reads the blob data content as string\n let readBlobAsText (blob: Blob) : Async =\n Async.FromContinuations <| fun (resolve, _, _) ->\n let reader = InternalUtilities.createFileReader()\n reader.onload <- fun _ ->\n if reader.readyState = FileReaderState.DONE\n then resolve (unbox reader.result)\n\n reader.readAsText(blob)\n\nmodule Proxy =\n let combineRouteWithBaseUrl route (baseUrl: string option) =\n match baseUrl with\n | None -> route\n | Some url -> sprintf \"%s%s\" (url.TrimEnd('/')) route\n\n let isByteArray = function\n | TypeInfo.Array getElemType ->\n match getElemType() with\n | TypeInfo.Byte -> true\n | otherwise -> false\n | otherwise -> false\n\n let isAsyncOfByteArray = function\n | TypeInfo.Async getAsyncType ->\n match getAsyncType() with\n | TypeInfo.Array getElemType ->\n match getElemType() with\n | TypeInfo.Byte -> true\n | otherwise -> false\n | otherwise -> false\n | otherwise -> false\n\n let rec getReturnType typ =\n if Reflection.FSharpType.IsFunction typ then\n let _, res = Reflection.FSharpType.GetFunctionElements typ\n getReturnType res\n elif typ.IsGenericType then\n typ.GetGenericArguments () |> Array.head\n else\n typ\n\n let proxyFetch options typeName (func: RecordField) fieldType =\n let funcArgs : (TypeInfo [ ]) =\n match func.FieldType with\n | TypeInfo.Async inner -> [| func.FieldType |]\n | TypeInfo.Promise inner -> [| func.FieldType |]\n | TypeInfo.Func getArgs -> getArgs()\n | _ -> failwithf \"Field %s does not have a valid definiton\" func.FieldName\n\n let argumentCount = (Array.length funcArgs) - 1\n let returnTypeAsync = Array.last funcArgs\n\n let binaryInput =\n match func.FieldType with\n | TypeInfo.Func getArgs ->\n match getArgs() with\n | [| input; output |] -> isByteArray input\n | otherwise -> false\n | otherwise -> false\n\n let route = options.RouteBuilder typeName func.FieldName\n let url = combineRouteWithBaseUrl route options.BaseUrl\n let funcNeedParameters =\n match funcArgs with\n | [| TypeInfo.Async _ |] -> false\n | [| TypeInfo.Promise _ |] -> false\n | [| TypeInfo.Unit; TypeInfo.Async _ |] -> false\n | otherwise -> true\n\n let contentType =\n if binaryInput\n then \"application/octet-stream\"\n else \"application/json; charset=utf-8\"\n\n let inputArgumentTypes = Array.take argumentCount funcArgs\n\n let headers = [\n yield \"Content-Type\", contentType\n yield \"x-remoting-proxy\", \"true\"\n yield! options.CustomHeaders\n match options.Authorization with\n | Some authToken -> yield \"Authorization\", authToken\n | None -> () ]\n\n let executeRequest =\n if options.CustomResponseSerialization.IsSome || isAsyncOfByteArray returnTypeAsync then\n let onOk =\n match options.CustomResponseSerialization with\n | Some serializer ->\n let returnType = getReturnType fieldType\n fun response -> serializer response returnType\n | _ -> box\n\n fun requestBody -> async {\n // read as arraybuffer and deserialize\n let! (response, statusCode) =\n if funcNeedParameters then\n Http.post url\n |> Http.withBody requestBody\n |> Http.withHeaders headers\n |> Http.withCredentials options.WithCredentials\n |> Http.sendAndReadBinary\n else\n Http.get url\n |> Http.withHeaders headers\n |> Http.withCredentials options.WithCredentials\n |> Http.sendAndReadBinary\n\n match statusCode with\n | 200 ->\n return onOk response\n | n ->\n let responseAsBlob = Blob.fromBinaryEncodedText response\n let! responseText = Blob.readBlobAsText responseAsBlob\n let response = { StatusCode = statusCode; ResponseBody = responseText }\n let errorMsg = if n = 500 then sprintf \"Internal server error (500) while making request to %s\" url else sprintf \"Http error (%d) while making request to %s\" n url\n return! raise (ProxyRequestException(response, errorMsg, response.ResponseBody))\n }\n else\n let returnType =\n match returnTypeAsync with\n | TypeInfo.Async getAsyncTypeArgument -> getAsyncTypeArgument()\n | TypeInfo.Promise getPromiseTypeArgument -> getPromiseTypeArgument()\n | TypeInfo.Any getReturnType ->\n let t = getReturnType()\n if t.FullName.StartsWith \"System.Threading.Tasks.Task`1\" then\n t.GetGenericArguments().[0] |> createTypeInfo\n else\n failwithf \"Expected field %s to have a return type of Async<'t> or Task<'t>\" func.FieldName\n | _ -> failwithf \"Expected field %s to have a return type of Async<'t> or Task<'t>\" func.FieldName\n\n fun requestBody -> async {\n // make plain RPC request and let it go through the deserialization pipeline\n let! response =\n if funcNeedParameters then\n Http.post url\n |> Http.withBody requestBody\n |> Http.withHeaders headers\n |> Http.withCredentials options.WithCredentials\n |> Http.send\n else\n Http.get url\n |> Http.withHeaders headers\n |> Http.withCredentials options.WithCredentials\n |> Http.send\n\n match response.StatusCode with\n | 200 ->\n let parsedJson = SimpleJson.parseNative response.ResponseBody\n return Convert.fromJsonAs parsedJson returnType\n | 500 -> return! raise (ProxyRequestException(response, sprintf \"Internal server error (500) while making request to %s\" url, response.ResponseBody))\n | n -> return! raise (ProxyRequestException(response, sprintf \"Http error (%d) from server occured while making request to %s\" n url, response.ResponseBody))\n }\n\n fun arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 ->\n let inputArguments =\n if funcNeedParameters\n then Array.take argumentCount [| box arg0;box arg1;box arg2;box arg3; box arg4; box arg5; box arg6; box arg7 |]\n else [| |]\n\n let requestBody =\n if binaryInput then\n RequestBody.Binary (unbox arg0)\n else\n match inputArgumentTypes.Length with\n | 1 when not (Convert.arrayLike inputArgumentTypes.[0]) ->\n let typeInfo = TypeInfo.Tuple(fun _ -> inputArgumentTypes)\n let requestBodyJson = Convert.serialize inputArguments.[0] typeInfo\n RequestBody.Json requestBodyJson\n | 1 ->\n // for array-like types, use an explicit array surranding the input array argument\n let requestBodyJson = Convert.serialize [| inputArguments.[0] |] (TypeInfo.Array (fun _ -> inputArgumentTypes.[0]))\n RequestBody.Json requestBodyJson\n | n ->\n let typeInfo = TypeInfo.Tuple(fun _ -> inputArgumentTypes)\n let requestBodyJson = Convert.serialize inputArguments typeInfo\n RequestBody.Json requestBodyJson\n\n executeRequest requestBody\n","namespace Fable.Remoting.Client\n\nopen Fable.Core\nopen Fable.SimpleJson\nopen System\nopen Microsoft.FSharp.Reflection\nopen Fable.Remoting\n\nmodule Remoting =\n /// Starts with default configuration for building a proxy\n let createApi() = {\n CustomHeaders = [ ]\n BaseUrl = None\n Authorization = None\n WithCredentials = false\n RouteBuilder = sprintf (\"/%s/%s\")\n CustomResponseSerialization = None\n }\n\n /// Defines how routes are built using the type name and method name. By default, the generated routes are of the form `/typeName/methodName`.\n let withRouteBuilder builder (options: RemoteBuilderOptions) =\n { options with RouteBuilder = builder }\n\n /// Sets the base url for the request. Useful if you are making cross-domain requests\n let withBaseUrl url (options: RemoteBuilderOptions) =\n { options with BaseUrl = Some url }\n\n /// Adds custom headers to each request of the proxy\n let withCustomHeader headers (options: RemoteBuilderOptions) =\n { options with CustomHeaders = headers }\n\n /// Sets the authorization header of every request from the proxy\n let withAuthorizationHeader token (options: RemoteBuilderOptions) =\n { options with Authorization = Some token }\n\n /// Sets the withCredentials option on the XHR request, which is useful for CORS scenarios\n let withCredentials withCredentials (options: RemoteBuilderOptions) =\n { options with WithCredentials = withCredentials }\n\n /// Specifies that the API uses binary serialization for responses\n let withBinarySerialization (options: RemoteBuilderOptions) =\n let serializer response returnType = MsgPack.Read.Reader(response).Read returnType\n { options with CustomResponseSerialization = Some serializer }\n\ntype Remoting() =\n /// For internal library use only.\n static member buildProxy(options: RemoteBuilderOptions, resolvedType: Type) =\n let schemaType = createTypeInfo resolvedType\n match schemaType with\n | TypeInfo.Record getFields ->\n let (fields, recordType) = getFields()\n let fieldTypes = Reflection.FSharpType.GetRecordFields recordType |> Array.map (fun prop -> prop.Name, prop.PropertyType)\n let recordFields = [|\n for field in fields do\n let normalize n =\n let fieldType = fieldTypes |> Array.pick (fun (name, typ) -> if name = field.FieldName then Some typ else None)\n let fn = Proxy.proxyFetch options recordType.Name field fieldType\n match n with\n | 0 -> box (fn null null null null null null null null)\n | 1 -> box (fun a ->\n fn a null null null null null null null)\n | 2 ->\n let proxyF a b = fn a b null null null null null null\n unbox (System.Func<_,_,_> proxyF)\n | 3 ->\n let proxyF a b c = fn a b c null null null null null\n unbox (System.Func<_,_,_,_> proxyF)\n | 4 ->\n let proxyF a b c d = fn a b c d null null null null\n unbox (System.Func<_,_,_,_,_> proxyF)\n | 5 ->\n let proxyF a b c d e = fn a b c d e null null null\n unbox (System.Func<_,_,_,_,_,_> proxyF)\n | 6 ->\n let proxyF a b c d e f = fn a b c d e f null null\n unbox (System.Func<_,_,_,_,_,_,_> proxyF)\n | 7 ->\n let proxyF a b c d e f g = fn a b c d e f g null\n unbox (System.Func<_,_,_,_,_,_,_,_> proxyF)\n | 8 ->\n let proxyF a b c d e f g h = fn a b c d e f g h\n unbox (System.Func<_,_,_,_,_,_,_,_,_> proxyF)\n | _ ->\n failwithf \"Cannot generate proxy function for %s. Only up to 8 arguments are supported. Consider using a record type as input\" field.FieldName\n\n let argumentCount =\n match field.FieldType with\n | TypeInfo.Async _ -> 0\n | TypeInfo.Promise _ -> 0\n | TypeInfo.Func getArgs -> Array.length (getArgs()) - 1\n | _ -> 0\n\n normalize argumentCount\n |]\n\n let proxy = FSharpValue.MakeRecord(recordType, recordFields)\n unbox proxy\n | _ ->\n failwithf \"Cannot build proxy. Exepected type %s to be a valid protocol definition which is a record of functions\" resolvedType.FullName\n\n static member inline buildProxy<'t>(options: RemoteBuilderOptions) : 't =\n Remoting.buildProxy(options, typeof<'t>)\n","namespace Shared\n\n[]\nmodule PrimitiveTypes =\n open System\n open Shared.Validation\n open Ulid\n\n type Email =\n private\n | Email of string\n member this.Value = this |> fun (Email value) -> value\n\n static member New(email) =\n match email with\n | \"\" -> [ ValidationError \"email is empty\" ] |> AggregateError |> Error\n | null -> [ ValidationError \"email is empty\"] |> AggregateError |> Error\n | email when not (email.Contains(\"@\")) ->\n [ ValidationError \"invalid email format\" ] |> AggregateError |> Error\n | email when email.Contains(\"@\") && not ((email.Split('@')[1]).Contains(\".\")) ->\n [ ValidationError \"invalid email format\" ] |> AggregateError |> Error\n | _ -> Ok(Email email)\n\n static member Parse(email) =\n match email with\n | null\n | \"\" -> Ok None\n | _ ->\n let parsedEmail = Email.New email\n match parsedEmail with\n | Error err -> err |> Error\n | Ok x -> Some x |> Ok\n\n type Phone =\n private\n | Phone of string\n member this.Value = this |> fun (Phone value) -> value\n\n static member New(phone) =\n match phone with\n | null\n | \"\" -> [ ValidationError \"phone is empty\" ] |> AggregateError |> Error\n | _ -> Ok(Phone phone)\n\n static member Parse(phone) =\n match phone with\n | null\n | \"\" -> Ok None\n | _ ->\n let parsedPhone = Phone.New phone\n match parsedPhone with\n | Error err -> err |> Error\n | Ok x -> Some x |> Ok\n\n type SessionId =\n private\n | SessionId of string\n member this.Value =\n this |> fun (SessionId value) -> value\n\n static member Create () =\n SessionId (Ulid.New.ToString())\n\n static member New id =\n match id with\n | null\n | \"\" -> [ ValidationError \"id is empty\" ] |> AggregateError |> Error\n | _ -> Ok(SessionId id)\n\n type UserId =\n private\n | UserId of string\n member this.Value = this |> fun (UserId value) -> value\n\n static member Create () =\n UserId (Ulid.New.ToString())\n\n static member New(id) =\n match id with\n | null\n | \"\" -> [ ValidationError \"user id is empty\" ] |> AggregateError |> Error\n | _ -> Ok(UserId id)\n\n type Date =\n private\n | Date of DateTime\n member this.Value = this |> fun (Date value) -> value.Date\n member this.FormattedValue (format : string) = this |> fun (Date value) -> value.Date.ToString(format)\n\n static member New(date: string) =\n match date with\n | null\n | \"\" -> [ ValidationError \"date is empty\" ] |> AggregateError |> Error\n | _ ->\n let success, parsedDate = DateTime.TryParse(date)\n match success with\n | true -> Ok (Date parsedDate)\n | false -> [ ValidationError \"Invalid date format\"] |> AggregateError |> Error\n\n type Address =\n private\n | Address of string\n member this.Value =\n let (Address value) = this in value\n\n static member New(address) =\n match address with\n | null\n | \"\" -> [ ValidationError \"address is empty\" ] |> AggregateError |> Error\n | _ -> Address address |> Ok\n\n static member NewOptional(address) =\n match address with\n | null\n | \"\" -> None |> Ok\n | _ -> Address address |> Some |> Ok\n\n type Name =\n private\n | Name of string\n member this.Value =\n let (Name value) = this in value\n\n static member New(name) =\n match name with\n | null\n | \"\" -> [ ValidationError \"name is empty\" ] |> AggregateError |> Error\n | _ -> Name name |> Ok\n\n let toISO (date: DateTime) =\n date.ToString(\"yyyy-MM-dd\")\n\n type CalendarMonth =\n { Month : int \n Year : int }\n module CalendarMonth = \n let create month year : CalendarMonth =\n {\n Month = month\n Year = year\n }\n\n let current : CalendarMonth = \n let today = DateTime.Today \n {\n Month = today.Month\n Year = today.Year\n }\n\n let prev (current : CalendarMonth) : CalendarMonth =\n let prevMonth = (new DateTime(current.Year, current.Month, 1)).AddMonths(-1)\n {\n Month = prevMonth.Month\n Year = prevMonth.Year\n }\n\n let next (current : CalendarMonth) : CalendarMonth =\n let nextMonth = (new DateTime(current.Year, current.Month, 1)).AddMonths(1)\n {\n Month = nextMonth.Month\n Year = nextMonth.Year\n }\n\n let numberOfDays (m : CalendarMonth) : int = \n DateTime.DaysInMonth(m.Year, m.Month)\n\n let firstDay (m : CalendarMonth) =\n let date = new DateTime(m.Year, m.Month, 1)\n let day = int date.DayOfWeek\n (day - 1) % 7 // -1 because week does not start from Sunday - instead it starts from Monday\n\n let firstDate (m : CalendarMonth) : DateTime =\n new DateTime (m.Year, m.Month, 1)\n\n let lastDate (m : CalendarMonth) : DateTime =\n new DateTime (m.Year, m.Month, numberOfDays m)\n\n type CalendarInterval =\n {\n From: DateTime\n To: DateTime\n }\n \n module CalendarInterval =\n let monthSurroundedWithWeeks (month: CalendarMonth) : CalendarInterval =\n {\n From = (CalendarMonth.firstDate month).AddDays(-7)\n To = (CalendarMonth.lastDate month).AddDays(7)\n }\n\n module DateRange = \n type T = //private\n { \n StartDate: DateTime option\n EndDate: DateTime option\n }\n\n type Error =\n | StartDateAfterEndDate\n | InvalidDateFormat\n\n let empty : T =\n {\n StartDate = None\n EndDate = None\n }\n\n let start (range : T) = range.StartDate\n\n let ``end`` (range : T) = range.EndDate\n\n let startValue (range : T) =\n match range.StartDate with\n | None -> \"\"\n | Some date -> date.ToString(\"s\")\n\n let endValue (range : T) =\n match range.EndDate with\n | None -> \"\"\n | Some date -> date.ToString(\"s\")\n\n let setStart (range : T) (startDate : string) : Result =\n match startDate with\n | \"\" -> Ok { range with StartDate = None }\n | _ ->\n let (success, startDate') = DateTime.TryParse startDate\n match (success, startDate') with\n | false, _ -> InvalidDateFormat |> Error\n | true, _ ->\n match range.EndDate with\n | Some endDate when startDate' > endDate -> StartDateAfterEndDate |> Error\n | _ -> Ok { range with StartDate = Some startDate' }\n\n let setEnd (range : T) (endDate : string) : Result =\n match endDate with\n | \"\" -> Ok { range with EndDate = None }\n | _ ->\n let (success, endDate') = DateTime.TryParse endDate\n match (success, endDate') with\n | false, _ -> InvalidDateFormat |> Error\n | true, _ ->\n match range.StartDate with\n | Some startDate when startDate > endDate' -> StartDateAfterEndDate |> Error\n | _ -> Ok { range with EndDate = Some endDate' }\n\n let isValid (range: T) : bool =\n match (range.StartDate, range.EndDate) with\n | Some s, Some e when s <= e -> true\n | _, _ -> false\n\n let (|Valid|_|) (range: T) =\n if isValid range then Some range else None","module IAuthApi\n\nopen Shared.Validation\nopen Auth\n\ntype LogoutRequest = { SessionId: string }\ntype MagicLinkRequest = { Email: string }\ntype ChallengeRequest = { Challenge: string }\n\ntype IAuthApi =\n { logout: LogoutRequest -> Async\n sendMagicLink: MagicLinkRequest -> Async>\n challenge: ChallengeRequest -> Async> }\n\nmodule IAuthApiRoute =\n let builder typeName methodName = $\"/api/{typeName}/{methodName}\"\n","namespace Elmish\n\n\n[]\n[]\nmodule internal Option =\n\n let tuple a b =\n match (a,b) with\n | Some a, Some b -> Some (a,b)\n | _ -> None\n\n let ofFunc f arg =\n try\n Some (f arg)\n with _ ->\n None","(** UrlParser\n------\nThis port of the Elm library helps you turn URLs into nicely structured data.\n*)\n\nmodule Elmish.UrlParser\n\n\n(**\n#### Types\n*)\n\ntype State<'v> =\n { visited : string list\n unvisited : string list\n args : Map\n value : 'v }\n\n[]\n[]\nmodule internal State =\n let mkState visited unvisited args value =\n { visited = visited\n unvisited = unvisited\n args = args\n value = value }\n\n let map f { visited = visited; unvisited = unvisited; args = args; value = value } =\n { visited = visited\n unvisited = unvisited\n args = args\n value = f value }\n\n\n/// Turn URLs like `/blog/42/cat-herding-techniques` into nice data.\ntype Parser<'a,'b> = State<'a> -> State<'b> list\n\n\n(**\n#### Parse segments\nCreate a custom path segment parser. You can use it to define something like “only CSS files” like this:\n```\n let css =\n custom \"CSS_FILE\" <| fun segment ->\n if String.EndsWith \".css\" then\n Ok segment\n else\n Error \"Does not end with .css\"\n```\n*)\nlet custom tipe (stringToSomething: string->Result<_,_>) : Parser<_,_> =\n let inner { visited = visited; unvisited = unvisited; args = args; value = value } =\n match unvisited with\n | [] -> []\n | next :: rest ->\n match stringToSomething next with\n | Ok nextValue ->\n [ State.mkState (next :: visited) rest args (value nextValue) ]\n\n | Error msg ->\n []\n inner\n\n\n(** Parse a segment of the path as a `string`.\n```\n parse str location\n```\n
\n    /alice/  ==>  Some \"alice\"\n    /bob     ==>  Some \"bob\"\n    /42/     ==>  Some \"42\"\n
\n*)\nlet str state =\n custom \"string\" Ok state\n\n\n(** Parse a segment of the path as an `int`.\n```\n parse i32 location\n```\n
\n    /alice/  ==>  None\n    /bob     ==>  None\n    /42/     ==>  Some 42\n
\n*)\nlet i32 state =\n custom \"i32\" (System.Int32.TryParse >> function true, value -> Ok value | _ -> Error \"Can't parse int\" ) state\n\n\n(** Parse a segment of the path if it matches a given string.\n```\n s \"blog\" // can parse /blog/\n // but not /glob/ or /42/ or anything else\n```\n*)\nlet s str : Parser<_,_> =\n let inner { visited = visited; unvisited = unvisited; args = args; value = value } =\n match unvisited with\n | [] -> []\n | next :: rest ->\n if next = str then\n [ State.mkState (next :: visited) rest args value ]\n else\n []\n inner\n\n(** Parse all the remaining unvisited segments\n```\n remaining // can parse /blog/, /blog/article/32, / or anything else\n```\n*)\nlet remaining: Parser<(string -> 'a), 'a> = (fun s ->\n [ State.mkState (List.concat [s.visited; s.unvisited]) [] s.args (s.value (System.String.Join(\"/\", s.unvisited))) ])\n\n(**\n#### Combining parsers\nParse a path with multiple segments.\n\n```\n parse (s \"blog\" i32) location\n```\n
\n    /blog/35/  ==>  Some 35\n    /blog/42   ==>  Some 42\n    /blog/     ==>  None\n    /42/       ==>  None\n
\n```\n parse (s \"search\" str) location\n```\n
\n    /search/cats/  ==>  Some \"cats\"\n    /search/frog   ==>  Some \"frog\"\n    /search/       ==>  None\n    /cats/         ==>  None\n
\n```\n parse (s \"search\" remaining) location\n```\n
\n    /search/cats/           ==>  Some \"cats\"\n    /search/cats/and/dogs   ==>  Some \"cats/and/dogs\"\n    /search/                ==>  Some \"\"\n    /cats/                  ==>  None\n
\n*)\nlet inline () (parseBefore: Parser<_,_>) (parseAfter: Parser<_,_>) =\n fun state ->\n List.collect parseAfter (parseBefore state)\n\n\n(** Transform a path parser.\n```\n type Comment = { author : string; id : int }\n rawComment =\n s \"user\" str s \"comments\" i32\n comment =\n map (fun a id -> { author = a; id = id }) rawComment\n parse comment location\n```\n
\n    /user/bob/comments/42  ==>  Some { author = \"bob\"; id = 42 }\n    /user/tom/comments/35  ==>  Some { author = \"tom\"; id = 35 }\n    /user/sam/             ==>  None\n
\n*)\nlet map (subValue: 'a) (parse: Parser<'a,'b>) : Parser<'b->'c,'c> =\n let inner { visited = visited; unvisited = unvisited; args = args; value = value } =\n List.map (State.map value)\n <| parse { visited = visited\n unvisited = unvisited\n args = args\n value = subValue }\n inner\n\n\n\n(** Try a bunch of different path parsers.\n```\n type Route\n = Search of string\n | Blog of int\n | User of string\n | Comment of string*int\n route =\n oneOf\n [ map Search (s \"search\" str)\n map Blog (s \"blog\" i32)\n map User (s \"user\" str)\n map (fun u c -> Comment (u,c)) (s \"user\" str \"comments\" i32) ]\n parse route location\n```\n
\n    /search/cats           ==>  Some (Search \"cats\")\n    /search/               ==>  None\n    /blog/42               ==>  Some (Blog 42)\n    /blog/cats             ==>  None\n    /user/sam/             ==>  Some (User \"sam\")\n    /user/bob/comments/42  ==>  Some (Comment \"bob\" 42)\n    /user/tom/comments/35  ==>  Some (Comment \"tom\" 35)\n    /user/                 ==>  None\n
\n*)\nlet oneOf parsers state =\n List.collect (fun parser -> parser state) parsers\n\n\n(** A parser that does not consume any path segments.\n```\n type BlogRoute = Overview | Post of int\n blogRoute =\n oneOf\n [ map Overview top\n map Post (s \"post\" i32) ]\n parse (s \"blog\" blogRoute) location\n```\n
\n    /blog/         ==>  Some Overview\n    /blog/post/42  ==>  Some (Post 42)\n
\n*)\nlet top state=\n [state]\n\n\n\n(**\n#### Query parameters\nTurn query parameters like `?name=tom&age=42` into nice data.\n\n*)\n\ntype QueryParser<'a,'b> = State<'a> -> State<'b> list\n\n\n(** Parse some query parameters.\n```\n type Route = BlogList (Option string) | BlogPost Int\n route =\n oneOf\n [ map BlogList (s \"blog\" stringParam \"search\")\n map BlogPost (s \"blog\" i32) ]\n parse route location\n```\n
\n    /blog/              ==>  Some (BlogList None)\n    /blog/?search=cats  ==>  Some (BlogList (Some \"cats\"))\n    /blog/42            ==>  Some (BlogPost 42)\n
\n*)\nlet inline () (parser: Parser<_,_>) (queryParser:QueryParser<_,_>) : Parser<_,_> =\n fun state ->\n List.collect queryParser (parser state)\n\n(** Create a custom query parser. You could create parsers like these:\n```\n val jsonParam : string -> Decoder a -> QueryParser (Option a -> b) b\n val enumParam : string -> Map -> QueryParser (Option a -> b) b\n```\n*)\nlet customParam (key: string) (func: string option -> _) : QueryParser<_,_> =\n let inner { visited = visited; unvisited = unvisited; args = args; value = value } =\n [ State.mkState visited unvisited args (value (func (Map.tryFind key args))) ]\n inner\n\n\n(** Parse a query parameter as a `string`.\n```\n parse (s \"blog\" stringParam \"search\") location\n```\n
\n    /blog/              ==>  Some (Overview None)\n    /blog/?search=cats  ==>  Some (Overview (Some \"cats\"))\n
\n*)\nlet stringParam name =\n customParam name id\n\nlet internal intParamHelp =\n Option.bind\n (fun (value: string) ->\n match System.Int32.TryParse value with\n | (true,x) -> Some x\n | _ -> None)\n\n(** Parse a query parameter as an `int`. Option you want to show paginated\nsearch results. You could have a `start` query parameter to say which result\nshould appear first.\n```\n parse (s \"results\" intParam \"start\") location\n```\n
\n    /results           ==>  Some None\n    /results?start=10  ==>  Some (Some 10)\n
\n*)\nlet intParam name =\n customParam name intParamHelp\n\n\n// PARSER HELPERS\n\nlet rec internal parseHelp states =\n match states with\n | [] ->\n None\n | state :: rest ->\n match state.unvisited with\n | [] ->\n Some state.value\n | [\"\"] ->\n Some state.value\n | _ ->\n parseHelp rest\n\nlet internal splitUrl (url: string) =\n match List.ofArray <| url.Split([|'/'|]) with\n | \"\" :: segments ->\n segments\n | segments ->\n segments\n\n/// parse a given part of the location\nlet parse (parser: Parser<'a->'a,'a>) url args =\n { visited = []\n unvisited = splitUrl url\n args = args\n value = id }\n |> parser\n |> parseHelp\n\n#if FABLE_COMPILER\nopen Fable.Core\n\nlet internal toKeyValuePair (segment: string) =\n match segment.Split('=') with\n | [| key; value |] ->\n Option.tuple (Option.ofFunc JS.decodeURIComponent key) (Option.ofFunc JS.decodeURIComponent value)\n | [| key |] when segment.StartsWith key ->\n Option.tuple (Option.ofFunc JS.decodeURIComponent key) (Some \"\")\n | _ -> None\n#else\nopen System.Net\nlet internal toKeyValuePair (segment: string) =\n match segment.Split('=') with\n | [| key; value |] ->\n Option.tuple (Option.ofFunc WebUtility.UrlDecode key) (Option.ofFunc WebUtility.UrlDecode value)\n | [| key |] when segment.StartsWith key ->\n Option.tuple (Option.ofFunc WebUtility.UrlDecode key) (Some \"\")\n | _ -> None\n#endif\n\nlet parseParams (querystring: string) =\n if System.String.IsNullOrEmpty querystring then Map.empty\n else\n querystring.Split('&')\n |> Seq.map toKeyValuePair\n |> Seq.choose id\n |> Map.ofSeq\n\n(**\n#### Parsers\nParse a url string.\n*)\nlet parseUrl (parser: Parser<_,_>) (url:string) =\n let pos = url.IndexOf \"?\"\n if pos >= 0 then\n let path = url.Substring(0,pos)\n let search = url.Substring(pos+1)\n parse parser path (parseParams search)\n else\n parse parser url Map.empty","import { subscribe } from \"./Observable.js\";\nimport { some, value } from \"./Option.js\";\nimport { Choice_tryValueIfChoice1Of2, Choice_tryValueIfChoice2Of2 } from \"./Choice.js\";\nexport class Event$2 {\n constructor() {\n this.delegates = [];\n }\n _add(d) {\n this.delegates.push(d);\n }\n _remove(d) {\n const index = this.delegates.indexOf(d);\n if (index > -1) {\n this.delegates.splice(index, 1);\n }\n }\n get Publish() {\n return createEvent(h => { this._add(h); }, h => { this._remove(h); });\n }\n Trigger(senderOrValue, valueOrUndefined) {\n let sender = null;\n const value = valueOrUndefined === undefined ? senderOrValue : (sender = senderOrValue, valueOrUndefined);\n this.delegates.forEach(f => { f(sender, value); });\n }\n}\nexport class Event extends Event$2 {\n}\nexport function add(callback, sourceEvent) {\n subscribe(callback, sourceEvent);\n}\nexport function choose(chooser, sourceEvent) {\n const ev = new Event();\n add((t) => {\n const u = chooser(t);\n if (u != null) {\n ev.Trigger(value(u));\n }\n }, sourceEvent);\n return ev.Publish;\n}\nexport function filter(predicate, sourceEvent) {\n return choose((x) => predicate(x) ? some(x) : undefined, sourceEvent);\n}\nexport function map(mapping, sourceEvent) {\n const ev = new Event();\n add((t) => ev.Trigger(mapping(t)), sourceEvent);\n return ev.Publish;\n}\nexport function merge(event1, event2) {\n const ev = new Event();\n const fn = (x) => ev.Trigger(x);\n add(fn, event1);\n add(fn, event2);\n return ev.Publish;\n}\nexport function pairwise(sourceEvent) {\n const ev = new Event();\n let last;\n let haveLast = false;\n add((next) => {\n if (haveLast) {\n ev.Trigger([last, next]);\n }\n last = next;\n haveLast = true;\n }, sourceEvent);\n return ev.Publish;\n}\nexport function partition(predicate, sourceEvent) {\n return [filter(predicate, sourceEvent), filter((x) => !predicate(x), sourceEvent)];\n}\nexport function scan(collector, state, sourceEvent) {\n return map((t) => state = collector(state, t), sourceEvent);\n}\nexport function split(splitter, sourceEvent) {\n return [\n choose((v) => Choice_tryValueIfChoice1Of2(splitter(v)), sourceEvent),\n choose((v) => Choice_tryValueIfChoice2Of2(splitter(v)), sourceEvent),\n ];\n}\nexport function createEvent(addHandler, removeHandler) {\n return {\n AddHandler(h) { addHandler(h); },\n RemoveHandler(h) { removeHandler(h); },\n Subscribe(r) {\n const h = ((_, args) => r.OnNext(args));\n addHandler(h);\n return {\n Dispose() { removeHandler(h); }\n };\n }\n };\n}\n","import { Choice_tryValueIfChoice1Of2, Choice_tryValueIfChoice2Of2 } from \"./Choice.js\";\nimport { value } from \"./Option.js\";\nexport class Observer {\n constructor(onNext, onError, onCompleted) {\n this.OnNext = onNext;\n this.OnError = onError || ((_e) => { return; });\n this.OnCompleted = onCompleted || (() => { return; });\n }\n}\nclass Observable {\n constructor(subscribe) {\n this.Subscribe = subscribe;\n }\n}\nfunction protect(f, succeed, fail) {\n try {\n return succeed(f());\n }\n catch (e) {\n fail(e);\n }\n}\nexport function add(callback, source) {\n source.Subscribe(new Observer(callback));\n}\nexport function choose(chooser, source) {\n return new Observable((observer) => source.Subscribe(new Observer((t) => protect(() => chooser(t), (u) => { if (u != null) {\n observer.OnNext(value(u));\n } }, observer.OnError), observer.OnError, observer.OnCompleted)));\n}\nexport function filter(predicate, source) {\n return choose((x) => predicate(x) ? x : void 0, source);\n}\nexport function map(mapping, source) {\n return new Observable((observer) => source.Subscribe(new Observer((t) => {\n protect(() => mapping(t), observer.OnNext, observer.OnError);\n }, observer.OnError, observer.OnCompleted)));\n}\nexport function merge(source1, source2) {\n return new Observable((observer) => {\n let stopped = false;\n let completed1 = false;\n let completed2 = false;\n const h1 = source1.Subscribe(new Observer((v) => { if (!stopped) {\n observer.OnNext(v);\n } }, (e) => {\n if (!stopped) {\n stopped = true;\n observer.OnError(e);\n }\n }, () => {\n if (!stopped) {\n completed1 = true;\n if (completed2) {\n stopped = true;\n observer.OnCompleted();\n }\n }\n }));\n const h2 = source2.Subscribe(new Observer((v) => { if (!stopped) {\n observer.OnNext(v);\n } }, (e) => {\n if (!stopped) {\n stopped = true;\n observer.OnError(e);\n }\n }, () => {\n if (!stopped) {\n completed2 = true;\n if (completed1) {\n stopped = true;\n observer.OnCompleted();\n }\n }\n }));\n return {\n Dispose() {\n h1.Dispose();\n h2.Dispose();\n },\n };\n });\n}\nexport function pairwise(source) {\n return new Observable((observer) => {\n let last;\n return source.Subscribe(new Observer((next) => {\n if (last != null) {\n observer.OnNext([last, next]);\n }\n last = next;\n }, observer.OnError, observer.OnCompleted));\n });\n}\nexport function partition(predicate, source) {\n return [filter(predicate, source), filter((x) => !predicate(x), source)];\n}\nexport function scan(collector, state, source) {\n return new Observable((observer) => {\n return source.Subscribe(new Observer((t) => {\n protect(() => collector(state, t), (u) => { state = u; observer.OnNext(u); }, observer.OnError);\n }, observer.OnError, observer.OnCompleted));\n });\n}\nexport function split(splitter, source) {\n return [\n choose((v) => Choice_tryValueIfChoice1Of2(splitter(v)), source),\n choose((v) => Choice_tryValueIfChoice2Of2(splitter(v)), source)\n ];\n}\nexport function subscribe(callback, source) {\n return source.Subscribe(new Observer(callback));\n}\n","namespace Sutil\n\nopen System\n\n// Ported from https://github.com/elmish/elmish\n\n/// Dispatch - feed new message into the processing loop\ntype Dispatch<'Msg> = 'Msg -> unit // Message dispatcher\n\n/// Effect - return immediately, but may schedule dispatch of a message at any time\ntype Effect<'msg> = Dispatch<'msg> -> unit\n\n/// Cmd - container for effects that may produce messages\ntype Cmd<'Msg> = Effect<'Msg> list // List of commands. A command needs a dispatcher to execute\n\n//\n// All Cmd code take from Fable.Elmish/src/cmd.fs, by Maxel Mangime\n// TODO: Refactor this into Sutil.Elmish module\n//\n#if FABLE_COMPILER\n/// \nmodule internal Timer =\n open System.Timers\n\n let delay interval callback =\n let t =\n new Timer(float interval, AutoReset = false)\n\n t.Elapsed.Add callback\n t.Enabled <- true\n t.Start()\n#endif\n\n/// \n/// Sutil's Elmish Cmd\n/// \nmodule Cmd =\n\n let none: Cmd<'Msg> = []\n\n /// Command to call the effect\n let ofEffect (effect: Effect<'msg>) : Cmd<'msg> =\n [effect]\n\n let map (f: 'MsgA -> 'MsgB) (cmd: Cmd<'MsgA>) : Cmd<'MsgB> =\n cmd\n |> List.map (fun g -> (fun dispatch -> f >> dispatch) >> g)\n\n let ofMsg msg : Cmd<'Msg> = [ fun d -> d msg ]\n\n let batch (cmds: Cmd<'Msg> list) : Cmd<'Msg> = cmds |> List.concat\n\n module OfFunc =\n let either (task: 'args -> _) (a: 'args) (success: _ -> 'msg') (error: _ -> 'msg') =\n [ fun d ->\n try\n task a |> (success >> d)\n with\n | x -> x |> (error >> d) ]\n\n let perform (task: 'args -> _) (a: 'args) (success: _ -> 'msg') =\n [ fun d ->\n try\n task a |> (success >> d)\n with\n | _ -> () ]\n\n let attempt (task: 'args -> unit) (a: 'args) (error: _ -> 'msg') =\n [ fun d ->\n try\n task a\n with\n | x -> x |> (error >> d) ]\n\n let exec (task: 'args -> _) (a: 'args) =\n [ fun d ->\n try\n task a\n with\n | _ -> () ]\n\n\n module OfAsyncWith =\n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let either\n (start: Async -> unit)\n (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg)\n : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n\n dispatch (\n match r with\n | Choice1Of2 x -> ofSuccess x\n | Choice2Of2 x -> ofError x\n )\n }\n\n [ bind >> start ]\n\n /// Command that will evaluate an async block and map the success\n let perform (start: Async -> unit) (task: 'a -> Async<_>) (arg: 'a) (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n\n match r with\n | Choice1Of2 x -> dispatch (ofSuccess x)\n | _ -> ()\n }\n\n [ bind >> start ]\n\n /// Command that will evaluate an async block and map the error (of exception)\n let attempt (start: Async -> unit) (task: 'a -> Async<_>) (arg: 'a) (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n\n match r with\n | Choice2Of2 x -> dispatch (ofError x)\n | _ -> ()\n }\n\n [ bind >> start ]\n\n /// Command that will evaluate an async block to the message\n let result (start: Async -> unit) (task: Async<'msg>) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task\n dispatch r\n }\n\n [ bind >> start ]\n\n module OfAsync =\n#if FABLE_COMPILER\n let start x =\n Timer.delay 0 (fun _ -> Async.StartImmediate x)\n#else\n let inline start x = Async.Start x\n#endif\n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let inline either (task: 'a -> Async<_>) (arg: 'a) (ofSuccess: _ -> 'msg) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.either start task arg ofSuccess ofError\n\n /// Command that will evaluate an async block and map the success\n let inline perform (task: 'a -> Async<_>) (arg: 'a) (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.perform start task arg ofSuccess\n\n /// Command that will evaluate an async block and map the error (of exception)\n let inline attempt (task: 'a -> Async<_>) (arg: 'a) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.attempt start task arg ofError\n\n /// Command that will evaluate an async block to the message\n let inline result (task: Async<'msg>) : Cmd<'msg> = OfAsyncWith.result start task\n\n module OfAsyncImmediate =\n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let inline either (task: 'a -> Async<_>) (arg: 'a) (ofSuccess: _ -> 'msg) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.either Async.StartImmediate task arg ofSuccess ofError\n\n /// Command that will evaluate an async block and map the success\n let inline perform (task: 'a -> Async<_>) (arg: 'a) (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.perform Async.StartImmediate task arg ofSuccess\n\n /// Command that will evaluate an async block and map the error (of exception)\n let inline attempt (task: 'a -> Async<_>) (arg: 'a) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.attempt Async.StartImmediate task arg ofError\n\n /// Command that will evaluate an async block to the message\n let inline result (task: Async<'msg>) : Cmd<'msg> =\n OfAsyncWith.result Async.StartImmediate task\n\n#if FABLE_COMPILER\n module OfPromise =\n /// Command to call `promise` block and map the results\n let either\n (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: #exn -> 'msg)\n : Cmd<'msg> =\n let bind dispatch =\n (task arg)\n .``then``(ofSuccess >> dispatch)\n .catch (unbox >> ofError >> dispatch)\n |> ignore\n\n [ bind ]\n\n /// Command to call `promise` block and map the success\n let perform (task: 'a -> Fable.Core.JS.Promise<_>) (arg: 'a) (ofSuccess: _ -> 'msg) =\n let bind dispatch =\n (task arg).``then`` (ofSuccess >> dispatch)\n |> ignore\n\n [ bind ]\n\n /// Command to call `promise` block and map the error\n let attempt (task: 'a -> Fable.Core.JS.Promise<_>) (arg: 'a) (ofError: #exn -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n (task arg).catch (unbox >> ofError >> dispatch)\n |> ignore\n\n [ bind ]\n\n /// Command to dispatch the `promise` result\n let result (task: Fable.Core.JS.Promise<'msg>) =\n let bind dispatch = task.``then`` dispatch |> ignore\n [ bind ]\n\n []\n let inline ofPromise\n (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg)\n : Cmd<'msg> =\n OfPromise.either task arg ofSuccess ofError\n#else\n open System.Threading.Tasks\n\n module OfTask =\n /// Command to call a task and map the results\n let inline either (task: 'a -> Task<_>) (arg: 'a) (ofSuccess: _ -> 'msg) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsync.either (task >> Async.AwaitTask) arg ofSuccess ofError\n\n /// Command to call a task and map the success\n let inline perform (task: 'a -> Task<_>) (arg: 'a) (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsync.perform (task >> Async.AwaitTask) arg ofSuccess\n\n /// Command to call a task and map the error\n let inline attempt (task: 'a -> Task<_>) (arg: 'a) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsync.attempt (task >> Async.AwaitTask) arg ofError\n\n /// Command and map the task success\n let inline result (task: Task<'msg>) : Cmd<'msg> =\n OfAsync.result (task |> Async.AwaitTask)\n\n []\n let inline ofTask (task: 'a -> Task<_>) (arg: 'a) (ofSuccess: _ -> 'msg) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfTask.either task arg ofSuccess ofError\n#endif\n","import { Event } from \"./Event.js\";\nexport class Timer {\n constructor(interval) {\n this._enabled = false;\n this._isDisposed = false;\n this._intervalId = 0;\n this._timeoutId = 0;\n this.Interval = interval && interval > 0 ? interval : 100;\n this.AutoReset = true;\n this._elapsed = new Event();\n }\n Elapsed() {\n return this._elapsed.Publish;\n }\n get Enabled() {\n return this._enabled;\n }\n set Enabled(x) {\n if (!this._isDisposed && this._enabled !== x) {\n this._enabled = x;\n if (this._enabled) {\n if (this.AutoReset) {\n this._intervalId = setInterval(() => {\n if (!this.AutoReset) {\n this.Enabled = false;\n }\n this._elapsed.Trigger(new Date());\n }, this.Interval);\n }\n else {\n this._timeoutId = setTimeout(() => {\n this.Enabled = false;\n this._timeoutId = 0;\n if (this.AutoReset) {\n this.Enabled = true;\n }\n this._elapsed.Trigger(new Date());\n }, this.Interval);\n }\n }\n else {\n if (this._timeoutId) {\n clearTimeout(this._timeoutId);\n this._timeoutId = 0;\n }\n if (this._intervalId) {\n clearInterval(this._intervalId);\n this._intervalId = 0;\n }\n }\n }\n }\n Dispose() {\n this.Enabled = false;\n this._isDisposed = true;\n }\n Close() {\n this.Dispose();\n }\n Start() {\n this.Enabled = true;\n }\n Stop() {\n this.Enabled = false;\n }\n}\nexport default Timer;\n","[]\nmodule Extensions\n\n[]\ntype Deferred<'res> =\n | NotStarted\n | InProgress\n | Resolved of 'res\n\n[]\ntype ParametrizedDeferred<'arg, 'res> =\n | NotStarted\n | InProgress of 'arg\n | Resolved of 'res\n\n[]\ntype CommandExec<'arg> =\n | NotStarted\n | InProgress\n | Completed\n\n[]\nmodule CommandExec =\n let notInProgress (deferredCall : CommandExec<'a>) : bool =\n match deferredCall with\n | CommandExec.NotStarted -> true\n | CommandExec.InProgress -> false\n | CommandExec.Completed _ -> true\n\n let (|NotInProgress|_|) (exec : CommandExec<'a>) =\n match exec with\n | CommandExec.InProgress -> None\n | _ -> Some exec\n\n[]\nmodule CommandState =\n let notInProgress (commandState : CommandExec<'a>) : bool =\n match commandState with\n | CommandExec.NotStarted -> true\n | CommandExec.InProgress -> false\n | CommandExec.Completed _ -> true\n\n[]\nmodule Deferred =\n\n let resolved deferred : bool =\n match deferred with\n | Deferred.NotStarted -> false\n | Deferred.InProgress -> false\n | Deferred.Resolved _ -> true\n\n let notInProgress deferred : bool =\n match deferred with\n | Deferred.NotStarted -> true\n | Deferred.InProgress -> false\n | Deferred.Resolved _ -> true\n\n let exec (action : 'arg -> unit) (arg : Deferred<'arg>) =\n match arg with\n | Deferred.NotStarted -> ()\n | Deferred.InProgress -> ()\n | Deferred.Resolved value -> value |> action\n\nopen Shared.Validation\n\n[]\ntype Query<'arg, 'res> =\n | Started of 'arg\n | Completed of 'res\n | Error of AggregateError\n\n[]\ntype EmptyQuery<'res> =\n | Started\n | Completed of 'res\n | Error of AggregateError\n\n[]\ntype Command<'arg> =\n | Started of 'arg\n | Completed\n | Error of AggregateError\n\nlet remoteCallCommand remoteFunc args command =\n Sutil.Cmd.OfAsync.either\n remoteFunc\n args\n (fun res ->\n match res with\n | Ok _ -> command (Command.Completed)\n | Error err -> command (Command.Error err))\n (fun exn -> command (Command.Error([ ServerError exn.Message ] |> AggregateError)))\n\nlet remoteCallEmptyQuery (remoteFunc : 'a -> Async>) args (query) =\n Sutil.Cmd.OfAsync.either\n remoteFunc\n args\n (fun res ->\n match res with\n | Ok (okRes : 'b) -> okRes |> EmptyQuery.Completed |> query\n | Error (err : AggregateError ) -> err |> EmptyQuery.Error |> query)\n (fun exn -> [ exn.Message |> ServerError ] |> AggregateError |> EmptyQuery.Error |> query)\n\nlet remoteCallQuery (remoteFunc : 'a -> Async>) args query =\n Sutil.Cmd.OfAsync.either\n remoteFunc\n args\n (fun res ->\n match res with\n | Ok okRes -> okRes |> Query.Completed |> query\n | Error err -> err |> Query.Error |> query)\n (fun exn -> [ exn.Message |> ServerError ] |> AggregateError |> Query.Error |> query)\n","namespace Sutil\n\nopen System\n\n/// \ntype StyleRule =\n { SelectorSpec: string\n //Selector: CssRules.CssSelector\n Style: (string * obj) list }\n\n/// \ntype KeyFrame =\n { StartAt: int\n Style: (string * obj) list }\n\n/// \ntype KeyFrames = { Name: string; Frames: KeyFrame list }\n\n/// \ntype MediaRule =\n { Condition: string\n Rules: StyleSheetDefinition list }\n\n/// \nand StyleSheetDefinition =\n | Rule of StyleRule\n | KeyFrames of KeyFrames\n | MediaRule of MediaRule\n\n/// \ntype StyleSheetDefinitions = StyleSheetDefinition list\n\n/// \ntype NamedStyleSheet =\n { Name: string\n StyleSheet: StyleSheetDefinitions }\n\n/// \ntype ICollectionWrapper<'T> =\n abstract member ToList : unit -> List<'T>\n abstract member ToArray : unit -> 'T array\n abstract member Length : int\n abstract member Mapi : (int -> 'T -> 'R) -> ICollectionWrapper<'R>\n abstract member Map : ('T -> 'R) -> ICollectionWrapper<'R>\n abstract member Exists : ('T -> bool) -> bool\n abstract member TryFind : ('T -> bool) -> 'T option\n inherit System.Collections.Generic.IEnumerable<'T>\n\n/// \n[]\nmodule CollectionWrapperExt =\n\n type private ListW<'T>(list: 'T list) =\n interface ICollectionWrapper<'T> with\n member _.ToList() = list\n member _.ToArray() = list |> Array.ofList\n member _.Length = list.Length\n member _.Mapi(f: (int -> 'T -> 'R)) = upcast ListW((list |> List.mapi f))\n member _.Map(f: ('T -> 'R)) = upcast ListW(list |> List.map f)\n member _.Exists(p: 'T -> bool) = list |> List.exists p\n member _.TryFind(p: 'T -> bool) = list |> List.tryFind p\n\n interface System.Collections.IEnumerable with\n member _.GetEnumerator() =\n upcast (list |> Seq.ofList).GetEnumerator()\n\n interface System.Collections.Generic.IEnumerable<'T> with\n member _.GetEnumerator() =\n upcast (list |> Seq.ofList).GetEnumerator()\n\n type private ArrayW<'T>(a: 'T array) =\n interface ICollectionWrapper<'T> with\n member _.ToList() = a |> List.ofArray\n member _.ToArray() = a\n member _.Length = a.Length\n member _.Mapi(f: (int -> 'T -> 'R)) = upcast ArrayW((a |> Array.mapi f))\n member _.Map(f: ('T -> 'R)) = upcast ArrayW(a |> Array.map f)\n member _.Exists(p: 'T -> bool) = a |> Array.exists p\n member _.TryFind(p: 'T -> bool) = a |> Array.tryFind p\n\n interface System.Collections.IEnumerable with\n member _.GetEnumerator() =\n upcast (a |> Seq.ofArray).GetEnumerator()\n\n interface System.Collections.Generic.IEnumerable<'T> with\n member _.GetEnumerator() =\n upcast (a |> Seq.ofArray).GetEnumerator()\n\n type List<'T> with\n member internal __.ToCollectionWrapper() : ICollectionWrapper<'T> = upcast ListW(__)\n\n type 'T ``[]`` with\n member internal __.ToCollectionWrapper() : ICollectionWrapper<'T> = upcast ArrayW(__)\n\n/// \nmodule internal CollectionWrapper =\n let length (c: ICollectionWrapper<'T>) = c.Length\n let mapi (f: (int -> 'T -> 'R)) (c: ICollectionWrapper<'T>) = c.Mapi f\n let map (f: ('T -> 'R)) (c: ICollectionWrapper<'T>) = c.Map f\n let exists f (c: ICollectionWrapper<'T>) = c.Exists(f)\n let tryFind f (c: ICollectionWrapper<'T>) = c.TryFind(f)\n\n/// \ntype IStoreDebugger =\n interface\n abstract Value : obj\n abstract NumSubscribers : int\n end\n\n\n/// \nmodule DevToolsControl =\n\n type SutilOptions =\n { SlowAnimations: bool\n LoggingEnabled: bool }\n\n let mutable Options =\n { SlowAnimations = false\n LoggingEnabled = false }\n\n type Version =\n { Major: int\n Minor: int\n Patch: int }\n override v.ToString() = $\"{v.Major}.{v.Minor}.{v.Patch}\"\n\n type IMountPoint =\n interface\n abstract Id : string\n abstract Remount : unit -> unit\n end\n\n type IControlBlock =\n interface\n abstract ControlBlockVersion : int\n abstract Version : Version\n abstract GetOptions : unit -> SutilOptions\n abstract SetOptions : SutilOptions -> unit\n abstract GetStores : unit -> int array\n abstract GetStoreById : int -> IStoreDebugger\n abstract GetLogCategories : unit -> (string * bool) array\n abstract SetLogCategories : (string * bool) array -> unit\n abstract GetMountPoints : unit -> IMountPoint array\n abstract PrettyPrint : int -> unit\n end\n\n let getControlBlock doc : IControlBlock = Interop.get doc \"__sutil_cb\"\n let setControlBlock doc (cb: IControlBlock) = Interop.set doc \"__sutil_cb\" cb\n\n let initialise doc controlBlock = setControlBlock doc controlBlock\n\n/// \ntype Unsubscribe = unit -> unit\n\n/// \ntype IStore<'T> =\n interface\n inherit IObservable<'T>\n inherit IDisposable\n abstract Update : f: ('T -> 'T) -> unit\n abstract Value : 'T\n abstract Debugger : IStoreDebugger\n abstract Name : string with get, set\n end\n\n/// \ntype Store<'T> = IStore<'T>\n\n/// \ntype Update<'Model> = ('Model -> 'Model) -> unit // A store updater. Store updates by being passed a model updater\n\ntype ElementRef =\n | Id of string\n | Selector of string\n | Element of Browser.Types.HTMLElement\nwith\n member __.AsElement =\n match __ with\n | Id s -> Browser.Dom.document.querySelector(\"#\" + s) :?> Browser.Types.HTMLElement\n | Selector s -> Browser.Dom.document.querySelector(s) :?> Browser.Types.HTMLElement\n | Element e -> e\n\ntype internal MountOp =\n | AppendTo\n | InsertAfter\n\ntype internal MountPoint = MountOp * ElementRef\n","/// \nmodule internal Sutil.Logging\n\nopen System.Collections.Generic\nopen Browser.Dom\n\nlet internal enabled = Dictionary()\n\nlet le() = DevToolsControl.Options.LoggingEnabled\n\nlet mutable initialized = false\n\nlet init =\n if not initialized then\n console.log(\"logging:init defaults\")\n initialized <- true\n enabled.[\"store\"] <- false\n enabled.[\"trans\"] <- false\n enabled.[\"dom\" ] <- true\n enabled.[\"core\" ] <- true\n enabled.[\"core-elements\" ] <- true\n enabled.[\"style\"] <- false\n enabled.[\"bind\" ] <- true\n enabled.[\"each\" ] <- true\n enabled.[\"tick\" ] <- false\n\nlet initWith states =\n console.log(\"logging:init with states\")\n initialized <- true\n for (name,state) in states do\n console.log($\"logging:{name}: {state}\")\n enabled.[name] <- state\n\nlet timestamp() =\n sprintf \"%0.3f\" (((float)System.DateTime.Now.Ticks / 10000000.0) % 60.0)\n\nlet isEnabled source =\n le() && (not (enabled.ContainsKey(source)) || enabled.[source])\n\nlet log source (message : string) =\n if isEnabled source then\n console.log(sprintf \"%s: %s: %s\" (timestamp()) source message)\n\nlet warning (message : string) =\n console.log(sprintf \"warning: %s\" message)\n\nlet error (message : string) =\n console.log(sprintf \"error: %s\" message)\n\n","import { compare } from \"./Util.js\";\nimport { unfold, delay } from \"./Seq.js\";\nimport { toUInt64, toInt64, op_Addition, fromZero } from \"./BigInt.js\";\nimport { op_Addition as op_Addition_1, fromParts } from \"./Decimal.js\";\nexport function makeRangeStepFunction(step, stop, zero, add) {\n const stepComparedWithZero = compare(step, zero) | 0;\n if (stepComparedWithZero === 0) {\n throw new Error(\"The step of a range cannot be zero\");\n }\n const stepGreaterThanZero = stepComparedWithZero > 0;\n return (x) => {\n const comparedWithLast = compare(x, stop) | 0;\n return ((stepGreaterThanZero && (comparedWithLast <= 0)) ? true : (!stepGreaterThanZero && (comparedWithLast >= 0))) ? [x, add(x, step)] : void 0;\n };\n}\nexport function integralRangeStep(start, step, stop, zero, add) {\n const stepFn = makeRangeStepFunction(step, stop, zero, add);\n return delay(() => unfold(stepFn, start));\n}\nexport function rangeBigInt(start, step, stop) {\n return integralRangeStep(start, step, stop, fromZero(), op_Addition);\n}\nexport function rangeDecimal(start, step, stop) {\n return integralRangeStep(start, step, stop, fromParts(0, 0, 0, false, 0), op_Addition_1);\n}\nexport function rangeDouble(start, step, stop) {\n return integralRangeStep(start, step, stop, 0, (x, y) => (x + y));\n}\nexport function rangeInt64(start, step, stop) {\n return integralRangeStep(start, step, stop, 0n, (x, y) => toInt64(op_Addition(x, y)));\n}\nexport function rangeUInt64(start, step, stop) {\n return integralRangeStep(start, step, stop, 0n, (x, y) => toUInt64(op_Addition(x, y)));\n}\nexport function rangeChar(start, stop) {\n const intStop = stop.charCodeAt(0) | 0;\n return delay(() => unfold((c) => {\n if (c <= intStop) {\n return [String.fromCharCode(c), c + 1];\n }\n else {\n return void 0;\n }\n }, start.charCodeAt(0)));\n}\n","/// \n/// General purpose helpers\n/// \nmodule Sutil.Helpers\n\nopen Browser.Types\n\n#if FABLE_COMPILER\nopen Fable.Core\n\n[]\nlet fastEquals (x: 'T) (y: 'T): bool = jsNative\n#else\nlet fastEquals (x: 'T) (y: 'T): bool = Unchecked.equals x y\n#endif\nlet fastNotEquals x y = fastEquals x y |> not\n\nlet fileListToSeq (files:FileList) : File seq =\n if not (isNull files) then\n seq {\n for i in [0 .. files.length-1] do\n yield files.[i]\n }\n else\n Seq.empty\n\nlet disposable f =\n { new System.IDisposable with\n member _.Dispose() = f () }\n\nlet internal unsubify (d : System.IDisposable) = fun () -> d.Dispose()\n\nlet makeIdGeneratorFrom start =\n let mutable id = start\n fun () ->\n let r = id\n id <- id+1\n r\n\nlet makeIdGenerator() = makeIdGeneratorFrom 0\n","/// \nmodule internal Sutil.Interop\n\nopen Fable.Core\nopen Fable.Core.JsInterop\n\n[]\nlet random() : float = jsNative\n\n[]\nlet customEvent name data = jsNative\n\n[ ($0)[$1]\")>]\nlet getter obj name = jsNative\n\n[ { ($0)[$1] = value; }\")>]\nlet setter obj name = jsNative\n\n[]\nlet set<'T> (ob:obj) (name:string) (value:'T) : unit = jsNative\n\n[]\nlet get<'T> (ob:obj) (name:string) : 'T = jsNative\n\n[]\nlet delete ob name : unit = jsNative\n\n[]\nlet exists (ob:obj) (name:string) : bool= jsNative\n\nlet getOption<'a> (ob:obj) (name:string) : 'a option =\n match exists ob name with\n | false -> None\n | true -> Some (get ob name)\n\nlet getDefault<'a> (ob:obj) (name:string) (defaultValue : 'a): 'a =\n match exists obj name with\n | false -> defaultValue\n | true -> get ob name\n\n[]\nlet isUndefined (x: 'a) : bool = jsNative\n\n[]\nlet ifSetElse(a : 't, b : 't) : 't = jsNative\n\nopen Browser.Dom\nopen Browser.CssExtensions\nopen Browser.MediaQueryListExtensions\n\n[]\nlet windowIsDefined : bool = jsNative\n\ntype Window() =\n do ()\n with\n static member alert msg =\n if windowIsDefined then window.alert msg\n static member document =\n if windowIsDefined then window.document else null\n static member location =\n if windowIsDefined then window.location else null\n static member addEventListener(typ,listener) =\n if windowIsDefined then window.addEventListener(typ,listener)\n static member getComputedStyle(elt) =\n if windowIsDefined then window.getComputedStyle(elt) else null\n static member getComputedStyle(elt,pseudoElt) =\n if windowIsDefined then window.getComputedStyle(elt,pseudoElt) else null\n static member matchMedia query =\n if windowIsDefined then window.matchMedia query else null\n static member removeEventListener(typ,listener) =\n if windowIsDefined then window.removeEventListener(typ,listener)\n static member requestAnimationFrame callback =\n if windowIsDefined then window.requestAnimationFrame callback else 0.0\n\n","/// \n/// Utilities to help with browser DOM API\n/// \nmodule Sutil.DomHelpers\n\nopen System\nopen Browser.Dom\nopen Browser.Types\nopen Browser.CssExtensions\nopen Interop\n\nlet private logEnabled() = Logging.isEnabled \"dom\"\nlet private log s = Logging.log \"dom\" s\n\nlet internal SvIdKey = \"_svid\"\n\n///\n/// Downcast EventTarget to Node or subtype of Node\n/// \nlet asElement<'T when 'T :> Node> (target:EventTarget) : 'T = (target :?> 'T)\n\n[]\nmodule internal NodeKey =\n let Disposables = \"__sutil_disposables\"\n let ResizeObserver = \"__sutil_resizeObserver\"\n let TickTask = \"__sutil_tickTask\"\n let Promise = \"__sutil_promise\"\n let NodeMap = \"__sutil_nodes\"\n let Groups = \"__sutil_groups\"\n let StyleClass = \"__sutil_styleclass\"\n\n let clear (node: Node) (key: string) = Interop.delete node key\n\n let get<'T> (node: Node) key : 'T option =\n let v: obj = Interop.get node key\n\n if isNull v then\n None\n else\n v :?> 'T |> Some\n\n let setUnlessExists<'T> (node: Node) key (value : 'T) : unit=\n if not (Interop.exists node key) then\n Interop.set node key value\n\n let getCreate<'T> (node: Node) key (cons: unit -> 'T) : 'T =\n match get node key with\n | Some v -> v\n | None ->\n let newVal = cons ()\n Interop.set node key newVal\n newVal\n\nmodule internal Event =\n let NewStore = \"sutil-new-store\"\n let UpdateStore = \"sutil-update-store\"\n let ElementReady = \"sutil-element-ready\"\n let Mount = \"sutil-mount\"\n let Unmount = \"sutil-unmount\"\n let Show = \"sutil-show\"\n let Hide = \"sutil-hide\"\n let Updated = \"sutil-updated\"\n let Connected = \"sutil-connected\"\n //let NewStore = \"sutil-new-store\"\n //let DisposeStore = \"sutil-dispose-store\"\n\n let notifyEvent (doc: Document) name data =\n doc.dispatchEvent (Interop.customEvent name data)\n |> ignore\n\n let notifyUpdated doc =\n if logEnabled() then log (\"notify document\")\n notifyEvent doc Updated {| |}\n\nlet private dispatch (target: EventTarget) name (data: obj) =\n if not (isNull target) then\n target.dispatchEvent (Interop.customEvent name data)\n |> ignore\n\nlet private dispatchSimple (target: EventTarget) name =\n dispatch target name {| |}\n\nlet private dispatchCustom<'T> (target: EventTarget) (name: string) (init: CustomEventInit<'T>) =\n if not (isNull target) then\n target.dispatchEvent (customEvent name init)\n |> ignore\n\n/// \n/// Custom events\n/// \ntype CustomDispatch<'T> =\n | Detail of 'T\n | Bubbles of bool\n | Composed of bool\n static member toCustomEvent<'T>(props: CustomDispatch<'T> list) =\n let mutable data: obj = upcast {| |}\n\n for p in props do\n match p with\n | Detail d -> Interop.set data \"detail\" d\n | Bubbles b -> Interop.set data \"bubbles\" b\n | Composed c -> Interop.set data \"composed\" c\n\n data :?> CustomEventInit<'T>\n\n static member dispatch(target: EventTarget, name: string) =\n dispatchCustom target name (CustomDispatch.toCustomEvent ([]))\n\n static member dispatch(e: Event, name: string) =\n dispatchCustom (e.target) name (CustomDispatch.toCustomEvent ([]))\n\n static member dispatch<'T>(target: EventTarget, name: string, props: CustomDispatch<'T> list) =\n dispatchCustom<'T> target name (CustomDispatch.toCustomEvent<'T> props)\n\n static member dispatch<'T>(e: Event, name: string, props: CustomDispatch<'T> list) =\n dispatchCustom<'T> (e.target) name (CustomDispatch.toCustomEvent<'T> props)\n\n static member dispatch (target: EventTarget, name, data: 'T) =\n dispatchCustom<'T> (target) name (CustomDispatch.toCustomEvent ([ Detail data ]))\n\nlet internal domId = Helpers.makeIdGenerator ()\n\n[]\nlet internal ElementNodeType = 1.0\n\n[]\nlet internal TextNodeType = 3.0\n\n/// Return true if n is a Text node (nodeType = 3)\nlet isTextNode (n: Node) = n <> null && n.nodeType = TextNodeType\n\n/// Return true if n is an Element node (nodeType = 1)\nlet isElementNode (n: Node) = n <> null && n.nodeType = ElementNodeType\n\n// let asTryElement (n: Node) =\n// if isElementNode n then\n// Some(n :?> HTMLElement)\n// else\n// None\n\nlet internal documentOf (n: Node) = n.ownerDocument\n\ntype Node with\n member __.asTextNode = if isTextNode __ then (Some (__ :?> Text)) else None\n member __.asHtmlElement = if isElementNode __ then (Some (__ :?> HTMLElement)) else None\n\nlet internal applyIfElement (f: HTMLElement -> unit) (n: Node) =\n if isElementNode n then\n f (n :?> HTMLElement)\n\nlet internal applyIfText (f: Text -> unit) (n: Node) =\n if isTextNode n then\n f (n :?> Text)\nlet internal getNodeMap (doc: Document) : obj =\n NodeKey.getCreate doc.body NodeKey.NodeMap (fun () -> upcast {| |})\n\nlet internal setSvId (n: Node) id =\n let map = getNodeMap n.ownerDocument\n Interop.set map (string id) n\n Interop.set n SvIdKey id\n\n if (isElementNode n) then\n (n :?> HTMLElement)\n .setAttribute (SvIdKey, (string id))\n\nlet internal svId (n: Node) = Interop.get n SvIdKey\n\nlet internal hasSvId (n: Node) = Interop.exists n SvIdKey\n\nlet internal findNodeWithSvId (doc: Document) id : Node option =\n let map = getNodeMap doc\n let key = string id\n\n match Interop.exists map key with\n | true -> Some(Interop.get map key)\n | _ -> None\n\n//let getId n =\n// let r = svId n\n// if (r = id) then Some n else None\n//findNode doc.body getId\n\nlet internal rectStr (r: ClientRect) =\n $\"{r.left},{r.top} -> {r.right},{r.bottom}\"\n\nlet internal nodeStr (node: Node) =\n if isNull node then\n \"null\"\n else\n let mutable tc = node.textContent.Replace(\"\\n\", \"\\\\n\").Replace(\"\\r\", \"\")\n\n if tc.Length > 80 then\n tc <- tc.Substring(0, 80)\n\n match node.nodeType with\n | ElementNodeType ->\n let e = node :?> HTMLElement\n $\"<{e.tagName.ToLower()}>#{svId node} \\\"{tc}\\\"\"\n | TextNodeType -> $\"\\\"{tc}\\\"#{svId node}\"\n | _ -> $\"?'{tc}'#{svId node}\"\n\nlet nodeStrShort (node: Node) =\n if isNull node then\n \"null\"\n else\n let mutable tc = node.textContent\n\n if tc.Length > 16 then\n tc <- tc.Substring(0, 16) + \"...\"\n\n match node.nodeType with\n | ElementNodeType ->\n let e = node :?> HTMLElement\n $\"<{e.tagName.ToLower()}> #{svId node}\"\n | TextNodeType -> $\"text:\\\"{tc}\\\" #{svId node}\"\n | _ -> $\"?'{tc}'#{svId node}\"\n\nopen Fable.Core.JsInterop\n\n/// Child nodes of node\nlet children (node: Node) =\n let rec visit (child: Node) =\n seq {\n if not (isNull child) then\n yield child\n yield! visit child.nextSibling\n }\n\n visit node.firstChild\n\n/// Descendants of node in breadth-first order\nlet rec descendants (node: Node) =\n seq {\n for child in children node do\n yield child\n yield! descendants child\n }\n\nlet rec internal descendantsDepthFirst (node: Node) =\n seq {\n for child in children node do\n yield! descendants child\n yield child\n }\n\nlet internal isSameNode (a: Node) (b: Node) =\n if isNull a then\n isNull b\n else\n a.isSameNode (b)\n\nlet private hasDisposables (node: Node) : bool = Interop.exists node NodeKey.Disposables\n\nlet internal getDisposables (node: Node) : IDisposable list =\n if hasDisposables node then\n Interop.get node NodeKey.Disposables\n else\n []\n\nlet private clearDisposables (node: Node) : unit = Interop.delete node NodeKey.Disposables\n\n// Call all registered disposables on this node\nlet private cleanup (node: Node) : unit =\n let safeDispose (d: IDisposable) =\n try\n d.Dispose()\n with\n | x -> Logging.error $\"Disposing {d}: {x} from {nodeStr node}\"\n\n let d = getDisposables node\n if logEnabled() then log $\"cleanup {nodeStr node} - {d.Length} disposable(s)\"\n\n d |> List.iter safeDispose\n\n clearDisposables node\n\n dispatchSimple node Event.Unmount\n\nlet internal assertTrue condition message = if not condition then failwith message\n\nlet internal cleanupDeep (node: Node) : unit =\n descendantsDepthFirst node\n |> Array.ofSeq\n |> Array.iter cleanup\n\n cleanup node\n\nmodule DomEdit =\n\n let log s =\n if Interop.exists window \"domeditlog\" then\n window?domeditlog (s)\n else\n Logging.log \"dom\" s\n\n let appendChild (parent: Node) (child: Node) =\n log $\"appendChild parent='{nodeStrShort parent}' child='{nodeStrShort child}'\"\n parent.appendChild (child) |> ignore\n log $\"after: appendChild parent='{nodeStrShort parent}' child='{nodeStrShort child}'\"\n\n let removeChild (parent: Node) (child: Node) =\n log $\"removeChild parent='{nodeStrShort parent}' child='{nodeStrShort child}'\"\n cleanupDeep child\n parent.removeChild (child) |> ignore\n log $\"after: removeChild parent='{nodeStrShort parent}' child='{nodeStrShort child}'\"\n\n let insertBefore (parent: Node) (child: Node) (refNode: Node) =\n log $\"insertBefore parent='{nodeStrShort parent}' child='{nodeStrShort child}' refNode='{nodeStrShort refNode}'\"\n parent.insertBefore (child, refNode) |> ignore\n\n log\n $\"after: insertBefore parent='{nodeStrShort parent}' child='{nodeStrShort child}' refNode='{nodeStrShort refNode}'\"\n\n let insertAfter (parent: Node) (newChild: Node) (refChild: Node) =\n let beforeChild =\n if isNull refChild then\n parent.firstChild\n else\n refChild.nextSibling\n\n insertBefore parent newChild beforeChild\n\nlet internal unmount (node: Node) : unit =\n cleanupDeep node\n\n if not (isNull (node.parentNode)) then\n DomEdit.removeChild node.parentNode node\n\n/// Remove all children of this node, cleaning up Sutil resources and dispatching \"unmount\" events\nlet clear (node: Node) =\n children node |> Array.ofSeq |> Array.iter unmount\n\n/// Add event listener using e.addEventListener. Return value is a (unit -> unit) function that will remove the event listener\nlet listen (event: string) (e: EventTarget) (fn: (Event -> unit)) : (unit -> unit) =\n e.addEventListener (event, fn)\n (fun () -> e.removeEventListener (event, fn) |> ignore)\n\n/// Wrapper for Window.requestAnimationFrame\nlet raf (f: float -> unit) =\n Window.requestAnimationFrame (fun t ->\n try\n f t\n with\n | x -> Logging.error $\"raf: {x.Message}\")\n\n/// Wrapper for Window.requestAnimationFrame, ignoring the timestamp.\nlet rafu (f: unit -> unit) =\n Window.requestAnimationFrame (fun _ ->\n try\n f ()\n with\n | x -> Logging.error $\"rafu: {x.Message}\")\n |> ignore\n\n\n/// Listen for the first occurrence of a list of events. fn will be called for the winning event\nlet anyof (events: string list) (target: EventTarget) (fn: Event -> Unit) : unit =\n let rec inner e =\n events\n |> List.iter (fun e -> target.removeEventListener (e, inner))\n\n fn (e)\n\n events\n |> List.iter (fun e -> listen e target inner |> ignore)\n\n/// Listen for the given event, and remove the listener after the first occurrence of the evening firing.\nlet once (event: string) (target: EventTarget) (fn: Event -> Unit) : unit =\n let rec inner e =\n target.removeEventListener (event, inner)\n fn (e)\n\n listen event target inner |> ignore\n\n/// Call handler every delayMs. Return value is a function that will cancel the timer.\nlet interval handler (delayMs: int) =\n let id =\n Fable.Core.JS.setInterval handler delayMs\n\n fun () -> Fable.Core.JS.clearInterval id\n\n/// Call handler after delayMs. Return value is a function that will cancel the timeout (if it hasn't occurred yet)\nlet timeout handler (delayMs: int) =\n let id =\n Fable.Core.JS.setTimeout handler delayMs\n\n fun () -> Fable.Core.JS.clearTimeout id\n\nlet internal nodeIsConnected (node: Node) : bool = node?isConnected\n\nmodule ClassHelpers =\n let splitBySpace (s: string) =\n s.Split([| ' ' |], StringSplitOptions.RemoveEmptyEntries)\n\n let setClass (className: string) (e: HTMLElement) = e.className <- className\n\n let toggleClass (className: string) (e: HTMLElement) =\n e.classList.toggle (className) |> ignore\n\n let addToClasslist classes (e: HTMLElement) =\n e.classList.add (classes |> splitBySpace)\n\n let removeFromClasslist classes (e: HTMLElement) =\n e.classList.remove (classes |> splitBySpace)\n\nlet internal nullToEmpty s = if isNull s then \"\" else s\n\nlet internal setAttribute (el: HTMLElement) (name: string) (value: obj) =\n let isBooleanAttribute name =\n (name = \"hidden\"\n || name = \"disabled\"\n || name = \"readonly\"\n || name = \"required\"\n || name = \"checked\")\n\n let svalue = string value\n\n if name = \"sutil-toggle-class\" then\n el |> ClassHelpers.toggleClass svalue\n\n if name = \"class\" then\n el |> ClassHelpers.addToClasslist svalue\n else if name = \"class-\" then\n el |> ClassHelpers.removeFromClasslist svalue\n else if isBooleanAttribute name then\n let bValue =\n if value :? bool then\n value :?> bool\n else\n svalue <> \"false\"\n // we'd call el.toggleAttribute( name, bValue) if it was available\n if bValue then\n el.setAttribute (name, \"\")\n else\n el.removeAttribute name\n\n else if name = \"value\" then\n Interop.set el \"__value\" value // raw value\n Interop.set el \"value\" svalue //\n else if name = \"style+\" then\n el.setAttribute (\"style\", (nullToEmpty (el.getAttribute (\"style\"))) + svalue)\n else\n el.setAttribute (name, svalue)\n\n\nlet private idSelector = sprintf \"#%s\"\nlet private classSelector = sprintf \".%s\"\nlet private findElement (doc: Document) selector = doc.querySelector (selector)\n\nlet rec private visitChildren (parent: Node) (f: Node -> bool) =\n\n let mutable child = parent.firstChild\n\n while not (isNull child) do\n if f (child) then\n visitChildren (downcast child) f\n child <- child.nextSibling\n else\n child <- null\n\nlet rec private findNode<'T> (parent: Node) (f: Node -> 'T option) : 'T option =\n let mutable child = parent.firstChild\n let mutable result: 'T option = None\n\n while not (isNull child) do\n result <- f (child)\n\n if (result.IsNone) then\n result <- findNode child f\n\n child <-\n match result with\n | None -> child.nextSibling\n | Some x -> null\n\n result\n\nlet private prevSibling (node: Node) : Node =\n match node with\n | null -> null\n | _ -> node.previousSibling\n\nlet rec private lastSibling (node: Node) : Node =\n if (isNull node || isNull node.nextSibling) then\n node\n else\n lastSibling node.nextSibling\n\nlet private lastChild (node: Node) : Node = lastSibling (node.firstChild)\n\nlet rec private firstSiblingWhere (node: Node) (condition: Node -> bool) =\n if isNull node then\n null\n else if condition node then\n node\n else\n firstSiblingWhere (node.nextSibling) condition\n\nlet private firstChildWhere (node: Node) (condition: Node -> bool) =\n firstSiblingWhere node.firstChild condition\n\nlet rec private lastSiblingWhere (node: Node) (condition: Node -> bool) =\n if isNull node then\n null\n else if (condition node\n && (isNull node.nextSibling\n || not (condition node.nextSibling))) then\n node\n else\n lastSiblingWhere node.nextSibling condition\n\nlet private lastChildWhere (node: Node) (condition: Node -> bool) =\n lastSiblingWhere node.firstChild condition\n\nlet rec internal visitElementChildren (parent: Node) (f: HTMLElement -> unit) =\n visitChildren parent (fun child ->\n if (isElementNode child) then\n f (downcast child)\n\n true)\n\n\nlet internal addTransform (node: HTMLElement) (a: ClientRect) =\n let b = node.getBoundingClientRect ()\n\n if (a.left <> b.left || a.top <> b.top) then\n let s = Window.getComputedStyle (node)\n\n let transform =\n if s.transform = \"none\" then\n \"\"\n else\n s.transform\n\n node.style.transform <- sprintf \"%s translate(%fpx, %fpx)\" transform (a.left - b.left) (a.top - b.top)\n if logEnabled() then log node.style.transform\n\nlet internal fixPosition (node: HTMLElement) =\n let s = Window.getComputedStyle (node)\n\n if (s.position <> \"absolute\" && s.position <> \"fixed\") then\n if logEnabled() then log $\"fixPosition {nodeStr node}\"\n let width = s.width\n let height = s.height\n let a = node.getBoundingClientRect ()\n node.style.position <- \"absolute\"\n node.style.width <- width\n node.style.height <- height\n addTransform node a\n\nlet internal computedStyleOpacity e =\n try\n float (Window.getComputedStyle(e).opacity)\n with\n | _ ->\n if logEnabled() then log (sprintf \"parse error: '%A'\" (Window.getComputedStyle(e).opacity))\n 1.0\n\nlet computedStyleTransform node =\n let style = Window.getComputedStyle (node)\n\n if style.transform = \"none\" then\n \"\"\n else\n style.transform\n\nopen Fable.Core.JS\n\n///\n/// Serialize tasks through an element. If the task already has a running task\n/// wait for it to complete before starting the new task. Otherwise, run the\n/// new task immediately\n///\nlet internal wait (el: HTMLElement) (andThen: unit -> Promise) =\n let key = NodeKey.Promise\n let run () = andThen () |> Interop.set el key\n\n if Interop.exists el key then\n let p = Interop.get> el key\n Interop.delete el key\n p.``then`` run |> ignore\n else\n run ()\n\nlet internal textNode (doc: Document) value : Node =\n let id = domId ()\n if logEnabled() then log $\"create \\\"{value}\\\" #{id}\"\n let n = doc.createTextNode (value)\n setSvId n id\n upcast n\n\n/// \n/// The width of the browser viewport\n/// \nlet viewportWidth () =\n Math.max (ifSetElse (document.documentElement.clientWidth, 0.0), ifSetElse (window.innerWidth, 0.0))\n\n/// \n/// The height of the browser viewport\n/// \nlet viewportHeight () =\n Math.max (ifSetElse (document.documentElement.clientHeight, 0.0), ifSetElse (window.innerHeight, 0.0))\n\n/// \ntype NodeListOf<'T> with\n /// Produce a seq<'T> from a NodeListOf<'T>. This is useful when working with document.querySelectorAll, for example\n member nodes.toSeq() =\n seq {\n for i in [ 0 .. nodes.length - 1 ] do\n yield nodes.[i]\n }\n\n/// \ntype NodeList with\n /// Produce a seq from a NodeList. This is useful when working with document.querySelectorAll, for example\n member nodes.toSeq() =\n seq {\n for i in [ 0 .. nodes.length - 1 ] do\n yield nodes.[i]\n }\n\nlet setHeadStylesheet (doc : Document) (url : string) =\n let head = findElement doc \"head\"\n let styleEl = doc.createElement(\"link\")\n head.appendChild( styleEl ) |> ignore\n styleEl.setAttribute( \"rel\", \"stylesheet\" )\n styleEl.setAttribute( \"href\", url ) |> ignore\n\nlet setHeadScript (doc : Document) (url : string) =\n let head = findElement doc \"head\"\n let el = doc.createElement(\"script\")\n head.appendChild( el ) |> ignore\n el.setAttribute( \"src\", url ) |> ignore\n\nlet setHeadEmbedScript (doc : Document) (source : string) =\n let head = findElement doc \"head\"\n let el = doc.createElement(\"script\")\n head.appendChild( el ) |> ignore\n el.appendChild(doc.createTextNode(source)) |> ignore\n\nlet setHeadTitle (doc : Document) (title : string) =\n let head = findElement doc \"head\"\n let existingTitle = findElement doc \"head>title\"\n\n if not (isNull existingTitle) then\n head.removeChild(existingTitle) |> ignore\n\n let titleEl = doc.createElement(\"title\")\n titleEl.appendChild( doc.createTextNode(title) ) |> ignore\n head.appendChild(titleEl) |> ignore\n","///\n/// The Sutil core engine. Definition for type SutilElement and functions that instantiate Browser DOM from SutilElement.\n/// \nmodule Sutil.Core\n\nopen System\nopen Browser.Dom\nopen Browser.Types\n\nopen DomHelpers\nopen Fable.Core.JsInterop\nopen Fable.Core\n\nlet private logEnabled() = Logging.isEnabled \"core\"\nlet private log s = Logging.log \"core\" s\n\n//let log s = Fable.Core.JS.console.log(s)\n\n/// \n/// A SutilEffect is the result of evaluating a SutilElement, and can be one of the following:\n///
\n///
SideEffect
\n///
This usually means the SutilElement was an attribute, and its evaluation resulted in a DOM call such as setAttribute, or classlist.add, etc
\n///
\n///
\n///
DomNode of Node
\n///
The SutilElement created a DOM Node. This is usually a Text or an HTMLElement
\n///
\n///
\n///
Group of SutilGroup
\n///
A SutilGroup has been created
\n///
\n///
\ntype SutilEffect =\n | SideEffect // Not set\n | DomNode of Node // A real browser DOM node\n | Group of SutilGroup // A group of SutilEffects\n member private this.mapDefault f defaultValue =\n match this with\n | DomNode n -> f n\n | Group n -> n.MapParent(f)\n | _ -> defaultValue\n\n member private this.iter f = this.mapDefault f ()\n\n member internal this.IsConnected() =\n match this with\n | SideEffect -> false\n | DomNode n -> nodeIsConnected n\n | Group g -> g.IsConnected()\n\n static member private GetGroups(node: Node) =\n let groups: (SutilGroup list) option = NodeKey.get node NodeKey.Groups\n groups\n\n static member private GetCreateGroups(node: Node) =\n let groups: (SutilGroup list) =\n NodeKey.getCreate node NodeKey.Groups (fun () -> [])\n\n groups\n\n static member private CleanupGroups(n: Node) =\n let groups = SutilEffect.GetGroups(n)\n\n groups\n |> Option.iter (\n List.iter (fun g -> g.Dispose())\n )\n\n NodeKey.clear n NodeKey.Groups\n\n member this.Register(childGroup: SutilGroup) =\n match this with\n | SideEffect -> ()\n | DomNode n ->\n let groups = SutilEffect.GetCreateGroups(n)\n\n if List.isEmpty groups then\n SutilEffect.RegisterUnsubscribe(n, (fun _ -> SutilEffect.CleanupGroups n))\n\n Interop.set n NodeKey.Groups (groups @ [ childGroup ])\n | Group g -> g.Register(childGroup)\n\n member internal this.PrettyPrint(label: string) =\n let rec pr level deep node =\n let indent l = String(' ', l * 4)\n let log l s = log ((indent l) + s)\n\n let rec prDomNode l (dn: Node) =\n let groups = SutilGroup.GroupsOf dn\n let l' = l + groups.Length\n\n groups\n |> List.iteri (fun i g -> log (l + i) $\"<'{g.Name}'> #{g.Id}\")\n\n match dn with\n | null -> log l \"(null)\"\n | t when isTextNode (t) -> log l $\"'{t.textContent}'\"\n | _ ->\n let e = dn :?> HTMLElement\n log l' (\"<\" + e.tagName + \"> #\" + (string (svId e)))\n\n if deep then\n children e |> Seq.iter (prDomNode (l' + 1))\n\n if Interop.exists e NodeKey.Groups then\n let groups: SutilGroup list = (Interop.get e NodeKey.Groups)\n\n for g in groups do\n prVNode (l' + 1) g\n\n and prVNode level v =\n let ch =\n String.Join(\n \",\",\n v.Children\n |> List.map (fun (c: SutilEffect) -> \"#\" + c.Id)\n )\n\n log\n level\n (\"group '\"\n + v.Name\n + \"' #\"\n + (v.Id)\n + \" children=[\"\n + ch\n + \"]\")\n\n match node with\n | SideEffect -> log level \"-\"\n | DomNode n -> prDomNode level n\n | Group v -> prVNode level v\n\n Browser.Dom.console.groupCollapsed (label)\n pr 0 true this\n Browser.Dom.console.groupEnd ()\n\n member internal this.Id\n with get (): string =\n match this with\n | SideEffect -> \"-\"\n | DomNode n -> svId n\n | Group v -> v.Id\n and set id =\n match this with\n | SideEffect -> ()\n | DomNode n -> setSvId n id\n | Group v -> v.Id <- id\n\n member internal this.IsSameNode(node: SutilEffect) =\n match this, node with\n | SideEffect, SideEffect -> true\n | DomNode a, DomNode b -> a.isSameNode (b)\n | Group a, Group b -> a.Id = b.Id\n | _ -> false\n\n member internal this.Document =\n match this with\n | SideEffect -> window.document\n | DomNode n -> n.ownerDocument\n | Group v -> v.Document\n\n member internal this.IsEmpty = this = SideEffect\n\n member internal this.PrevNode =\n match this with\n | SideEffect -> SideEffect\n | DomNode n -> DomNode(n.previousSibling)\n | Group v -> v.PrevNode\n\n member private this.NextDomNode =\n match this with\n | SideEffect -> null\n | DomNode node ->\n if isNull node then\n null\n else\n node.nextSibling\n | Group g -> g.NextDomNode\n\n // All descendant DOM nodes of this SutilEffect. Only groups recurse to their children,\n // we only want the first (parent) DOM node.\n member internal this.collectDomNodes() = this.DomNodes()\n\n member internal this.DomNodes() =\n match this with\n | SideEffect -> []\n | DomNode n -> [ n ]\n | Group v -> v.DomNodes()\n\n member public this.AsDomNode = this.mapDefault id null\n\n member node.Dispose() =\n match node with\n | Group v -> v.Dispose()\n | DomNode n -> unmount n // cleanupDeep n\n | _ -> ()\n\n static member RegisterDisposable(node: Node, d: IDisposable) : unit =\n Interop.set node NodeKey.Disposables (d :: getDisposables (node))\n\n static member RegisterDisposable(node: SutilEffect, d: IDisposable) : unit =\n if logEnabled() then log $\"register disposable on {node}\"\n match node with\n | SideEffect -> ()\n | DomNode n -> SutilEffect.RegisterDisposable(n, d)\n | Group v -> v.RegisterUnsubscribe(fun _ -> d.Dispose())\n\n static member RegisterUnsubscribe(node: Node, d: unit -> unit) : unit =\n SutilEffect.RegisterDisposable(node, Helpers.disposable d)\n\n static member RegisterUnsubscribe(node: SutilEffect, d: unit -> unit) : unit =\n SutilEffect.RegisterDisposable(node, Helpers.disposable d)\n\n static member private ReplaceGroup(parent: Node, nodes: Node list, existing: Node list) =\n if logEnabled() then log ($\"ReplaceGroup: nodes {nodes.Length} existing {existing.Length}\")\n\n let insertBefore =\n match existing with\n | [] -> null\n | [ x ] -> x.nextSibling\n | _ -> (existing |> List.last).nextSibling\n\n let remove n =\n cleanupDeep n\n\n if isNull (n.parentNode) then\n if logEnabled() then log $\"Warning: Node {nodeStr n} was unmounted unexpectedly\"\n else\n if (not (parent.isSameNode (n.parentNode))) then\n if logEnabled() then log $\"Warning: Node {nodeStr n} has unexpected parent\"\n\n DomEdit.removeChild n.parentNode n\n\n let insert n =\n DomEdit.insertBefore parent n insertBefore\n\n existing |> List.iter remove\n nodes |> List.iter insert //ids\n\n member internal this.InsertBefore(node: Node, refNode: Node) : unit =\n this.iter (fun parent -> DomEdit.insertBefore parent node refNode)\n\n member internal this.InsertAfter(node: SutilEffect, refNode: SutilEffect) =\n match this with\n\n | SideEffect ->\n JS.console.warn (\"InsertAfter called for empty node - disposing child\")\n node.Dispose()\n\n | DomNode parent ->\n if logEnabled() then log ($\"InsertAfter (parent = {this}: refNode={refNode} refNode.NextDomNode={nodeStr refNode.NextDomNode}\")\n let refDomNode = refNode.NextDomNode\n\n node.collectDomNodes ()\n |> List.iter (fun child -> DomEdit.insertBefore parent child refDomNode)\n\n | Group g -> g.InsertAfter(node, refNode)\n\n member internal this.InsertAfter(node: Node, refNode: Node) =\n this.iter (fun parent -> DomEdit.insertAfter parent node refNode)\n\n member internal this.ReplaceGroup(node: SutilEffect, existing: SutilEffect, insertBefore: Node) =\n if logEnabled() then log ($\"ReplaceGroup({node}, {existing})\")\n\n match this with\n | SideEffect -> ()\n | DomNode parent -> SutilEffect.ReplaceGroup(parent, node.collectDomNodes (), existing.collectDomNodes ())\n // Todo. Remove existing VirtualNodes contained in existing from parent\n // Todo. Add VirtualNodes in node to parent\n | Group parent -> parent.ReplaceChild(node, existing, insertBefore)\n\n member internal this.AppendChild(child: Node) =\n match this with\n | SideEffect -> ()\n | DomNode parent -> DomEdit.appendChild parent child\n | Group parent -> parent.AppendChild(DomNode child)\n\n member internal this.FirstDomNodeInOrAfter =\n match this with\n | SideEffect -> null\n | DomNode n -> n\n | Group g -> g.FirstDomNodeInOrAfter\n\n override this.ToString() =\n match this with\n | SideEffect -> \"SideEffect\"\n | DomNode n -> nodeStrShort n\n | Group v -> v.ToString()\n\n member internal this.Clear() = this.iter clear\n\n static member internal MakeGroup(name: string, parent: SutilEffect, prevInit: SutilEffect) =\n SutilGroup.Create(name, parent, prevInit)\n\n interface IDisposable with\n member __.Dispose() = __.Dispose()\n\nand SutilGroup private (_name, _parent, _prevInit) as this =\n let mutable id = domId () |> string\n let mutable _dispose: (unit -> unit) list = []\n let mutable _children = []\n let mutable _prev = _prevInit\n let mutable _childGroups = []\n\n let updateChildrenPrev () =\n //log($\"updating children {childStrs()}\")\n let mutable p = SideEffect\n\n for c in _children do\n match c with\n | Group v -> v.PrevNode <- p\n | _ -> ()\n\n p <- c\n\n let parentDomNode () =\n let rec findParent p =\n match p with\n | SideEffect -> null\n | DomNode n -> n\n | Group v -> findParent v.Parent\n\n findParent _parent\n\n do\n _parent.Register(this)\n ()\n with\n member this.Document = parentDomNode().ownerDocument\n\n static member internal Create(name, parent, prevInit) = SutilGroup(name, parent, prevInit)\n\n member internal this.IsConnected() = parentDomNode () |> nodeIsConnected\n\n member internal this.AssertIsConnected() =\n if (not <| this.IsConnected()) then\n failwith $\"Not connected: {this}\"\n\n override this.ToString() =\n _name\n + \"[\"\n + (String.Join(\",\", _children |> List.map (fun n -> n.ToString())))\n + \"]#\"\n + id\n\n member internal this.Parent = _parent\n\n member internal this.Register(childGroup: SutilGroup) =\n _childGroups <- childGroup :: _childGroups\n\n member internal this.PrevNode\n with get () = _prev\n and set v = _prev <- v\n\n member internal this.DomNodes() =\n this.Children\n |> List.collect (fun c -> c.DomNodes())\n\n member internal this.PrevDomNode =\n let result =\n match this.PrevNode with\n | DomNode n -> n\n | Group v ->\n match v.LastDomNode with\n | null -> v.PrevDomNode\n | n -> n\n | SideEffect -> // We're the first child\n match this.Parent with\n | Group pv -> pv.PrevDomNode\n | _ -> null\n\n if logEnabled() then log ($\"PrevDomNode of {this} -> '{nodeStr result}' PrevNode={this.PrevNode}\")\n result\n\n member internal this.NextDomNode =\n let result =\n match this.DomNodes() with\n // We don't have any nodes.\n | [] ->\n match this.PrevDomNode with\n | null -> // No DOM node before us, so our next node must be parent DOM node's first child\n match parentDomNode () with\n | null ->\n null\n | p ->\n p.firstChild\n | prev ->\n prev.nextSibling\n\n // We do have nodes, so next node is last node's next sibling\n | ns ->\n match ns |> List.last with\n | null ->\n null\n | last ->\n last.nextSibling\n result\n\n member internal this.FirstDomNode =\n match this.DomNodes() with\n | [] -> null\n | n :: ns -> n\n\n member internal this.LastDomNode =\n match this.DomNodes() with\n | [] -> null\n | ns -> ns |> List.last\n\n member internal this.FirstDomNodeInOrAfter =\n match this.FirstDomNode with\n | null -> this.NextDomNode\n | first -> first\n\n member internal this.MapParent<'T>(f: (Node -> 'T)) = f (parentDomNode ())\n\n member private this.OwnX(n: Node) = Interop.set n \"__sutil_snode\" this\n\n member private this.OwnX(child: SutilEffect) =\n match child with\n | DomNode n -> this.OwnX(n)\n | _ -> ()\n\n static member internal GroupOf(n: Node) : SutilGroup option = Interop.getOption n \"__sutil_snode\"\n\n static member internal GroupsOf(n: Node) : SutilGroup list =\n let rec parentsOf (r: SutilGroup list) =\n match r with\n | [] -> r\n | x :: xs ->\n match x.Parent with\n | Group g -> parentsOf (g :: r)\n | _ -> r\n\n let init n =\n match Interop.getOption n \"__sutil_snode\" with\n | None -> []\n | Some g -> [ g ]\n\n parentsOf (init n)\n\n member internal this.Clear() =\n // TODO clean up each node\n _children <- []\n\n member internal this.AddChild(child: SutilEffect) =\n this.OwnX(child)\n _children <- _children @ [ child ]\n updateChildrenPrev ()\n\n member internal this.AppendChild(child: SutilEffect) =\n match this.Parent with\n | SideEffect -> ()\n | _ ->\n let cn = this.DomNodes() |> List.map nodeStrShort\n\n let pn =\n this.PrevNode.DomNodes() |> List.map nodeStrShort\n\n let parent = parentDomNode ()\n let before = this.NextDomNode\n\n child.collectDomNodes ()\n |> List.iter (fun ch ->\n DomEdit.insertBefore parent ch before)\n this.OwnX(child)\n _children <- _children @ [ child ]\n updateChildrenPrev ()\n\n member private this.FirstChild =\n match _children with\n | [] -> SideEffect\n | x :: xs -> x\n\n member private this.ChildAfter(prev: SutilEffect) =\n match prev with\n | SideEffect -> this.FirstChild\n | _ ->\n let rec find (list: SutilEffect list) =\n match list with\n | [] ->\n SideEffect\n | x :: [] when x.IsSameNode(prev) ->\n SideEffect\n | x :: y :: _ when x.IsSameNode(prev) ->\n y\n | x :: xs ->\n find xs\n\n find _children\n\n member internal this.InsertAfter(child: SutilEffect, prev: SutilEffect) =\n this.InsertBefore(child, this.ChildAfter(prev))\n\n member private this.InsertBefore(child: SutilEffect, refNode: SutilEffect) =\n let refDomNode =\n match refNode with\n | SideEffect -> this.NextDomNode\n | _ -> refNode.FirstDomNodeInOrAfter\n\n if logEnabled() then log (\n $\"InsertBefore: child='{child}' before '{refNode}' refDomNode='{nodeStrShort refDomNode}' child.PrevNode='{child.PrevNode}'\"\n )\n\n let parent = parentDomNode ()\n let len = _children.Length\n\n for dnode in child.collectDomNodes () do\n DomEdit.insertBefore parent dnode refDomNode\n\n if refNode = SideEffect then\n this.AddChild(child)\n else\n _children <-\n _children\n |> List.fold\n (fun list ch ->\n match ch with\n | n when n.IsSameNode(refNode) -> list @ [ child ] @ [ n ]\n | _ -> list @ [ ch ])\n []\n\n this.OwnX(child)\n\n updateChildrenPrev ()\n\n if _children.Length = len then\n if logEnabled() then log ($\"Error: Child was not added\")\n\n member internal _.RemoveChild(child: SutilEffect) =\n let rec rc (p: SutilGroup) (c: SutilEffect) =\n match c with\n | SideEffect -> ()\n | DomNode n -> unmount n\n | Group g ->\n g.Children\n |> List.iter (fun gc -> g.RemoveChild(gc))\n\n g.Dispose()\n\n let newChildren =\n _children |> List.filter (fun n -> n <> child)\n rc this child\n _children <- newChildren\n updateChildrenPrev ()\n\n member internal this.ReplaceChild(child: SutilEffect, oldChild: SutilEffect, insertBefore: Node) =\n let deleteOldNodes () =\n let oldNodes = oldChild.collectDomNodes ()\n\n oldNodes\n |> List.iter (fun c ->\n if (isNull c.parentNode) then // We were unexpectedly removed from the DOM by something else (perhaps)\n if logEnabled() then log ($\"Node has no parent: {nodeStrShort c}\")\n else\n DomEdit.removeChild c.parentNode c)\n\n let nodes = child.collectDomNodes ()\n\n assertTrue (child <> SideEffect) \"Empty child for replace child\"\n\n if oldChild <> SideEffect then\n assertTrue\n (_children\n |> List.exists (fun c -> c.Id = oldChild.Id))\n \"Child not found\"\n\n child.Id <- oldChild.Id\n\n let parent = parentDomNode ()\n\n nodes\n |> List.iter (fun n ->\n DomEdit.insertBefore parent n insertBefore)\n\n deleteOldNodes ()\n\n match oldChild with\n | Group g -> g.Dispose()\n | _ -> ()\n\n if isNull insertBefore || oldChild = SideEffect then\n this.AddChild child\n else\n this.OwnX child\n\n _children <-\n _children\n |> List.map (fun n -> if n.Id = oldChild.Id then child else n)\n\n updateChildrenPrev ()\n\n member internal _.Name = _name\n\n member internal _.Id\n with get () = id\n and set id' = id <- id'\n\n member internal _.Children = _children\n\n member internal _.RegisterUnsubscribe d =\n _dispose <- _dispose @ [ d ]\n\n member _.Dispose() =\n _childGroups |> List.iter (fun c -> c.Dispose())\n _dispose |> List.iter (fun d -> d ())\n _dispose <- []\n\nlet private notifySutilEvents (parent : SutilEffect) (node : SutilEffect) =\n if (parent.IsConnected()) then\n node.collectDomNodes ()\n |> List.iter (fun n ->\n CustomDispatch<_>.dispatch(n,Event.Connected)\n CustomDispatch<_>.dispatch(n,Event.Mount)\n\n n\n |> DomHelpers.descendants\n |> Seq.filter DomHelpers.isElementNode\n |> Seq.iter (fun n -> CustomDispatch<_>.dispatch(n,Event.Mount))\n\n )\n\n/// \ntype DomAction =\n | Append // appendChild\n | Replace of SutilEffect * Node // bindings use this to replace the previous DOM fragment\n | Nothing\n\ntype PipelineFn = (BuildContext*SutilEffect) -> (BuildContext*SutilEffect)\n\n/// \nand BuildContext =\n { Document: Browser.Types.Document\n Parent: SutilEffect\n Previous: SutilEffect\n Action: DomAction\n MakeName: (string -> string)\n Class: string option\n Debug: bool\n Pipeline : PipelineFn\n }\n\n member this.ParentElement: HTMLElement = this.Parent.AsDomNode :?> HTMLElement\n member this.ParentNode: Node = this.Parent.AsDomNode\n\n member ctx.AddChild(node: SutilEffect) : unit =\n match ctx.Action with\n | Nothing -> ()\n\n | Append ->\n if logEnabled() then log $\"ctx.Append '{node}' to '{ctx.Parent}' after {ctx.Previous}\"\n ctx.Parent.InsertAfter(node, ctx.Previous)\n\n notifySutilEvents ctx.Parent node\n\n | Replace (existing, insertBefore) ->\n if logEnabled() then log $\"ctx.Replace '{existing}' with '{node}' before '{nodeStrShort insertBefore}'\"\n ctx.Parent.ReplaceGroup(node, existing, insertBefore)\n\n notifySutilEvents ctx.Parent node\n ()\n\n\nlet internal domResult (node: Node) = DomNode node\nlet internal sutilResult (node: SutilEffect) = node\n\nlet internal sideEffect (ctx, name) =\n let text () =\n let tn = ctx.Document.createTextNode name\n let d = ctx.Document.createElement (\"div\")\n DomEdit.appendChild d tn\n ctx.AddChild(DomNode d)\n d\n\n if ctx.Debug then\n DomNode(text ())\n else\n SideEffect\n/// \n/// Sutil's element type. This is an abstraction of DOM elements, attributes, events, etc.\n/// The type itself is a function that maps BuildContext to a SutilEffect,\n/// wrapped in a private record to isolate users from implementation details as much as possible:\n/// \n/// type SutilElement = private { Builder: BuildContext -> SutilEffect }\n/// \n///\n/// Examples of SutilElements:\n///\n///
    \n///
  • Html.div
  • \n///
  • Attr.className
  • \n///
  • Ev.onClick
  • \n///
  • Core.disposeOnUnmount
  • \n///
  • Core.host
  • \n///
\n///\n///
\ntype SutilElement private (name : string, children : seq, builder : BuildContext -> SutilEffect) =\n do ()\n static member Define( builder : BuildContext -> SutilEffect ) =\n SutilElement( \"\", [], builder )\n\n static member Define( name : string, builder : BuildContext -> SutilEffect ) =\n SutilElement( name, [], builder )\n\n static member Define( name : string, builder : BuildContext -> unit ) =\n SutilElement( name, [], (fun ctx -> ctx |> builder; sideEffect(ctx, name)) )\n\n static member Define( name : string, children : seq, builder : BuildContext -> Node ) =\n SutilElement( name, children, fun ctx -> ctx |> builder |> DomNode )\n\n member internal __.Builder = builder\n\nlet private defaultContext (parent : Node) =\n let gen = Helpers.makeIdGenerator ()\n\n { Document = parent.ownerDocument\n Parent = DomNode parent\n Previous = SideEffect\n Action = Append\n// StyleSheet = None\n Class = None\n Debug = false\n MakeName = fun baseName -> sprintf \"%s-%d\" baseName (gen ())\n Pipeline = id\n }\n\nlet private makeContext (parent: Node) =\n\n let getSutilClasses (e: HTMLElement) =\n let classes =\n [ 0 .. e.classList.length - 1 ]\n |> List.map (fun i -> e.classList.[i])\n |> List.filter (fun cls -> cls.StartsWith(\"sutil\"))\n classes\n\n { defaultContext parent with\n //Pipeline = pipeline\n\n // Ensures that if we create and mount DOM nodes onto a styled element, then\n // we inherit the stylesheet class on the mounted nodes\n Class =\n parent :?> HTMLElement\n |> Option.ofObj\n |> Option.bind (fun e -> getSutilClasses e |> List.tryHead)\n }\n\nlet private makeShadowContext (customElement: Node) =\n { defaultContext customElement with\n Action = Nothing\n }\n\n\nmodule internal ContextHelpers =\n let withStyleSheet sheet ctx : BuildContext = ctx //{ ctx with StyleSheet = Some sheet }\n\n let withDebug ctx : BuildContext = { ctx with Debug = true }\n\n let withPreProcess f (ctx:BuildContext) = { ctx with Pipeline = (f>>ctx.Pipeline) }\n let withPostProcess f (ctx:BuildContext) = { ctx with Pipeline = (ctx.Pipeline>>f) }\n\n let withParent parent ctx : BuildContext =\n { ctx with\n Parent = parent\n Action = Append }\n\n let withPrevious prev ctx : BuildContext = { ctx with Previous = prev }\n\n let withParentNode parent ctx : BuildContext = withParent (DomNode parent) ctx\n\n let withReplace (toReplace: SutilEffect, before: Node) ctx =\n { ctx with Action = Replace(toReplace, before) }\n\nlet internal errorNode (parent: SutilEffect) message : Node =\n let doc = parent.Document\n let d = doc.createElement (\"div\")\n DomEdit.appendChild d (doc.createTextNode ($\"sutil-error: {message}\"))\n parent.AppendChild(d)\n d.setAttribute (\"style\", \"color: red; padding: 4px; font-size: 10px;\")\n upcast d\n\n/// \n/// Instantiate a SutilElement.\n/// \nlet internal build (f: SutilElement) (ctx: BuildContext) =\n (ctx, f.Builder ctx)\n |> ctx.Pipeline\n |> snd\n\nlet internal buildOnly (f: SutilElement) (ctx: BuildContext) =\n f.Builder ctx\n\nlet private pipelineDispatchMount (ctx : BuildContext, result : SutilEffect) =\n match result with\n | DomNode n -> CustomDispatch<_>.dispatch(n,Event.Mount)\n | _ -> ()\n (ctx,result)\n\nlet private pipelineAddClass (ctx: BuildContext, result : SutilEffect) =\n match ctx.Class, result with\n | Some cls, DomNode _ ->\n result.AsDomNode\n |> applyIfElement (ClassHelpers.addToClasslist cls)\n | _ -> ()\n (ctx, result)\n\nlet internal buildChildren (xs: seq) (ctx: BuildContext) : unit =\n let e = ctx.Parent\n\n let mutable prev = SideEffect\n\n for x in xs do\n //log($\" buildChildren: prev={prev}\")\n match ctx |> ContextHelpers.withPrevious prev |> build x with\n | SideEffect -> ()\n | r -> prev <- r\n\n ()\n\n/// \n[]\ntype ShadowRoot() =\n member internal this.appendChild(el: Browser.Types.Node) = jsNative\n\nlet internal mountOnShadowRoot app (host: Node) : (unit -> unit) =\n let el = build app (makeShadowContext host)\n\n match el with\n | DomNode node ->\n let shadowRoot: ShadowRoot = host?shadowRoot\n shadowRoot.appendChild (node)\n | Group group ->\n let shadowRoot: ShadowRoot = host?shadowRoot\n\n for node in group.DomNodes() do\n shadowRoot.appendChild (node)\n | SideEffect -> failwith \"Custom components must return at least one node\"\n\n let dispose () =\n el.Dispose()\n\n dispose\n\nlet internal mount app ((op,eref) : MountPoint) =\n let node = eref.AsElement\n\n match op with\n | AppendTo ->\n build app (makeContext node)\n\n | InsertAfter ->\n build app { (makeContext node.parentElement) with Previous = DomNode node }\n","/// \n/// The core SutilElements required for building DOM, setting attributes, parsing HTML, managing resources etc.\n/// \nmodule Sutil.CoreElements\n\nopen System\nopen Sutil\nopen Sutil.DomHelpers\nopen Sutil.Core\nopen Browser.Types\nopen Browser.Dom\n\nlet private logEnabled() = Logging.isEnabled \"core-elements\"\nlet private log s = Logging.log \"core-elements\" s\n\nlet private makeElementWithSutilId (doc : Browser.Types.Document) (tag : string) (ns : string) =\n let e: Element = (if ns <> \"\" then doc.createElementNS (ns, tag) else (upcast document.createElement (tag)))\n let id = domId ()\n if logEnabled() then log (\"create <\" + tag + \"> #\" + string id)\n setSvId e id\n e\n\n/// \n/// Dispose all given items when the parent SutilElement is unmounted. Each item should implement System.IDisposable.\n///\n/// See also: \n/// \nlet disposeOnUnmount (ds: IDisposable list) =\n SutilElement.Define(\n \"disposeOnUnmount\",\n fun ctx ->\n ds\n |> List.iter (fun d -> SutilEffect.RegisterDisposable(ctx.Parent, d))\n )\n\n/// \n/// Call each function of type `(unit -> unit)` when the element is unmounted\n/// \nlet unsubscribeOnUnmount (ds: (unit -> unit) list) =\n SutilElement.Define(\n \"unsubscribeOnUnmount\",\n fun ctx ->\n ds |> List.iter (fun d -> SutilEffect.RegisterUnsubscribe(ctx.Parent, d))\n )\n\n/// \n/// Remove all existing DOM children before constructing the given `SutilElement`\n/// \nlet exclusive (f: SutilElement) =\n SutilElement.Define(\n \"exclusive\",\n fun ctx ->\n if logEnabled() then log $\"exclusive {ctx.Parent}\"\n ctx.Parent.Clear()\n ctx |> build f\n )\n\n/// \n/// Provides a hook for the build context. If you need to use this, please log an issue in the github repo for Sutil :-)\n/// \nlet hookContext (hook: BuildContext -> unit) : SutilElement =\n SutilElement.Define( \"hookContext\", hook )\n\nlet private _hookParent hook (ctx : BuildContext) = ctx.ParentElement |> hook\n\n/// \n/// Provides a hook for the parent DOM Node\n/// \nlet hookParent (hook: Node -> unit) : SutilElement =\n SutilElement.Define( \"hookParent\", _hookParent hook )\n\nlet private _hookElement hook (ctx : BuildContext) = ctx.ParentElement |> hook\n\n/// \n/// Provides a hook for the parent HTMLElement. This can be used, for example, to mount a React component. See https://sutil.dev/#documentation-hosting-react\n/// This will throw an InvalidCastException if the parent node is not an HTMLElement\n/// \nlet hookElement (hook: HTMLElement -> unit) =\n SutilElement.Define( \"hookElement\", _hookElement hook )\n\n/// \n/// Backwards compatibility. Obsolete\n/// \nlet host = hookElement\n\nlet internal setClass (name: string) =\n SutilElement.Define( \"setClass\", _hookElement (ClassHelpers.setClass name) )\n\nlet toggleClass (name: string) =\n SutilElement.Define( \"toggleClass\", _hookElement (ClassHelpers.toggleClass name) )\n\nlet addClass (name: string) =\n SutilElement.Define( \"addClass\", _hookElement (ClassHelpers.addToClasslist name) )\n\nlet removeClass (name: string) =\n SutilElement.Define( \"removeClass\", _hookElement (ClassHelpers.removeFromClasslist name) )\n\n// ----------------------------------------------------------------------------\n// Element builder with namespace\n\nlet elns ns tag (xs: seq) : SutilElement =\n SutilElement.Define(\n (sprintf \"<%s>\" tag),\n xs,\n fun ctx ->\n let e: Element = makeElementWithSutilId ctx.Document tag ns\n // Fable.Core.JS.console.log(buildLevelStr(), \"++ making \", nodeStrShort e)\n let snodeEl = DomNode e\n\n ctx\n |> ContextHelpers.withParent snodeEl\n |> buildChildren xs\n\n ctx.AddChild(DomNode e)\n\n // Effect 5\n //dispatchSimple e Event.ElementReady\n CustomDispatch.dispatch( e, Event.ElementReady )\n\n // Fable.Core.JS.console.log(buildLevelStr(), \"-- returning \", nodeStrShort e)\n upcast e\n )\n// ----------------------------------------------------------------------------\n// Element builder for DOM\n\nlet el tag (xs: seq) : SutilElement = elns \"\" tag xs\n\nlet keyedEl (tag: string) (key: string) (init: seq) (update: seq) =\n SutilElement.Define( \"keyedEl\", init,\n fun ctx ->\n let e: Element =\n let existing = ctx.Document.getElementById key\n\n if existing <> null then\n upcast existing\n else\n let svid = domId ()\n if logEnabled() then log (\"create <\" + tag + \"> #\" + string id)\n let e' = ctx.Document.createElement (tag)\n\n ctx\n |> ContextHelpers.withParent (DomNode e')\n |> buildChildren init\n\n setSvId e' svid\n e'.setAttribute (\"id\", key)\n upcast e'\n\n // Considering packing these effects into pipeline that lives on ctx.\n // User can then extend the pipeline, or even re-arrange. No immediate\n // need for it right now.\n\n // Effect 1\n ctx\n |> ContextHelpers.withParent (DomNode e)\n |> buildChildren update\n\n if e.parentElement = null then\n // Effect 40\n ctx.AddChild(DomNode e)\n // Effect 5\n CustomDispatch<_>.dispatch(e,Event.ElementReady)\n\n upcast e\n )\n\nlet internal elAppend selector (xs: seq) : SutilElement =\n SutilElement.Define(\"elAppend\",\n fun ctx ->\n let e: Element = ctx.Document.querySelector (selector)\n\n if isNull e then\n failwith (\"Not found \" + selector)\n\n let snodeEl = DomNode e\n\n let id = domId ()\n if logEnabled() then log (\"append <\" + selector + \"> #\" + string id)\n setSvId e id\n\n ctx\n |> ContextHelpers.withParent snodeEl\n |> buildChildren xs\n ()\n )\n\n/// Merge these `SutilElement`s with another `SutilElement`.\nlet inject (elements: SutilElement seq) (element: SutilElement) =\n SutilElement.Define( \"inject\",\n fun ctx ->\n let e = build element ctx\n\n e.collectDomNodes ()\n |> List.iter (fun n ->\n ctx\n |> ContextHelpers.withParent (DomNode n)\n |> buildChildren elements)\n e\n )\n\n/// Create a TextNode\nlet internal text value : SutilElement =\n SutilElement.Define( \"text\", [],\n fun ctx ->\n let tn = DomHelpers.textNode ctx.Document value\n ctx.AddChild(DomNode tn)\n tn\n )\n\n/// Set a property on the parent DOM Node\nlet setProperty<'T> (key: string) (value: 'T) =\n SutilElement.Define( sprintf \"setProperty %s = %A\" key value, _hookParent (fun n -> Interop.set n key value) )\n\n/// Backwards compatibility. Obsolete\nlet setValue = setProperty\n\n/// \n/// An empty element. This could be considered the unit value for a SutilElement. It is very similar in effect fragment [], since\n/// neither will add any HTMLElements. The main difference is that nothing will make no changes at all to the DOM, while fragment will\n/// create an internal SutilGroup that is registered on the parent element as a property.\n/// \nlet nothing =\n SutilElement.Define( \"nothing\", ignore )\n\nlet attr (name, value: obj) : SutilElement =\n SutilElement.Define( sprintf \"attr %s=%A\" name value,\n fun ctx ->\n let parent = ctx.Parent.AsDomNode\n\n try\n let e = parent :?> HTMLElement\n\n setAttribute e name value\n with\n | _ ->\n invalidOp (\n sprintf\n \"Cannot set attribute '%s' = '%A' on a %A %f %s\"\n name\n value\n parent\n parent.nodeType\n (parent :?> HTMLElement).tagName\n )\n )\n\n\n/// \n/// Raw html that will be parsed and added as a child of the parent element\n/// \nlet html (text : string) : SutilElement =\n SutilElement.Define( \"html\",\n fun ctx ->\n ctx.Parent.AsDomNode\n |> applyIfElement (fun el ->\n el.innerHTML <- text.Trim()\n\n ctx.Class\n |> Option.iter (fun cls -> visitElementChildren el (fun ch -> ClassHelpers.addToClasslist cls ch ))\n\n match Interop.get (ctx.ParentElement) (NodeKey.StyleClass) with\n | None -> ()\n | Some styleClass ->\n visitElementChildren el (fun ch ->\n ClassHelpers.addToClasslist styleClass ch\n //applyCustomRules ns ch\n )\n\n Event.notifyUpdated ctx.Document)\n\n let nodes = ctx.ParentNode.childNodes.toSeq() |> Seq.toArray\n\n if nodes.Length = 1 then\n nodes.[0] |> DomNode |> sutilResult\n else\n let group = SutilEffect.MakeGroup( \"html\", ctx.Parent, ctx.Previous )\n nodes |> Seq.iter (fun n -> group.AddChild(DomNode n))\n group |> Group |> sutilResult\n )\n\n//\n// Builds the element and passes to post-processing function\n//\nlet postProcess (f : SutilEffect -> SutilEffect) (view : SutilElement) : SutilElement =\n SutilElement.Define( \"postProcess\", fun ctx -> ctx |> build view |> f )\n\nlet postProcessElements (f : HTMLElement -> unit) (view : SutilElement) : SutilElement =\n let helper (se : SutilEffect) =\n Fable.Core.JS.console.log(\"post\", se.ToString())\n se.AsDomNode |> applyIfElement f\n se\n view |> postProcess helper\n\nlet listenToResize (dispatch: HTMLElement -> unit) : SutilElement =\n SutilElement.Define( \"listenToResize\",\n fun ctx ->\n let parent : HTMLElement = ctx.ParentElement\n let notify() = dispatch parent\n\n once Event.ElementReady parent <| fun _ ->\n SutilEffect.RegisterDisposable(parent,(ResizeObserver.getResizer parent).Subscribe( notify ))\n rafu notify\n )\n\nlet subscribe (source : System.IObservable<'T>) (handler : BuildContext -> 'T -> unit) =\n SutilElement.Define( \"subscribe\",\n fun ctx ->\n let unsub = source.Subscribe( handler ctx )\n SutilEffect.RegisterDisposable(ctx.Parent,unsub)\n )\n\n\nopen Fable.Core.JsInterop\n\nlet autofocus =\n SutilElement.Define( \"autofocus\",\n fun ctx ->\n let e = ctx.ParentElement\n rafu (fun _ ->\n e.focus()\n e?setSelectionRange(99999,99999)\n )\n )\n\n// Attributes that are either keywords or core functions\nlet id' n = attr(\"id\",n)\nlet type' n = attr(\"type\",n)\nlet for' n = attr(\"for\",n)\nlet class' n = attr(\"class\",n)\nlet unclass n = attr(\"class-\", n)\nlet unclass' n = attr(\"class-\", n)\n\nlet style (cssAttrs: (string * obj) seq) =\n attr(\"style\", cssAttrs |> Seq.map (fun (n,v) -> $\"{n}: {v};\") |> String.concat \"\")\n\nlet styleAppend (cssAttrs: (string * obj) seq) =\n attr(\"style+\", cssAttrs |> Seq.map (fun (n,v) -> $\"{n}: {v};\") |> String.concat \"\")\n\n// Events\n\ntype EventModifier =\n | Once\n | PreventDefault\n | StopPropagation\n | StopImmediatePropagation\n\n\nlet private _on (event : string) (fn : Event -> unit) (options : EventModifier list) (ctx : BuildContext) =\n let el = ctx.ParentNode\n let rec h (e:Event) =\n for opt in options do\n match opt with\n | Once -> el.removeEventListener(event,h)\n | PreventDefault -> e.preventDefault()\n | StopPropagation -> e.stopPropagation()\n | StopImmediatePropagation -> e.stopImmediatePropagation()\n fn(e)\n el.addEventListener(event, h)\n SutilEffect.RegisterUnsubscribe( ctx.Parent, fun _ -> el.removeEventListener(event,h) )\n\nlet on (event : string) (fn : Event -> unit) (options : EventModifier list) =\n SutilElement.Define( sprintf \"on%s\" event, _on event fn options)\n\nlet onCustomEvent<'T> (event: string) (fn: CustomEvent<'T> -> unit) (options: EventModifier list) =\n on event (unbox fn) options\n\nlet onKeyboard event (fn : KeyboardEvent -> unit) options =\n on event (unbox fn) options\n\nlet onMouse event (fn : MouseEvent -> unit) options =\n on event (unbox fn) options\n\nlet inline private _event x = (x :> obj :?> Event)\n\ntype InputEvent() =\n member x.event = _event x\n member x.inputElement =\n let _event x = (x :> obj :?> Event)\n asElement (_event x).target\n\nlet onInput (fn : InputEvent -> unit) options =\n on \"input\" (unbox fn) options\n\nlet onClick fn options = on \"click\" fn options\n\nlet onElementReady fn options = on Event.ElementReady fn options\nlet onMount fn options = on Event.Mount fn options\nlet onUnmount fn options = on Event.Unmount fn options\nlet onShow fn options = on Event.Show fn options\nlet onHide fn options = on Event.Hide fn options\n\nlet onKeyDown (fn : (KeyboardEvent -> unit)) options = onKeyboard \"keydown\" fn options\nlet onMouseMove fn options = onMouse \"mousemove\" fn options\n\nlet subscribeOnMount (f : unit -> (unit -> unit)) = onMount (fun e -> SutilEffect.RegisterUnsubscribe(asElement(e.target),f())) [Once]\n\n\n/// \n/// A collection of SutilElements as a single SutilElement. This is useful when we have a collection of\n/// SutilElements that we don't want to wrap in their own containing DOM element.\n///\n/// Compare with .\n/// \n/// https://sutil.dev/#documentation-html\nlet fragment (elements: SutilElement seq) =\n SutilElement.Define( \"fragment\",\n fun ctx ->\n let group =\n SutilEffect.MakeGroup(\"fragment\", ctx.Parent, ctx.Previous)\n\n let fragmentNode = Group group\n ctx.AddChild fragmentNode\n\n let childCtx =\n { ctx with\n Parent = fragmentNode\n Action = Append }\n\n childCtx |> buildChildren elements\n\n fragmentNode\n )\n\nlet internal declareResource<'T when 'T :> IDisposable> (init: unit -> 'T) (f: 'T -> unit) =\n SutilElement.Define( \"declareResource\",\n fun ctx ->\n let r = init ()\n SutilEffect.RegisterDisposable(ctx.Parent, r)\n f (r)\n )\n\nlet headStylesheet (url : string) : SutilElement =\n SutilElement.Define( \"headStyleSheet\",\n fun ctx -> DomHelpers.setHeadStylesheet ctx.Document url )\n\nlet headScript (url : string) : SutilElement =\n SutilElement.Define( \"headScript\",\n fun ctx -> DomHelpers.setHeadScript ctx.Document url )\n\nlet headEmbedScript (source : string) : SutilElement =\n SutilElement.Define( \"headEmbedScript\",\n fun ctx -> DomHelpers.setHeadEmbedScript ctx.Document source )\n\nlet headTitle (title : string) : SutilElement =\n SutilElement.Define( \"headTitle\",\n fun ctx -> DomHelpers.setHeadTitle ctx.Document title )\n","namespace Sutil\n\nopen System\nopen Browser.Dom\nopen System.Collections.Generic\nopen Browser.Types\nopen Interop\nopen Sutil.DomHelpers\n\n/// \n/// Stores are values that can\n/// - be updated\n/// - subscribed to\n///\n/// This module defines Sutil's Store type\n/// \n[]\nmodule ObservableStore =\n\n let private logEnabled() = Logging.isEnabled \"store\"\n let private log s = Logging.log \"store\" s\n\n type StoreCons<'Model, 'Store> = (unit -> 'Model) -> ('Model -> unit) -> 'Store * Update<'Model>\n\n module internal Helpers =\n type CmdHandler<'Msg>(handler, ?dispose) =\n member _.Handle(cmd: Cmd<'Msg>): unit = handler cmd\n member _.Dispose() = match dispose with Some d -> d () | None -> ()\n interface IDisposable with\n member this.Dispose() = this.Dispose()\n\n #if FABLE_COMPILER\n open Fable.Core\n\n []\n let fastEquals (x: 'T) (y: 'T): bool = jsNative\n\n let cmdHandler (dispatch: 'Msg -> unit): CmdHandler<'Msg> =\n new CmdHandler<_>(List.iter (fun cmd -> JS.setTimeout (fun _ -> cmd dispatch) 0 |> ignore))\n #else\n let fastEquals (x: 'T) (y: 'T): bool = Unchecked.equals x y\n\n let cmdHandler (dispatch: 'Msg -> unit): CmdHandler<'Msg> =\n let cts = new Threading.CancellationTokenSource()\n\n let mb = MailboxProcessor.Start(fun inbox -> async {\n while true do\n let! msg = inbox.Receive()\n dispatch msg\n }, cts.Token)\n\n new CmdHandler<_>(List.iter (fun cmd -> cmd mb.Post), fun _ -> cts.Cancel())\n #endif\n\n module Registry =\n open Fable.Core\n open Fable.Core.JsInterop\n\n let mutable nextId = 0\n let idToStore = new Dictionary()\n let storeToId = new Dictionary()\n //let disposed = new Dictionary()\n\n let notifyUpdateStore s v =\n CustomDispatch<_>.dispatch(Window.document,DomHelpers.Event.UpdateStore,{| Value = v |})\n\n let notifyMakeStore s =\n if storeToId.ContainsKey(s) then failwith \"Store is already registered!\"\n let id = nextId\n if logEnabled() then log $\"make store #{id}\"\n nextId <- nextId + 1\n idToStore.[id] <- s\n storeToId.[s] <- id\n CustomDispatch<_>.dispatch(Window.document,DomHelpers.Event.NewStore)\n\n let notifyDisposeStore (s:obj) =\n //if not (storeToId.ContainsKey(s)) then\n // if disposed.ContainsKey(s) then\n // failwith $\"Store {disposed.[s]} has already been disposed\"\n // else\n // failwith \"Store is unknown to registry\"\n\n let id = storeToId.[s]\n if logEnabled() then log($\"dispose store #{id}\")\n try\n idToStore.Remove(id) |> ignore\n storeToId.Remove(s) |> ignore\n //disposed.[s] <- id\n with\n | x -> Logging.error $\"disposing store {id}: {x.Message}\"\n\n let getStoreById id : IStoreDebugger =\n (idToStore.[id] :?> IStore).Debugger\n\n let controlBlock () : DevToolsControl.IControlBlock = {\n new DevToolsControl.IControlBlock with\n member _.ControlBlockVersion = 1\n member _.Version = { Major = 0; Minor = 1; Patch = 0 }\n member _.GetOptions() = DevToolsControl.Options\n member _.SetOptions(op) = DevToolsControl.Options <- op\n member _.GetStores() = storeToId.Values |> Seq.toArray\n member _.GetStoreById(id) = getStoreById id\n member _.GetLogCategories() = Logging.enabled |> Seq.map (fun k -> k.Key , k.Value) |> Seq.toArray\n member _.SetLogCategories(states) =\n Logging.initWith states\n member _.PrettyPrint(id) =\n (DomHelpers.findNodeWithSvId Window.document id) |> Option.iter (fun n -> (Core.DomNode n).PrettyPrint(\"Node #\" + string id))\n member _.GetMountPoints() = [| |]\n //Core.allMountPoints()\n // |> List.map (fun mp -> { new DevToolsControl.IMountPoint with\n // member _.Id = mp.MountId\n // member _.Remount() = mp.Mount() |> ignore })\n // |> List.toArray\n }\n\n let initialise (doc:Document) =\n DevToolsControl.initialise doc (controlBlock())\n\n let mutable private _nextStoreId = 0\n let private nextStoreId() =\n let n = _nextStoreId\n _nextStoreId <- n + 1\n n\n\n // Allow stores that can handle mutable 'Model types (eg, .FileList). In this\n // case we can pass (fun _ _ -> true)\n type Store<'Model>(init: unit -> 'Model, dispose: 'Model -> unit) =\n let mutable uid = 0\n let storeId = nextStoreId()\n let mutable name = \"store-\" + (string storeId)\n let mutable _modelInitialized = false\n let mutable _model = Unchecked.defaultof<_>\n let model() =\n if not _modelInitialized then\n _model <- init()\n _modelInitialized <- true\n _model\n let subscribers =\n Collections.Generic.Dictionary<_, IObserver<'Model>>()\n\n override _.ToString() = $\"#{storeId}={_model}\"\n\n member _.Value = model()\n\n member this.Update(f: 'Model -> 'Model) =\n let newModel = f (model())\n\n // Send every update. Use 'distinctUntilChanged' with fastEquals to get previous behaviour\n //Fable.Core.JS.console.log($\"Update {_model} -> {newModel}\")\n if not (Helpers.fastEquals _model newModel) then\n _model <- newModel\n\n if subscribers.Count > 0 then\n subscribers.Values\n |> Seq.iter (fun s -> s.OnNext(_model))\n\n member this.Subscribe(observer: IObserver<'Model>): IDisposable =\n let id = uid\n uid <- uid + 1\n\n if logEnabled() then log $\"subscribe {id}\"\n\n subscribers.Add(id, observer)\n\n // TODO: Is this the right way to report the model to the subscriber immediately?\n //Fable.Core.JS.setTimeout (fun _ -> observer.OnNext(model)) 0 |> ignore\n\n // Sutil depends on an immediate callback\n observer.OnNext(model())\n\n Helpers.disposable <| fun () ->\n if logEnabled() then log $\"unsubscribe {id}\"\n subscribers.Remove(id) |> ignore\n\n member this.Name with get() = name and set (v) = name <- v\n\n member this.Dispose() =\n subscribers.Values |> Seq.iter (fun x -> x.OnCompleted())\n subscribers.Clear()\n dispose (model())\n _model <- Unchecked.defaultof<_>\n Registry.notifyDisposeStore this\n\n interface IStore<'Model> with\n member this.Subscribe(observer: IObserver<'Model>) = this.Subscribe(observer)\n member this.Update(f) = this.Update(f)\n member this.Value = this.Value\n member this.Name with get() = this.Name and set (v:string) = this.Name <- v\n member this.Debugger = {\n new IStoreDebugger with\n member _.Value = upcast this.Value\n member _.NumSubscribers = subscribers.Count }\n\n interface IDisposable with\n member this.Dispose() = this.Dispose()\n\n let makeElmishWithCons (init: 'Props -> 'Model * Cmd<'Msg>)\n (update: 'Msg -> 'Model -> 'Model * Cmd<'Msg>)\n (dispose: 'Model -> unit)\n (cons: StoreCons<'Model, 'Store>)\n : 'Props -> 'Store * Dispatch<'Msg> =\n\n let mutable _storeDispatch: ('Store * Dispatch<'Msg>) option = None\n\n let mutable _cmdHandler = Unchecked.defaultof>\n //new Helpers.CmdHandler<'Msg>(ignore)\n\n fun props ->\n match _storeDispatch with\n | Some storeDispatch ->\n storeDispatch\n | None ->\n let store, storeUpdate =\n cons\n (fun () ->\n let m, cmd = init props\n _cmdHandler.Handle cmd\n m)\n (fun m ->\n _cmdHandler.Dispose()\n dispose m)\n\n let dispatch msg =\n let mutable _cmds = []\n storeUpdate(fun model ->\n let model, cmds = update msg model\n _cmds <- cmds\n model)\n _cmdHandler.Handle _cmds\n\n _cmdHandler <- Helpers.cmdHandler dispatch\n _storeDispatch <- Some(store, dispatch)\n store, dispatch\n\n let makeStore<'Model> (init:unit->'Model) (dispose:'Model->unit) =\n let s = new Store<'Model>(init,dispose)\n Registry.notifyMakeStore s\n // We have to delay this, because it will provoke a call through the subscribers, and _cmdHandler isn't set yet\n DomHelpers.rafu <| fun () -> s.Subscribe(Registry.notifyUpdateStore s) |> ignore\n s\n\n let makeElmishWithDocument (doc:Document) (init: 'Props -> 'Model * Cmd<'Msg>)\n (update: 'Msg -> 'Model -> 'Model * Cmd<'Msg>)\n (dispose: 'Model -> unit)\n : 'Props -> IStore<'Model> * Dispatch<'Msg> =\n\n //Registry.initialise doc\n\n makeElmishWithCons init update dispose (fun i d ->\n let s = makeStore i d\n let u = (fun f -> s.Update(f); DomHelpers.Event.notifyUpdated doc)\n upcast s, u)\n\n let makeElmishSimpleWithDocument (doc:Document) (init: 'Props -> 'Model)\n (update: 'Msg -> 'Model -> 'Model)\n (dispose: 'Model -> unit)\n : 'Props -> IStore<'Model> * Dispatch<'Msg> =\n\n //Registry.initialise doc\n\n let init p = init p, []\n let update msg model = update msg model, []\n makeElmishWithCons init update dispose (fun i d ->\n let s = makeStore i d\n let u = (fun f -> s.Update(f); DomHelpers.Event.notifyUpdated doc)\n upcast s, u)\n\n let makeElmishSimple i u d = makeElmishSimpleWithDocument document i u d\n let makeElmish i u d = makeElmishWithDocument document i u d\n\n\n#if USE_ELMISH_PROGRAM\ntype Program<'Arg,'Model,'Msg,'View> = private {\n Init : 'Arg -> 'Model * Cmd<'Msg>\n Update: 'Msg -> 'Model -> 'Model * Cmd<'Msg>\n Dispose: 'Model -> unit\n View: IStore<'Model> -> Dispatch<'Msg> -> 'View\n}\n\nmodule Program =\n let map mapInit mapUpdate mapView mapDispose program = {\n Init = mapInit program.Init\n Update = mapUpdate program.Update\n View = mapView program.View\n Dispose = mapDispose program.Dispose\n }\n\n let mkSimple init update view =\n {\n Init = fun () -> init(), Cmd.none\n Update = fun msg model -> update msg model, Cmd.none\n Dispose = ignore\n View = view\n }\n\n let mkProgram init update view =\n {\n Init = init\n Update = update\n Dispose = ignore\n View = view\n }\n\n let run element arg p =\n let model, dispatch = arg |> ObservableStore.makeElmish p.Init p.Update p.Dispose\n p.View model dispatch |> Core.mountElement element\n#endif\n","namespace Sutil\n\nopen System\n\n/// \n/// Helper functions for IObservables\n/// \n[]\nmodule Observable =\n\n []\n type BasicObserver<'T>() =\n\n let mutable stopped = false\n abstract Next : value : 'T -> unit\n abstract Error : error : exn -> unit\n abstract Completed : unit -> unit\n\n interface IObserver<'T> with\n member x.OnNext value =\n if not stopped then x.Next value\n member x.OnError e =\n if not stopped then stopped <- true; x.Error e\n member x.OnCompleted () =\n if not stopped then stopped <- true; x.Completed ()\n\n let zip<'A,'B> (a:IObservable<'A>) (b:IObservable<'B>) : IObservable<'A*'B> =\n { new System.IObservable<'A*'B> with\n member _.Subscribe( h : IObserver<'A*'B> ) =\n let mutable valueA = None\n let mutable valueB = None\n\n let notify() =\n // unfortunately, there's no Option.iter2\n Option.map2 (fun a b -> h.OnNext(a, b)) valueA valueB\n |> ignore\n\n let disposeA = a.Subscribe( fun v ->\n valueA <- Some v\n notify()\n )\n\n let disposeB = b.Subscribe( fun v ->\n valueB <- Some v\n notify()\n )\n\n Helpers.disposable (fun _ ->\n disposeA.Dispose()\n disposeB.Dispose()\n )\n }\n\n let distinctUntilChangedCompare<'T> (eq:'T -> 'T -> bool) (source:IObservable<'T>) : IObservable<'T> =\n { new System.IObservable<'T> with\n member _.Subscribe( h : IObserver<'T> ) =\n let mutable value = Unchecked.defaultof<'T>\n let mutable init = false\n\n // For Fable: isNull(unbox(None)) = true\n // Can't use Unchecked.defaultof<'T> as meaning \"init = false\"\n let safeEq next = init && eq value next\n\n let disposeA = source.Subscribe( fun next ->\n if not (safeEq next) then\n h.OnNext next\n value <- next\n init <- true\n )\n\n Helpers.disposable (fun _ ->\n disposeA.Dispose()\n )\n }\n\n let distinctUntilChanged<'T when 'T : equality> (source:IObservable<'T>) : IObservable<'T> =\n source |> distinctUntilChangedCompare (=)\n\n /// Determines whether an observable sequence contains a specified value\n /// which satisfies the given predicate\n let exists predicate (source: IObservable<'T>) =\n { new System.IObservable<'T> with\n member _.Subscribe( h : IObserver<'T> ) =\n let disposeA = source.Subscribe( fun x ->\n try h.OnNext (predicate x)\n with ex -> h.OnError ex\n )\n Helpers.disposable (fun _ -> disposeA.Dispose() )\n }\n\n /// Filters the observable elements of a sequence based on a predicate\n let filter predicate (source: IObservable<'T>) =\n { new System.IObservable<'T> with\n member _.Subscribe( h : IObserver<'T> ) =\n let disposeA = source.Subscribe( fun x ->\n try if predicate x then h.OnNext x\n with ex -> h.OnError ex\n )\n Helpers.disposable (fun _ -> disposeA.Dispose() )\n }\n\n //let choose (f : 'T option -> 'R option) (source:IObservable<'T option>) : IObservable<'R> =\n // { new System.IObservable<_> with\n // member _.Subscribe( h : IObserver<_> ) =\n // let disposeA = source.Subscribe( fun x ->\n // (try f x with ex -> h.OnError ex;None) |> Option.iter h.OnNext\n // )\n // Helpers.disposable (fun _ -> disposeA.Dispose() )\n // }\n","namespace Sutil\n\nopen System\nopen Browser.Dom\nopen Microsoft.FSharp.Core\nopen Browser.Types\nopen System.Collections.Generic\n\nmodule internal StoreHelpers =\n let disposable f =\n { new IDisposable with\n member _.Dispose() = f () }\n\n/// \n/// Functions for working with stores\n/// \n[]\nmodule Store =\n\n /// \n /// Create a new store\n /// \n /// \n /// \n /// let intStore: IStore<int> = Store.make 1\n ///\n /// let anonymousStore:\n /// IStore<{| prop1: int;\n /// prop2: string option |}>\n /// = Store.make {| prop1 = 10; prop2 = None |}\n /// (* After using the store *)\n /// intStore.Dispose()\n /// anonymousStore.Dispose()\n /// \n /// \n let make (modelInit: 'T) : IStore<'T> =\n let init () = modelInit\n let s = ObservableStore.makeStore init ignore\n upcast s\n\n /// \n /// Obtains the current value of the store\n /// \n /// \n /// let value = Store.get initStore\n /// value = 1 // true\n /// let value2 = Store.get anonymousStore\n /// Option.isNone value2.prop2 // true\n /// \n let get (store: IStore<'T>) : 'T = store.Value\n\n /// \n /// Replaces the current value of the store\n /// \n /// \n /// Store.set 2 intStore\n /// let value = Store.get intStore\n /// value = 1 // false\n /// \n let set (store: IStore<'T>) newValue : unit = store.Update(fun _ -> newValue)\n\n /// \n /// Provides a subscription that invokes a callback\n /// every time the store value is updated\n /// \n /// \n /// \n /// let subscription =\n /// Store.subscribe (fun value -> printfn $\"{value}\") intStore\n ///\n /// (* after you are done with the subscription *)\n ///\n /// subscription.Dispose()\n /// \n /// \n let subscribe (callback: 'T -> unit) (store: IObservable<'T>) = store.Subscribe(callback)\n\n /// \n /// Returns an observable that will resolve to the result of said callback\n /// \n /// \n /// \n /// let subscription: IObservable<string> =\n /// Store.map (fun value -> $\"{value}\") intStore\n ///\n /// (* after you are done with the subscription *)\n ///\n /// subscription.Dispose()\n /// \n /// \n let map<'A, 'B> (callback: 'A -> 'B) (store: IObservable<'A>) = store |> Observable.map callback\n\n /// \n /// Applies a predicate function to obtain an observable of the elements that evaluated to true\n /// \n /// \n /// \n /// let usersOver18: IObservable<string> =\n /// Store.filter (fun user -> user.age > 18) usersStore\n ///\n /// (* after you are done with the subscription *)\n ///\n /// over18.Dispose()\n /// \n /// \n let filter<'A> (predicate: 'A -> bool) (store: IObservable<'A>) = store |> Observable.filter predicate\n\n /// \n /// Provides an observable that will emit a value only when the updated store value is different from the previous one\n /// \n /// \n /// \n /// let store = Store.make 0\n /// let whenDistinct = Store.distinct store\n /// let sub1 = store.subscribe(printfn \"number: %i\")\n /// let sub2 = whenDistinct.subscribe(printfn \"number: %i\")\n /// Store.set 0 store // store emits\n /// Store.set 0 store // when distinct doesn't emit\n /// Store.set 1 store // both store and distinct emit\n /// Store.set 1 store // when distinct doesn't emit\n /// \n /// \n let distinct<'T when 'T: equality> (source: IObservable<'T>) = Observable.distinctUntilChanged source\n\n /// \n /// Helper function for commonly used form\n /// \n /// store |> Store.map (fun s -> s.Thing) |> Observable.distinctUntilChanged\n /// \n /// \n let mapDistinct (callback: 'A -> 'B) (store: IObservable<'A>) =\n store |> map callback |> distinct\n\n /// \n /// Merges two stores into a single tupled observable\n /// \n /// \n /// \n /// let tableInfo =\n /// Observable.zip\n /// (Strore.map(fun model -> model.rows) model)\n /// (Strore.map(fun model -> model.columns) model)\n ///\n /// (* once done with tableInfo *)\n ///\n /// tableInfo.Dispose()\n /// \n /// \n let zip source1 source2 = Observable.zip source1 source2\n\n let current (store: IObservable<'T>) =\n let mutable value = Unchecked.defaultof<'T>\n store.Subscribe(fun v -> value <- v).Dispose() // Works only when root observable is a store, or root responds immediately upon subscription\n value\n\n /// \n /// Takes a store and applies a mapping function then returns the value from the evaluated function\n /// \n /// \n /// This might be called foldMap\n /// \n /// \n /// \n /// let store: IStore<{| name: string; budget: decimal |}> =\n /// Store.make {| name = \"Frank\"; budget = 547863.26M |}\n ///\n /// let formattedBudget: string =\n /// Store.getMap\n /// (fun model -> sprintf $\"$ %0.00M{model.budget}\")\n /// store\n /// printf %\"Budget available: {formattedBudget}\n /// \n /// \n let getMap callback store = store |> get |> callback\n\n /// \n /// Invoke callback for each observed value from source\n /// \n /// \n /// \n /// source |> Store.iter (fun v -> printfn $\"New value: {v}\")\n /// \n /// \n let iter<'A> (callback: 'A -> unit) (source: IObservable<'A>) =\n subscribe callback source\n\n []\n let write<'A> (callback: 'A -> unit) (store: IObservable<'A>) = iter callback store |> ignore\n\n /// Modify the store by mapping its current value with a callback\n /// \n /// \n /// let store: IStore<int> = Store.make 2\n ///\n /// let squareMe() =\n /// Store.modify (fun model -> model * model) store\n ///\n /// Html.div [\n /// bindFragment store <| fun model -> text $\"The value is {model}\"\n /// Html.button [\n /// onClick (fun _ -> squareMe()) []\n /// text \"Square me\"\n /// ]\n /// ]\n /// \n /// \n let modify (callback: ('T -> 'T)) (store: Store<'T>) = store |> getMap callback |> set store\n\n /// \n /// Takes two observables and subscribes to both with a single callback,\n /// both values will be cached individually and\n /// on every notify they will be updated and emitted,\n /// every notification can come from any of the observables\n /// \n /// \n /// \n /// let player1Score = Store.make 0\n /// let player2Score = Store.make 0\n ///\n /// let printPlayerScores (score1: int * score2: int) =\n /// printfn $\"Player 1: {score1}\\nPlayer2: {score2}\"\n ///\n /// let scores =\n /// Store.subscribe2\n /// player1Score\n /// player2Score\n /// printPlayerScore\n /// (* Game Finished, dispose the observables *)\n /// scores.Dispose()\n /// \n /// \n let subscribe2<'A, 'B>\n (source1: IObservable<'A>)\n (source2: IObservable<'B>)\n (callback: ('A * 'B) -> unit)\n : System.IDisposable =\n // Requires that subscribe makes an initializing first callback. Otherwise, there will\n // be a missing value for A (say) when B (say) sends an update.\n let mutable initState = 0\n\n let mutable cachea : 'A = Unchecked.defaultof<'A>\n let mutable cacheb : 'B = Unchecked.defaultof<'B>\n\n let notify () =\n if initState = 2 then\n callback (cachea, cacheb)\n\n let unsuba =\n source1\n |> subscribe\n (fun v ->\n if initState = 0 then initState <- 1\n cachea <- v\n notify ())\n\n let unsubb =\n source2\n |> subscribe\n (fun v ->\n if initState = 1 then initState <- 2\n cacheb <- v\n notify ())\n\n if (initState <> 2) then\n console.log (\"Error: subscribe didn't initialize us\")\n failwith \"Subscribe didn't initialize us\"\n\n StoreHelpers.disposable\n <| fun () ->\n unsuba.Dispose()\n unsubb.Dispose()\n\n ///\n /// Creates a store and a dispatch method commonly used\n /// in elmish programs, this can be used to model more complex views that require better\n /// control flow and a predictable state.\n /// \n /// \n /// \n /// type State = { count: int }\n /// type Msg =\n /// | Increment\n /// | Decrement\n /// | Reset\n /// let init _ = { count = 0 }\n ///\n /// let upddate msg state =\n /// match msg with\n /// | Increment -> { state = state.count + 1 }\n /// | Decrement -> { state = state.count - 1 }\n /// | Reset -> { state = 0 }\n ///\n /// let view() =\n /// let state, dispatch = Store.makeElmishSimple init update ignore ()\n ///\n /// Html.article [\n /// disposeOnUnmount [ state ]\n /// bindFragment state <| fun state -> text $\"Count: {state.count}\"\n ///\n /// Html.button [ text \"Increment\"; onClick (fun _ -> dispatch) [] ]\n /// Html.button [ text \"Decrement\"; onClick (fun _ -> dispatch) [] ]\n /// Html.button [ text \"Reset\"; onClick (fun _ -> dispatch Reset) [] ]\n /// ]\n /// \n /// \n let makeElmishSimple<'Props, 'Model, 'Msg>\n (init: 'Props -> 'Model)\n (update: 'Msg -> 'Model -> 'Model)\n (dispose: 'Model -> unit)\n =\n ObservableStore.makeElmishSimple init update dispose\n\n ///\n /// Creates a store and a dispatch function as Store.makeElmishSimple\n /// the difference being that this version handles [Elmish commands](https://elmish.github.io/elmish/index.html#Commands)\n /// as well, generally used in more complex UIs given that with commands you can also handle\n /// asynchronous code like fetching resources from a server or calling any\n /// function that returns a promise or async\n /// \n /// \n /// \n /// type State = { count: int }\n /// type Msg =\n /// | Increment\n /// | Decrement\n /// | Reset\n /// | AsyncIncrement\n /// | AsyncDecrement\n /// let init _ = { count = 0 }, Cmd.ofMsg AsyncIncrement\n ///\n /// let wait1S () =\n /// async {\n /// do! Async.Sleep 1000\n /// }\n ///\n /// let upddate msg state =\n /// match msg with\n /// | Increment -> { state = state.count + 1 }, Cmd.none\n /// | Decrement -> { state = state.count - 1 }, Cmd.none\n /// | AsyncIncrement ->\n /// state, Cmd.ofAsync.perform () wait1S Increment\n /// | AsyncDecrement->\n /// state, Cmd.ofAsync.perform () wait1S Decrement\n /// | Reset -> { state = 0 } Cmd.none\n ///\n /// let view() =\n /// let state, dispatch = Store.makeElmish init update ignore ()\n ///\n /// Html.article [\n /// disposeOnUnmount [ state ]\n /// bindFragment state <| fun state -> text $\"Count: {state.count}\"\n ///\n /// Html.button [ text \"Increment\"; onClick (fun _ -> dispatch Increment) [] ]\n /// Html.button [ text \"Async Increment\"; onClick (fun _ -> dispatch AsyncIncrement) [] ]\n /// Html.button [ text \"Decrement\"; onClick (fun _ -> dispatch Decrement) [] ]\n /// Html.button [ text \"Async Decrement\"; onClick (fun _ -> dispatch AsyncDecrement) [] ]\n /// Html.button [ text \"Reset\"; onClick (fun _ -> dispatch Reset) [] ]\n /// ]\n /// \n /// \n let makeElmish<'Props, 'Model, 'Msg>\n (init: 'Props -> 'Model * Cmd<'Msg>)\n (update: 'Msg -> 'Model -> 'Model * Cmd<'Msg>)\n (dispose: 'Model -> unit)\n =\n ObservableStore.makeElmish init update dispose\n\n/// \n/// Operators for store functions\n/// \n[]\nmodule StoreOperators =\n\n /// \n /// Alias for Store.getMap, takes a store and applies a mapping function then returns the value from the evaluated function\n /// \n /// \n /// This might be called foldMap\n /// \n /// \n /// \n /// let store: IStore<{| name: string; budget: decimal |}> =\n /// Store.make {| name = \"Frank\"; budget = 547863.26M |}\n ///\n /// let formattedBudget: string =\n /// store |-> (fun model -> sprintf $\"$ %0.00M{model.budget}\")\n /// printf %\"Budget available: {formattedBudget}\n /// \n /// \n //let (|%>) s f = Store.map f s\n let (|->) s f = Store.getMap f s\n\n /// \n /// Alias for Store.map, returns an observable that will resolve to the result of said callback\n /// \n /// \n /// \n /// let subscription: IObservable<string> =\n /// intStore .> (fun value -> $\"{value}\")\n ///\n /// (* after you are done with the subscription *)\n ///\n /// subscription.Dispose()\n /// \n /// \n let (.>) s f = Store.map f s\n\n /// \n /// Alias for Store.mapDistinct\n /// \n let (.>>) s f = Store.mapDistinct f s\n\n /// \n /// Alias for Store.set, replaces the current value of the store\n /// \n /// \n /// \n /// intStore <~ 2\n /// let value = Store.get intStore\n /// value = 1 // false\n /// \n /// \n let (<~) s v = Store.set s v\n\n /// \n /// Alias for Store.set, replaces the current value of the store\n /// \n /// \n /// \n /// intStore <~- 2\n /// let value = Store.get intStore\n /// value = 1 // false\n /// \n /// \n let (<~-) s v = Store.set s v\n\n /// \n /// Alias for Store.set, replaces the current value of the store\n /// \n /// \n /// \n /// 2 -~> intStore\n /// let value = Store.get intStore\n /// value = 1 // false\n /// \n /// \n let (-~>) v s = Store.set s v\n\n /// \n /// Alias for Store.modify. Modify the store by mapping its current value with a callback\n /// \n /// \n /// \n /// let store: IStore<int> = Store.make 2\n ///\n /// let squareMe() =\n /// store <~= (fun model -> model * model)\n ///\n /// Html.div [\n /// bindFragment store <| fun model -> text $\"The value is {model}\"\n /// Html.button [\n /// onClick (fun _ -> squareMe()) []\n /// text \"Square me\"\n /// ]\n /// ]\n /// \n /// \n let (<~=) store map = Store.modify map store\n\n /// \n /// Alias for Store.modify Modify the store by mapping its current value with a callback\n /// \n /// \n /// \n /// let store: IStore<int> = Store.make 2\n ///\n /// let squareMe() =\n /// (fun model -> model * model) =~> store\n ///\n /// Html.div [\n /// bindFragment store <| fun model -> text $\"The value is {model}\"\n /// Html.button [\n /// onClick (fun _ -> squareMe()) []\n /// text \"Square me\"\n /// ]\n /// ]\n /// \n /// \n let (=~>) map store = Store.modify map store\n\n\n\n/// \n[]\nmodule StoreExtensions =\n\n // No uses of this in the Sutil code base.\n //\n // One issue is that 'u' should be cleaned up somewhere, so perhaps turning this into\n // a SutilElement would improve it?\n // Appears to return a store of indexes, whose value will always be the first observable\n // that is currently true\n //\n let firstOf (selectors: IObservable list) =\n let matches = new HashSet()\n let mutable current = -1\n let s = Store.make current\n\n let setMatch i state =\n if state then\n matches.Add(i) |> ignore\n else\n matches.Remove(i) |> ignore\n\n let scan () =\n let next =\n matches\n |> Seq.fold (fun a i -> if a < 0 || i < a then i else a) -1\n\n if (next <> current) then\n s <~ next\n current <- next\n\n selectors\n |> List.iteri\n (fun i pred ->\n let u =\n pred.Subscribe\n (fun state ->\n setMatch i state\n scan ())\n\n ())\n\n s\n","module Modules.Auth.Challenge\n\nopen Sutil\nopen Fable.Remoting.Client\nopen Auth\nopen IAuthApi\nopen Sutil.CoreElements\n\ntype private State =\n { AuthenticatingUser: Deferred }\n static member Default : State =\n { AuthenticatingUser = Deferred.NotStarted }\n\ntype private Message = AuthenticateUser of Query\n\nlet private init challenge state =\n state, Cmd.ofMsg (challenge |> Query.Started |> AuthenticateUser)\n\nlet private authApi =\n Remoting.createApi ()\n |> Remoting.withRouteBuilder IAuthApiRoute.builder\n |> Remoting.buildProxy\n\nlet private update startSession (msg: Message) (state: State) =\n match msg with\n | AuthenticateUser au ->\n match au with\n //| Query.Started _ when state.AuthenticatingUser = Deferred.InProgress -> state, Cmd.none\n | Query.Started challengeCode ->\n { state with AuthenticatingUser = Deferred.InProgress },\n remoteCallQuery\n authApi.challenge { Challenge = challengeCode } \n AuthenticateUser\n | Query.Completed res ->\n { state with AuthenticatingUser = Deferred.Resolved res },\n Cmd.ofEffect (fun _ -> startSession (Some res))\n | Query.Error err ->\n { state with AuthenticatingUser = Deferred.NotStarted },\n Cmd.ofEffect (fun _ -> startSession None)\n\nlet create (challenge: string) startSession =\n let state, _ =\n State.Default\n |> Store.makeElmish (init challenge) (update startSession) ignore\n\n fragment [\n disposeOnUnmount [ state ]\n ]\n","namespace Sutil.Toastr\n\n// Copyright (c) 2018 Zaid Ajaj, 2022 David Dawkins\n\nopen Sutil\nopen Fable.Core\nopen Fable.Core.JsInterop\n\n[]\ntype ToastPosition =\n | [] TopRight\n | [] BottomRight\n | [] TopLeft\n | [] BottomLeft\n | [] TopFullWidth\n | [] BottomFullWidth\n | [] TopCenter\n | [] BottomCenter\n\n[]\ntype Easing =\n | [] Swing\n | [] Linear\n\ntype ToastrOptions =\n []\n abstract timeout : int with get,set\n abstract closeButton : bool with get,set\n abstract newestOnTop : bool with get,set\n abstract progressBar : bool with get,set\n abstract preventDuplicates : bool with get,set\n abstract showDuration : int with get, set\n abstract hideDuration : int with get,set\n []\n abstract extendedTimeout : int with get,set\n []\n abstract position : ToastPosition with get, set\n abstract escapeHtml : bool with get, set\n abstract closeHtml : string with get,set\n abstract closeDuration : int with get,set\n []\n abstract rightToLeft : bool with get,set\n abstract showEasing : Easing with get, set\n abstract hideEasing : Easing with get,set\n abstract closeEasing : Easing with get,set\n abstract closeOnHover : bool with get,set\n abstract tapToDismiss : bool with get,set\n abstract onShown : (unit -> unit) with get,set\n abstract onHidden : (unit -> unit) with get,set\n abstract onclick : (unit -> unit) with get,set\n abstract onCloseClick : (unit -> unit) with get,set\n\n[]\nmodule Toastr =\n\n importAll \"toastr/build/toastr.min.css\"\n\n type ToastrMsg<'a> = {\n Message : string;\n Title: string;\n Options: ToastrOptions\n mutable Dispatcher : Option<'a -> unit>\n }\n\n let defaultMsg() = {\n Message = \"\";\n Title = \"\";\n Options = createEmpty\n Dispatcher = None\n }\n let private successToastWithTitle (msg: string) (title: string) (options: ToastrOptions) : unit = import \"success\" \"toastr\"\n let private errorToastWithTitle (msg: string) (title: string) (options: ToastrOptions) : unit = import \"error\" \"toastr\"\n let private infoToastWithTitle (msg: string) (title: string) (options: ToastrOptions) : unit = import \"info\" \"toastr\"\n let private warningToastWithTitle (msg: string) (title: string) (options: ToastrOptions) : unit = import \"warning\" \"toastr\"\n\n /// Sets the message of toast\n let message msg = { defaultMsg() with Message = msg }\n\n /// Sets the title of the toast\n let title title msg = { msg with Title = title }\n\n /// Defines the duration in ms after which the toast starts to disappear\n let timeout timeout msg =\n let options = msg.Options\n options.timeout <- timeout\n msg\n\n /// Sets the position of the toastr relative to the screen\n let position pos msg =\n let options = msg.Options\n options.position <- pos\n msg\n\n let extendedTimout t msg =\n let options = msg.Options\n options.extendedTimeout <- t\n msg\n\n /// Configures a message to be sent to the dispatch loop when the toast is clicked\n let onClick (nextMsg: 'a) (msg: ToastrMsg<'a>) =\n let options = msg.Options\n options.onclick <- fun () ->\n match msg.Dispatcher with\n | Some dispatcher -> dispatcher nextMsg\n | None -> ()\n msg\n\n /// Configures a message to be sent to the dispatch loop when the toast is shown on screen\n let onShown (nextMsg: 'a) (msg: ToastrMsg<'a>) =\n let options = msg.Options\n options.onShown <- fun () ->\n match msg.Dispatcher with\n | Some dispatcher -> dispatcher nextMsg\n | None -> ()\n msg\n\n let tapToDismiss msg =\n let options = msg.Options\n options.tapToDismiss <- true\n msg\n\n /// Configures a message to be sent to the dispatch loop when the toast has disappeared\n\n let onHidden (nextMsg: 'a) (msg: ToastrMsg<'a>) =\n let options = msg.Options\n options.onHidden <- fun () ->\n match msg.Dispatcher with\n | Some dispatcher -> dispatcher nextMsg\n | None -> ()\n msg\n\n /// Configures the toast to show a close button\n let showCloseButton msg =\n let options = msg.Options\n options.closeButton <- true\n msg\n\n /// Shows the progress bar of how long the toast will take before it disappears\n let withProgressBar msg =\n let options = msg.Options\n options.progressBar <- true\n msg\n\n /// Configures a message to be sent to the dispatch loop when the close button of toast is clicked\n let closeButtonClicked (nextMsg: 'a) (msg: ToastrMsg<'a>) =\n let options = msg.Options\n options.onCloseClick <- fun () ->\n match msg.Dispatcher with\n | Some dispatcher -> dispatcher nextMsg\n | None -> ()\n msg\n\n let hideEasing e msg =\n let options = msg.Options\n options.hideEasing <- e\n msg\n\n []\n let private mergeObjects x y = jsNative\n\n let mutable private options : ToastrOptions = import \"options\" \"toastr\"\n\n /// Overrides global options\n let overrideOptions (opts: ToastrOptions) : unit =\n options <- mergeObjects options opts\n\n /// Immediately remove current toasts without using animation\n let private remove() : unit = import \"remove\" \"toastr\"\n\n /// Remove current toasts using animation\n let private clear() : unit = import \"clear\" \"toastr\"\n\n /// Remove current toasts using animation\n let clearAll : Cmd<_> =\n [fun _ -> clear()]\n\n /// Remove current toasts using animation\n let removeAll : Cmd<_> =\n [fun _ -> remove()]\n\n /// Shows a success toast\n let success (msg: ToastrMsg<'msg>) : Cmd<'msg> =\n [fun dispatch ->\n msg.Dispatcher <- Some dispatch\n successToastWithTitle msg.Message msg.Title msg.Options]\n\n /// Shows an error taost\n let error (msg: ToastrMsg<'msg>) : Cmd<'msg> =\n [fun dispatch ->\n msg.Dispatcher <- Some dispatch\n errorToastWithTitle msg.Message msg.Title msg.Options]\n\n /// Shows an info toast\n let info (msg: ToastrMsg<'msg>) : Cmd<'msg> =\n [fun dispatch ->\n msg.Dispatcher <- Some dispatch\n infoToastWithTitle msg.Message msg.Title msg.Options]\n\n /// Shows a warning toast\n let warning (msg: ToastrMsg<'msg>) : Cmd<'msg> =\n [fun dispatch ->\n msg.Dispatcher <- Some dispatch\n warningToastWithTitle msg.Message msg.Title msg.Options]\n","[]\nmodule ToastrHelper\n\nopen Sutil.Toastr\nopen Shared.Validation\nopen Sutil\n\nlet getMessage appError =\n match appError with\n | ValidationError err -> [ err ]\n | AuthenticationError _ -> [ \"Invalid session\" ]\n | InvalidSession -> [ \"Invalid session\" ]\n | AuthorizationError -> [ \"You do not have permissions for this operation\" ]\n | ServerError err -> [ \"Server error\" ]\n\nlet getMessages (err: AggregateError) =\n let errs =\n match err with\n | AggregateError list -> list\n\n errs\n |> List.map getMessage\n |> List.concat\n |> List.rev\n\nlet applyCommonStyle msg =\n msg\n |> Toastr.position TopRight\n |> Toastr.timeout 3000\n |> Toastr.withProgressBar\n |> Toastr.hideEasing Easing.Swing\n |> Toastr.showCloseButton\n\nlet errorToastMsg msg =\n Toastr.message msg\n |> Toastr.title \"Error\"\n |> applyCommonStyle\n |> Toastr.error\n\nmodule Cmd =\n let errorToast (err: AggregateError) =\n err\n |> getMessages\n |> List.map errorToastMsg\n |> Cmd.batch\n\n let successToast message =\n Toastr.message message\n |> Toastr.title \"Success\"\n |> applyCommonStyle\n |> Toastr.success\n","namespace Feliz\r\n\r\nopen System\r\n\r\ntype HtmlEngine<'Node>\r\n /// Customizable HTML generator API.\r\n ///\r\n /// Make a node with tag name and children.\r\n /// Make a node from a string.\r\n /// Make an empty node.\r\n (mk: string -> 'Node seq -> 'Node, ofStr: string -> 'Node, empty: unit -> 'Node) =\r\n\r\n /// Create a custom element\r\n ///\r\n /// You generally shouldn't need to use this, if you notice an element missing please submit an issue.\r\n member _.custom (key: string, children: seq<'Node>) = mk key children\r\n /// The empty element, renders nothing on screen\r\n member _.none : 'Node = empty()\r\n\r\n member _.a (children: seq<'Node>) = mk \"a\" children\r\n\r\n member _.abbr (value: float) = mk \"abbr\" [Util.asString value |> ofStr]\r\n member _.abbr (value: int) = mk \"abbr\" [Util.asString value |> ofStr]\r\n member _.abbr (value: 'Node) = mk \"abbr\" [value]\r\n member _.abbr (value: string) = mk \"abbr\" [ofStr value]\r\n member _.abbr (children: seq<'Node>) = mk \"abbr\" children\r\n\r\n member _.address (value: float) = mk \"address\" [Util.asString value |> ofStr]\r\n member _.address (value: int) = mk \"address\" [Util.asString value |> ofStr]\r\n member _.address (value: 'Node) = mk \"address\" [value]\r\n member _.address (value: string) = mk \"address\" [ofStr value]\r\n member _.address (children: seq<'Node>) = mk \"address\" children\r\n\r\n member _.anchor (children: seq<'Node>) = mk \"a\" children\r\n\r\n member _.area (children: seq<'Node>) = mk \"area\" children\r\n\r\n member _.article (children: seq<'Node>) = mk \"article\" children\r\n\r\n member _.aside (children: seq<'Node>) = mk \"aside\" children\r\n\r\n member _.audio (children: seq<'Node>) = mk \"audio\" children\r\n\r\n member _.b (value: float) = mk \"b\" [Util.asString value |> ofStr]\r\n member _.b (value: int) = mk \"b\" [Util.asString value |> ofStr]\r\n member _.b (value: 'Node) = mk \"b\" [value]\r\n member _.b (value: string) = mk \"b\" [ofStr value]\r\n member _.b (children: seq<'Node>) = mk \"b\" children\r\n\r\n member _.base' (children: seq<'Node>) = mk \"base\" children\r\n\r\n member _.bdi (value: float) = mk \"bdi\" [Util.asString value |> ofStr]\r\n member _.bdi (value: int) = mk \"bdi\" [Util.asString value |> ofStr]\r\n member _.bdi (value: 'Node) = mk \"bdi\" [value]\r\n member _.bdi (value: string) = mk \"bdi\" [ofStr value]\r\n member _.bdi (children: seq<'Node>) = mk \"bdi\" children\r\n\r\n member _.bdo (value: float) = mk \"bdo\" [Util.asString value |> ofStr]\r\n member _.bdo (value: int) = mk \"bdo\" [Util.asString value |> ofStr]\r\n member _.bdo (value: 'Node) = mk \"bdo\" [value]\r\n member _.bdo (value: string) = mk \"bdo\" [ofStr value]\r\n member _.bdo (children: seq<'Node>) = mk \"bdo\" children\r\n\r\n member _.blockquote (value: float) = mk \"blockquote\" [Util.asString value |> ofStr]\r\n member _.blockquote (value: int) = mk \"blockquote\" [Util.asString value |> ofStr]\r\n member _.blockquote (value: 'Node) = mk \"blockquote\" [value]\r\n member _.blockquote (value: string) = mk \"blockquote\" [ofStr value]\r\n member _.blockquote (children: seq<'Node>) = mk \"blockquote\" children\r\n\r\n member _.body (value: float) = mk \"body\" [Util.asString value |> ofStr]\r\n member _.body (value: int) = mk \"body\" [Util.asString value |> ofStr]\r\n member _.body (value: 'Node) = mk \"body\" [value]\r\n member _.body (value: string) = mk \"body\" [ofStr value]\r\n member _.body (children: seq<'Node>) = mk \"body\" children\r\n\r\n member _.br (children: seq<'Node>) = mk \"br\" children\r\n\r\n member _.button (children: seq<'Node>) = mk \"button\" children\r\n\r\n member _.canvas (children: seq<'Node>) = mk \"canvas\" children\r\n\r\n member _.caption (value: float) = mk \"caption\" [Util.asString value |> ofStr]\r\n member _.caption (value: int) = mk \"caption\" [Util.asString value |> ofStr]\r\n member _.caption (value: 'Node) = mk \"caption\" [value]\r\n member _.caption (value: string) = mk \"caption\" [ofStr value]\r\n member _.caption (children: seq<'Node>) = mk \"caption\" children\r\n\r\n member _.cite (value: float) = mk \"cite\" [Util.asString value |> ofStr]\r\n member _.cite (value: int) = mk \"cite\" [Util.asString value |> ofStr]\r\n member _.cite (value: 'Node) = mk \"cite\" [value]\r\n member _.cite (value: string) = mk \"cite\" [ofStr value]\r\n member _.cite (children: seq<'Node>) = mk \"cite\" children\r\n\r\n // member _.code (value: bool) = mk \"code\" value\r\n member _.code (value: float) = mk \"code\" [Util.asString value |> ofStr]\r\n member _.code (value: int) = mk \"code\" [Util.asString value |> ofStr]\r\n member _.code (value: 'Node) = mk \"code\" [value]\r\n member _.code (value: string) = mk \"code\" [ofStr value]\r\n member _.code (children: seq<'Node>) = mk \"code\" children\r\n\r\n member _.col (children: seq<'Node>) = mk \"col\" children\r\n\r\n member _.colgroup (children: seq<'Node>) = mk \"colgroup\" children\r\n\r\n member _.data (value: float) = mk \"data\" [Util.asString value |> ofStr]\r\n member _.data (value: int) = mk \"data\" [Util.asString value |> ofStr]\r\n member _.data (value: 'Node) = mk \"data\" [value]\r\n member _.data (value: string) = mk \"data\" [ofStr value]\r\n member _.data (children: seq<'Node>) = mk \"data\" children\r\n\r\n member _.datalist (value: float) = mk \"datalist\" [Util.asString value |> ofStr]\r\n member _.datalist (value: int) = mk \"datalist\" [Util.asString value |> ofStr]\r\n member _.datalist (value: 'Node) = mk \"datalist\" [value]\r\n member _.datalist (value: string) = mk \"datalist\" [ofStr value]\r\n member _.datalist (children: seq<'Node>) = mk \"datalist\" children\r\n\r\n member _.dd (value: float) = mk \"dd\" [Util.asString value |> ofStr]\r\n member _.dd (value: int) = mk \"dd\" [Util.asString value |> ofStr]\r\n member _.dd (value: 'Node) = mk \"dd\" [value]\r\n member _.dd (value: string) = mk \"dd\" [ofStr value]\r\n member _.dd (children: seq<'Node>) = mk \"dd\" children\r\n\r\n member _.del (value: float) = mk \"del\" [Util.asString value |> ofStr]\r\n member _.del (value: int) = mk \"del\" [Util.asString value |> ofStr]\r\n member _.del (value: 'Node) = mk \"del\" [value]\r\n member _.del (value: string) = mk \"del\" [ofStr value]\r\n member _.del (children: seq<'Node>) = mk \"del\" children\r\n\r\n member _.details (children: seq<'Node>) = mk \"details\" children\r\n\r\n member _.dfn (value: float) = mk \"dfn\" [Util.asString value |> ofStr]\r\n member _.dfn (value: int) = mk \"dfn\" [Util.asString value |> ofStr]\r\n member _.dfn (value: 'Node) = mk \"dfn\" [value]\r\n member _.dfn (value: string) = mk \"dfn\" [ofStr value]\r\n member _.dfn (children: seq<'Node>) = mk \"dfn\" children\r\n\r\n member _.dialog (value: float) = mk \"dialog\" [Util.asString value |> ofStr]\r\n member _.dialog (value: int) = mk \"dialog\" [Util.asString value |> ofStr]\r\n member _.dialog (value: 'Node) = mk \"dialog\" [value]\r\n member _.dialog (value: string) = mk \"dialog\" [ofStr value]\r\n member _.dialog (children: seq<'Node>) = mk \"dialog\" children\r\n\r\n member _.div (value: float) = mk \"div\" [Util.asString value |> ofStr]\r\n member _.div (value: int) = mk \"div\" [Util.asString value |> ofStr]\r\n member _.div (value: 'Node) = mk \"div\" [value]\r\n member _.div (value: string) = mk \"div\" [ofStr value]\r\n /// The `
` tag defines a division or a section in an HTML document\r\n member _.div (children: seq<'Node>) = mk \"div\" children\r\n\r\n member _.dl (children: seq<'Node>) = mk \"dl\" children\r\n\r\n member _.dt (value: float) = mk \"dt\" [Util.asString value |> ofStr]\r\n member _.dt (value: int) = mk \"dt\" [Util.asString value |> ofStr]\r\n member _.dt (value: 'Node) = mk \"dt\" [value]\r\n member _.dt (value: string) = mk \"dt\" [ofStr value]\r\n member _.dt (children: seq<'Node>) = mk \"dt\" children\r\n\r\n member _.em (value: float) = mk \"em\" [Util.asString value |> ofStr]\r\n member _.em (value: int) = mk \"em\" [Util.asString value |> ofStr]\r\n member _.em (value: 'Node) = mk \"em\" [value]\r\n member _.em (value: string) = mk \"em\" [ofStr value]\r\n member _.em (children: seq<'Node>) = mk \"em\" children\r\n\r\n member _.fieldSet (children: seq<'Node>) = mk \"fieldset\" children\r\n\r\n member _.figcaption (children: seq<'Node>) = mk \"figcaption\" children\r\n\r\n member _.figure (children: seq<'Node>) = mk \"figure\" children\r\n\r\n member _.footer (children: seq<'Node>) = mk \"footer\" children\r\n\r\n member _.form (children: seq<'Node>) = mk \"form\" children\r\n\r\n member _.h1 (value: float) = mk \"h1\" [Util.asString value |> ofStr]\r\n member _.h1 (value: int) = mk \"h1\" [Util.asString value |> ofStr]\r\n member _.h1 (value: 'Node) = mk \"h1\" [value]\r\n member _.h1 (value: string) = mk \"h1\" [ofStr value]\r\n member _.h1 (children: seq<'Node>) = mk \"h1\" children\r\n member _.h2 (value: float) = mk \"h2\" [Util.asString value |> ofStr]\r\n member _.h2 (value: int) = mk \"h2\" [Util.asString value |> ofStr]\r\n member _.h2 (value: 'Node) = mk \"h2\" [value]\r\n member _.h2 (value: string) = mk \"h2\" [ofStr value]\r\n member _.h2 (children: seq<'Node>) = mk \"h2\" children\r\n\r\n member _.h3 (value: float) = mk \"h3\" [Util.asString value |> ofStr]\r\n member _.h3 (value: int) = mk \"h3\" [Util.asString value |> ofStr]\r\n member _.h3 (value: 'Node) = mk \"h3\" [value]\r\n member _.h3 (value: string) = mk \"h3\" [ofStr value]\r\n member _.h3 (children: seq<'Node>) = mk \"h3\" children\r\n\r\n member _.h4 (value: float) = mk \"h4\" [Util.asString value |> ofStr]\r\n member _.h4 (value: int) = mk \"h4\" [Util.asString value |> ofStr]\r\n member _.h4 (value: 'Node) = mk \"h4\" [value]\r\n member _.h4 (value: string) = mk \"h4\" [ofStr value]\r\n member _.h4 (children: seq<'Node>) = mk \"h4\" children\r\n\r\n member _.h5 (value: float) = mk \"h5\" [Util.asString value |> ofStr]\r\n member _.h5 (value: int) = mk \"h5\" [Util.asString value |> ofStr]\r\n member _.h5 (value: 'Node) = mk \"h5\" [value]\r\n member _.h5 (value: string) = mk \"h5\" [ofStr value]\r\n member _.h5 (children: seq<'Node>) = mk \"h5\" children\r\n\r\n member _.h6 (value: float) = mk \"h6\" [Util.asString value |> ofStr]\r\n member _.h6 (value: int) = mk \"h6\" [Util.asString value |> ofStr]\r\n member _.h6 (value: 'Node) = mk \"h6\" [value]\r\n member _.h6 (value: string) = mk \"h6\" [ofStr value]\r\n member _.h6 (children: seq<'Node>) = mk \"h6\" children\r\n\r\n member _.head (children: seq<'Node>) = mk \"head\" children\r\n\r\n member _.header (children: seq<'Node>) = mk \"header\" children\r\n\r\n member _.hr (children: seq<'Node>) = mk \"hr\" children\r\n\r\n member _.html (children: seq<'Node>) = mk \"html\" children\r\n\r\n member _.i (value: float) = mk \"i\" [Util.asString value |> ofStr]\r\n member _.i (value: int) = mk \"i\" [Util.asString value |> ofStr]\r\n member _.i (value: 'Node) = mk \"i\" [value]\r\n member _.i (value: string) = mk \"i\" [ofStr value]\r\n member _.i (children: seq<'Node>) = mk \"i\" children\r\n\r\n member _.iframe (children: seq<'Node>) = mk \"iframe\" children\r\n\r\n member _.img (children: seq<'Node>) = mk \"img\" children\r\n\r\n member _.input (children: seq<'Node>) = mk \"input\" children\r\n\r\n member _.ins (value: float) = mk \"ins\" [Util.asString value |> ofStr]\r\n member _.ins (value: int) = mk \"ins\" [Util.asString value |> ofStr]\r\n member _.ins (value: 'Node) = mk \"ins\" [value]\r\n member _.ins (value: string) = mk \"ins\" [ofStr value]\r\n member _.ins (children: seq<'Node>) = mk \"ins\" children\r\n\r\n member _.kbd (value: float) = mk \"kbd\" [Util.asString value |> ofStr]\r\n member _.kbd (value: int) = mk \"kbd\" [Util.asString value |> ofStr]\r\n member _.kbd (value: 'Node) = mk \"kbd\" [value]\r\n member _.kbd (value: string) = mk \"kbd\" [ofStr value]\r\n member _.kbd (children: seq<'Node>) = mk \"kbd\" children\r\n\r\n member _.label (children: seq<'Node>) = mk \"label\" children\r\n\r\n member _.legend (value: float) = mk \"legend\" [Util.asString value |> ofStr]\r\n member _.legend (value: int) = mk \"legend\" [Util.asString value |> ofStr]\r\n member _.legend (value: 'Node) = mk \"legend\" [value]\r\n member _.legend (value: string) = mk \"legend\" [ofStr value]\r\n member _.legend (children: seq<'Node>) = mk \"legend\" children\r\n\r\n member _.li (value: float) = mk \"li\" [Util.asString value |> ofStr]\r\n member _.li (value: int) = mk \"li\" [Util.asString value |> ofStr]\r\n member _.li (value: 'Node) = mk \"li\" [value]\r\n member _.li (value: string) = mk \"li\" [ofStr value]\r\n member _.li (children: seq<'Node>) = mk \"li\" children\r\n\r\n member _.listItem (value: float) = mk \"li\" [Util.asString value |> ofStr]\r\n member _.listItem (value: int) = mk \"li\" [Util.asString value |> ofStr]\r\n member _.listItem (value: 'Node) = mk \"li\" [value]\r\n member _.listItem (value: string) = mk \"li\" [ofStr value]\r\n member _.listItem (children: seq<'Node>) = mk \"li\" children\r\n\r\n member _.main (children: seq<'Node>) = mk \"main\" children\r\n\r\n member _.map (children: seq<'Node>) = mk \"map\" children\r\n\r\n member _.mark (value: float) = mk \"mark\" [Util.asString value |> ofStr]\r\n member _.mark (value: int) = mk \"mark\" [Util.asString value |> ofStr]\r\n member _.mark (value: 'Node) = mk \"mark\" [value]\r\n member _.mark (value: string) = mk \"mark\" [ofStr value]\r\n member _.mark (children: seq<'Node>) = mk \"mark\" children\r\n\r\n member _.metadata (children: seq<'Node>) = mk \"metadata\" children\r\n\r\n member _.meter (value: float) = mk \"meter\" [Util.asString value |> ofStr]\r\n member _.meter (value: int) = mk \"meter\" [Util.asString value |> ofStr]\r\n member _.meter (value: 'Node) = mk \"meter\" [value]\r\n member _.meter (value: string) = mk \"meter\" [ofStr value]\r\n member _.meter (children: seq<'Node>) = mk \"meter\" children\r\n\r\n member _.nav (children: seq<'Node>) = mk \"nav\" children\r\n\r\n member _.noscript (children: seq<'Node>) = mk \"noscript\" children\r\n\r\n member _.object (children: seq<'Node>) = mk \"object\" children\r\n\r\n member _.ol (children: seq<'Node>) = mk \"ol\" children\r\n\r\n member _.option (value: float) = mk \"option\" [Util.asString value |> ofStr]\r\n member _.option (value: int) = mk \"option\" [Util.asString value |> ofStr]\r\n member _.option (value: 'Node) = mk \"option\" [value]\r\n member _.option (value: string) = mk \"option\" [ofStr value]\r\n member _.option (children: seq<'Node>) = mk \"option\" children\r\n\r\n member _.optgroup (children: seq<'Node>) = mk \"optgroup\" children\r\n\r\n member _.orderedList (children: seq<'Node>) = mk \"ol\" children\r\n\r\n member _.output (value: float) = mk \"output\" [Util.asString value |> ofStr]\r\n member _.output (value: int) = mk \"output\" [Util.asString value |> ofStr]\r\n member _.output (value: 'Node) = mk \"output\" [value]\r\n member _.output (value: string) = mk \"output\" [ofStr value]\r\n member _.output (children: seq<'Node>) = mk \"output\" children\r\n\r\n member _.p (value: float) = mk \"p\" [Util.asString value |> ofStr]\r\n member _.p (value: int) = mk \"p\" [Util.asString value |> ofStr]\r\n member _.p (value: 'Node) = mk \"p\" [value]\r\n member _.p (value: string) = mk \"p\" [ofStr value]\r\n member _.p (children: seq<'Node>) = mk \"p\" children\r\n\r\n member _.paragraph (value: float) = mk \"p\" [Util.asString value |> ofStr]\r\n member _.paragraph (value: int) = mk \"p\" [Util.asString value |> ofStr]\r\n member _.paragraph (value: 'Node) = mk \"p\" [value]\r\n member _.paragraph (value: string) = mk \"p\" [ofStr value]\r\n member _.paragraph (children: seq<'Node>) = mk \"p\" children\r\n\r\n member _.picture (children: seq<'Node>) = mk \"picture\" children\r\n\r\n // member _.pre (value: bool) = mk \"pre\" value\r\n member _.pre (value: float) = mk \"pre\" [Util.asString value |> ofStr]\r\n member _.pre (value: int) = mk \"pre\" [Util.asString value |> ofStr]\r\n member _.pre (value: 'Node) = mk \"pre\" [value]\r\n member _.pre (value: string) = mk \"pre\" [ofStr value]\r\n member _.pre (children: seq<'Node>) = mk \"pre\" children\r\n\r\n member _.progress (children: seq<'Node>) = mk \"progress\" children\r\n\r\n member _.q (children: seq<'Node>) = mk \"q\" children\r\n\r\n member _.rb (value: float) = mk \"rb\" [Util.asString value |> ofStr]\r\n member _.rb (value: int) = mk \"rb\" [Util.asString value |> ofStr]\r\n member _.rb (value: 'Node) = mk \"rb\" [value]\r\n member _.rb (value: string) = mk \"rb\" [ofStr value]\r\n member _.rb (children: seq<'Node>) = mk \"rb\" children\r\n\r\n member _.rp (value: float) = mk \"rp\" [Util.asString value |> ofStr]\r\n member _.rp (value: int) = mk \"rp\" [Util.asString value |> ofStr]\r\n member _.rp (value: 'Node) = mk \"rp\" [value]\r\n member _.rp (value: string) = mk \"rp\" [ofStr value]\r\n member _.rp (children: seq<'Node>) = mk \"rp\" children\r\n\r\n member _.rt (value: float) = mk \"rt\" [Util.asString value |> ofStr]\r\n member _.rt (value: int) = mk \"rt\" [Util.asString value |> ofStr]\r\n member _.rt (value: 'Node) = mk \"rt\" [value]\r\n member _.rt (value: string) = mk \"rt\" [ofStr value]\r\n member _.rt (children: seq<'Node>) = mk \"rt\" children\r\n\r\n member _.rtc (value: float) = mk \"rtc\" [Util.asString value |> ofStr]\r\n member _.rtc (value: int) = mk \"rtc\" [Util.asString value |> ofStr]\r\n member _.rtc (value: 'Node) = mk \"rtc\" [value]\r\n member _.rtc (value: string) = mk \"rtc\" [ofStr value]\r\n member _.rtc (children: seq<'Node>) = mk \"rtc\" children\r\n\r\n member _.ruby (value: float) = mk \"ruby\" [Util.asString value |> ofStr]\r\n member _.ruby (value: int) = mk \"ruby\" [Util.asString value |> ofStr]\r\n member _.ruby (value: 'Node) = mk \"ruby\" [value]\r\n member _.ruby (value: string) = mk \"ruby\" [ofStr value]\r\n member _.ruby (children: seq<'Node>) = mk \"ruby\" children\r\n\r\n member _.s (value: float) = mk \"s\" [Util.asString value |> ofStr]\r\n member _.s (value: int) = mk \"s\" [Util.asString value |> ofStr]\r\n member _.s (value: 'Node) = mk \"s\" [value]\r\n member _.s (value: string) = mk \"s\" [ofStr value]\r\n member _.s (children: seq<'Node>) = mk \"s\" children\r\n\r\n member _.samp (value: float) = mk \"samp\" [Util.asString value |> ofStr]\r\n member _.samp (value: int) = mk \"samp\" [Util.asString value |> ofStr]\r\n member _.samp (value: 'Node) = mk \"samp\" [value]\r\n member _.samp (value: string) = mk \"samp\" [ofStr value]\r\n member _.samp (children: seq<'Node>) = mk \"samp\" children\r\n\r\n member _.script (children: seq<'Node>) = mk \"script\" children\r\n\r\n member _.section (children: seq<'Node>) = mk \"section\" children\r\n\r\n member _.select (children: seq<'Node>) = mk \"select\" children\r\n member _.small (value: float) = mk \"small\" [Util.asString value |> ofStr]\r\n member _.small (value: int) = mk \"small\" [Util.asString value |> ofStr]\r\n member _.small (value: 'Node) = mk \"small\" [value]\r\n member _.small (value: string) = mk \"small\" [ofStr value]\r\n member _.small (children: seq<'Node>) = mk \"small\" children\r\n\r\n member _.source (children: seq<'Node>) = mk \"source\" children\r\n\r\n member _.span (value: float) = mk \"span\" [Util.asString value |> ofStr]\r\n member _.span (value: int) = mk \"span\" [Util.asString value |> ofStr]\r\n member _.span (value: 'Node) = mk \"span\" [value]\r\n member _.span (value: string) = mk \"span\" [ofStr value]\r\n member _.span (children: seq<'Node>) = mk \"span\" children\r\n\r\n member _.strong (value: float) = mk \"strong\" [Util.asString value |> ofStr]\r\n member _.strong (value: int) = mk \"strong\" [Util.asString value |> ofStr]\r\n member _.strong (value: 'Node) = mk \"strong\" [value]\r\n member _.strong (value: string) = mk \"strong\" [ofStr value]\r\n member _.strong (children: seq<'Node>) = mk \"strong\" children\r\n\r\n member _.style (value: string) = mk \"style\" [ofStr value]\r\n\r\n member _.sub (value: float) = mk \"sub\" [Util.asString value |> ofStr]\r\n member _.sub (value: int) = mk \"sub\" [Util.asString value |> ofStr]\r\n member _.sub (value: 'Node) = mk \"sub\" [value]\r\n member _.sub (value: string) = mk \"sub\" [ofStr value]\r\n member _.sub (children: seq<'Node>) = mk \"sub\" children\r\n\r\n member _.summary (value: float) = mk \"summary\" [Util.asString value |> ofStr]\r\n member _.summary (value: int) = mk \"summary\" [Util.asString value |> ofStr]\r\n member _.summary (value: 'Node) = mk \"summary\" [value]\r\n member _.summary (value: string) = mk \"summary\" [ofStr value]\r\n member _.summary (children: seq<'Node>) = mk \"summary\" children\r\n\r\n member _.sup (value: float) = mk \"sup\" [Util.asString value |> ofStr]\r\n member _.sup (value: int) = mk \"sup\" [Util.asString value |> ofStr]\r\n member _.sup (value: 'Node) = mk \"sup\" [value]\r\n member _.sup (value: string) = mk \"sup\" [ofStr value]\r\n member _.sup (children: seq<'Node>) = mk \"sup\" children\r\n\r\n member _.table (children: seq<'Node>) = mk \"table\" children\r\n\r\n member _.tableBody (children: seq<'Node>) = mk \"tbody\" children\r\n\r\n member _.tableCell (children: seq<'Node>) = mk \"td\" children\r\n\r\n member _.tableHeader (children: seq<'Node>) = mk \"th\" children\r\n\r\n member _.tableRow (children: seq<'Node>) = mk \"tr\" children\r\n\r\n member _.tbody (children: seq<'Node>) = mk \"tbody\" children\r\n\r\n member _.td (value: float) = mk \"td\" [Util.asString value |> ofStr]\r\n member _.td (value: int) = mk \"td\" [Util.asString value |> ofStr]\r\n member _.td (value: 'Node) = mk \"td\" [value]\r\n member _.td (value: string) = mk \"td\" [ofStr value]\r\n member _.td (children: seq<'Node>) = mk \"td\" children\r\n\r\n member _.template (children: seq<'Node>) = mk \"template\" children\r\n\r\n member _.text (value: float) : 'Node = Util.asString value |> ofStr\r\n member _.text (value: int) : 'Node = Util.asString value |> ofStr\r\n member _.text (value: string) : 'Node = ofStr value\r\n member _.text (value: System.Guid) : 'Node = Util.asString value |> ofStr\r\n\r\n member this.textf fmt = Printf.kprintf this.text fmt\r\n\r\n member _.textarea (children: seq<'Node>) = mk \"textarea\" children\r\n\r\n member _.tfoot (children: seq<'Node>) = mk \"tfoot\" children\r\n\r\n member _.th (value: float) = mk \"th\" [Util.asString value |> ofStr]\r\n member _.th (value: int) = mk \"th\" [Util.asString value |> ofStr]\r\n member _.th (value: 'Node) = mk \"th\" [value]\r\n member _.th (value: string) = mk \"th\" [ofStr value]\r\n member _.th (children: seq<'Node>) = mk \"th\" children\r\n\r\n member _.thead (children: seq<'Node>) = mk \"thead\" children\r\n\r\n member _.time (children: seq<'Node>) = mk \"time\" children\r\n\r\n member _.tr (children: seq<'Node>) = mk \"tr\" children\r\n\r\n member _.track (children: seq<'Node>) = mk \"track\" children\r\n\r\n member _.u (value: float) = mk \"u\" [Util.asString value |> ofStr]\r\n member _.u (value: int) = mk \"u\" [Util.asString value |> ofStr]\r\n member _.u (value: 'Node) = mk \"u\" [value]\r\n member _.u (value: string) = mk \"u\" [ofStr value]\r\n member _.u (children: seq<'Node>) = mk \"u\" children\r\n\r\n member _.ul (children: seq<'Node>) = mk \"ul\" children\r\n\r\n member _.unorderedList (children: seq<'Node>) = mk \"ul\" children\r\n\r\n member _.var (value: float) = mk \"var\" [Util.asString value |> ofStr]\r\n member _.var (value: int) = mk \"var\" [Util.asString value |> ofStr]\r\n member _.var (value: 'Node) = mk \"var\" [value]\r\n member _.var (value: string) = mk \"var\" [ofStr value]\r\n member _.var (children: seq<'Node>) = mk \"var\" children\r\n\r\n member _.video (children: seq<'Node>) = mk \"video\" children\r\n\r\n member _.wbr (children: seq<'Node>) = mk \"wbr\" children\r\n","/// \n/// Easing functions for CSS transitions\n/// \nmodule Sutil.Easing\n// Adapted from svelte/easing/index.js, which in turn are..\n (*\n Adapted from https://github.com/mattdesl\n Distributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n *)\n\n// For visualizations of these easing functions\n// https://easings.net/\n\nopen System\n\nlet linear = id\n\nlet backInOut t =\n let s = 1.70158 * 1.525\n if (t < 0.5) then\n let tin = t * 2.0\n 0.5 * (tin * tin * ((s + 1.0) * tin - s))\n else\n let tout = t - 1.0\n 0.5 * (tout * tout * ((s + 1.0) * tout + s) + 2.0)\n\nlet backIn t =\n let s = 1.70158\n t * t * ((s + 1.0) * t - s)\n\nlet backOut t =\n let s = 1.70158\n let t' = t - 1.0\n t' * t' * ((s + 1.0) * t' + s) + 1.0\n\nlet cubicIn (t : float) = t * t * t\n\nlet cubicOut t =\n let f = t - 1.0\n f * f * f + 1.0\n\nlet cubicInOut t =\n if t < 0.5 then 4.0 * t * t * t else 0.5 * System.Math.Pow(2.0 * t - 2.0, 3.0) + 1.0\n\n// todo; ported from JS, might read better if refactored. Might not run as fast though...do the refactor and see how it looks\nlet quadInOut t =\n let tin = t / 0.5;\n if (tin < 1.0) then\n 0.5 * tin * tin // In: t < 0.5, tin = 0 .. 1\n else\n let tout = tin - 1.0 // Out: t>= 0.5, tout = 0 .. 1\n -0.5 * (tout * (tout - 2.0) - 1.0)\n\nlet quadIn (t : float) =\n t * t\n\nlet quadOut t =\n -t * (t - 2.0)\n\nlet quartIn t = Math.Pow(t,4.0)\n\nlet quartOut t =\n Math.Pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n\nlet quartInOut t =\n if t < 0.5 then 8.0 * t * t * t * t else -8.0 * System.Math.Pow(t - 1.0, 4.0) + 1.0\n //return t < 0.5\n // ? +8.0 * Math.pow(t, 4.0)\n // : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n\nlet elasticIn t =\n Math.Sin((13.0 * t * Math.PI) / 2.0) * Math.Pow(2.0, 10.0 * (t - 1.0))\n\nlet elasticOut t =\n Math.Sin((-13.0 * (t + 1.0) * Math.PI) / 2.0) * Math.Pow(2.0, -10.0 * t) + 1.0\n\nlet quintIn (t:float) =\n t * t * t * t * t\n\nlet quintOut t =\n let t' = t - 1.0\n t' * t' * t' * t' * t' + 1.0\n\nlet expoInOut t =\n if t = 0.0 || t = 1.0 then\n t\n else if t < 0.5 then\n +0.5 * Math.Pow(2.0, 20.0 * t - 10.0)\n else\n -0.5 * Math.Pow(2.0, 10.0 - t * 20.0) + 1.0\n\nlet expoIn t =\n if t = 0.0 then t else Math.Pow(2.0, 10.0 * (t - 1.0))\n\nlet expoOut t =\n if t = 1.0 then t else 1.0 - Math.Pow(2.0, -10.0 * t)\n\n(*\n/*\nAdapted from https://github.com/mattdesl\nDistributed under MIT License https://github.com/mattdesl/eases/blob/master/LICENSE.md\n*/\n*DONE* function backInOut(t) {\n const s = 1.70158 * 1.525;\n if ((t *= 2) < 1)\n return 0.5 * (t * t * ((s + 1) * t - s));\n return 0.5 * ((t -= 2) * t * ((s + 1) * t + s) + 2);\n}\n*DONE* function backIn(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n}\n*DONE* function backOut(t) {\n const s = 1.70158;\n return --t * t * ((s + 1) * t + s) + 1;\n}\nfunction bounceOut(t) {\n const a = 4.0 / 11.0;\n const b = 8.0 / 11.0;\n const c = 9.0 / 10.0;\n const ca = 4356.0 / 361.0;\n const cb = 35442.0 / 1805.0;\n const cc = 16061.0 / 1805.0;\n const t2 = t * t;\n return t < a\n ? 7.5625 * t2\n : t < b\n ? 9.075 * t2 - 9.9 * t + 3.4\n : t < c\n ? ca * t2 - cb * t + cc\n : 10.8 * t * t - 20.52 * t + 10.72;\n}\nfunction bounceInOut(t) {\n return t < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\n : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\n}\nfunction bounceIn(t) {\n return 1.0 - bounceOut(1.0 - t);\n}\nfunction circInOut(t) {\n if ((t *= 2) < 1)\n return -0.5 * (Math.sqrt(1 - t * t) - 1);\n return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n}\nfunction circIn(t) {\n return 1.0 - Math.sqrt(1.0 - t * t);\n}\nfunction circOut(t) {\n return Math.sqrt(1 - --t * t);\n}\n*DONE* function cubicInOut(t) {\n return t < 0.5 ? 4.0 * t * t * t : 0.5 * Math.pow(2.0 * t - 2.0, 3.0) + 1.0;\n}\n*DONE* function cubicIn(t) {\n return t * t * t;\n}\n*DONE* function cubicOut(t) {\n const f = t - 1.0;\n return f * f * f + 1.0;\n}\nfunction elasticInOut(t) {\n return t < 0.5\n ? 0.5 *\n Math.sin(((+13.0 * Math.PI) / 2) * 2.0 * t) *\n Math.pow(2.0, 10.0 * (2.0 * t - 1.0))\n : 0.5 *\n Math.sin(((-13.0 * Math.PI) / 2) * (2.0 * t - 1.0 + 1.0)) *\n Math.pow(2.0, -10.0 * (2.0 * t - 1.0)) +\n 1.0;\n}\n*DONE* function elasticIn(t) {\n return Math.sin((13.0 * t * Math.PI) / 2) * Math.pow(2.0, 10.0 * (t - 1.0));\n}\n*DONE* function elasticOut(t) {\n return (Math.sin((-13.0 * (t + 1.0) * Math.PI) / 2) * Math.pow(2.0, -10.0 * t) + 1.0);\n}\nfunction expoInOut(t) {\n return t === 0.0 || t === 1.0\n ? t\n : t < 0.5\n ? +0.5 * Math.pow(2.0, 20.0 * t - 10.0)\n : -0.5 * Math.pow(2.0, 10.0 - t * 20.0) + 1.0;\n}\nfunction expoIn(t) {\n return t === 0.0 ? t : Math.pow(2.0, 10.0 * (t - 1.0));\n}\nfunction expoOut(t) {\n return t === 1.0 ? t : 1.0 - Math.pow(2.0, -10.0 * t);\n}\nfunction quadInOut(t) {\n t /= 0.5;\n if (t < 1)\n return 0.5 * t * t;\n t--;\n return -0.5 * (t * (t - 2) - 1);\n}\nfunction quadIn(t) {\n return t * t;\n}\nfunction quadOut(t) {\n return -t * (t - 2.0);\n}\nfunction quartInOut(t) {\n return t < 0.5\n ? +8.0 * Math.pow(t, 4.0)\n : -8.0 * Math.pow(t - 1.0, 4.0) + 1.0;\n}\nfunction quartIn(t) {\n return Math.pow(t, 4.0);\n}\nfunction quartOut(t) {\n return Math.pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\n}\nfunction quintInOut(t) {\n if ((t *= 2) < 1)\n return 0.5 * t * t * t * t * t;\n return 0.5 * ((t -= 2) * t * t * t * t + 2);\n}\n*DONE* function quintIn(t) {\n return t * t * t * t * t;\n}\n*DONE* function quintOut(t) {\n return --t * t * t * t * t + 1;\n}\nfunction sineInOut(t) {\n return -0.5 * (Math.cos(Math.PI * t) - 1);\n}\nfunction sineIn(t) {\n const v = Math.cos(t * Math.PI * 0.5);\n if (Math.abs(v) < 1e-14)\n return 1;\n else\n return 1 - v;\n}\nfunction sineOut(t) {\n return Math.sin((t * Math.PI) / 2);\n}\n\n\n\n*DONE* Object.defineProperty(exports, 'linear', {\n\tenumerable: true,\n\tget: function () {\n\t\treturn internal.identity;\n\t}\n});\n\n*)\n","/// \n/// Support CSS styling\n/// \nmodule Sutil.Styling\n\nopen System\nopen Browser.Types\nopen Sutil.Core\nopen Sutil.DomHelpers\nopen Browser.Dom\n\nlet private logEnabled() = Logging.isEnabled \"style\"\nlet private log s = Logging.log \"style\" s\nlet private findElement (doc : Document) selector = doc.querySelector(selector)\n\nlet parseStyleAttr (style : string) =\n style.Split([|';'|], StringSplitOptions.RemoveEmptyEntries)\n |> Array.collect (fun entry ->\n entry.Split([|':'|],2)\n |> Array.chunkBySize 2\n |> Array.map (fun pair -> pair.[0].Trim(), pair.[1].Trim()))\n\nlet emitStyleAttr (keyValues : (string * string) array) =\n keyValues\n |> Array.map (fun (k,v) -> sprintf \"%s:%s;\" k v )\n |> String.concat \"\"\n\nlet filterStyleAttr name style =\n parseStyleAttr style\n |> Array.filter (fun (k,v) -> k <> name)\n |> emitStyleAttr\n\nlet getStyleAttr (el : HTMLElement) =\n match el.getAttribute(\"style\") with\n | null -> \"\"\n | s -> s\n\nlet addStyleAttr (el : HTMLElement) name value =\n let style = getStyleAttr el |> filterStyleAttr name\n el.setAttribute( \"style\", sprintf \"%s%s:%s;\" style name value )\n\nlet removeStyleAttr (el : HTMLElement) name =\n if logEnabled() then log( sprintf \"filter by %s: %A -> %A\" name (getStyleAttr el) (getStyleAttr el |> filterStyleAttr name) )\n el.setAttribute( \"style\", getStyleAttr el |> filterStyleAttr name )\n\nlet newStyleElement (doc : Document)=\n let head = \"head\" |> findElement doc\n let style = doc.createElement(\"style\")\n head.appendChild(style :> Node) |> ignore\n style\n\nlet splitMapJoin (delim:char) (f : string -> string) (s:string) =\n s.Split([| delim |], StringSplitOptions.RemoveEmptyEntries )\n |> Array.map f\n |> fun values -> String.Join(string delim, values)\n\nlet mapPseudo (f : string -> string) (s : string) =\n let i = s.IndexOf(':')\n if i < 0 then\n f s\n else\n f (s.Substring(0,i)) + (s.Substring(i))\n\nlet isPseudo s =\n s = \"hover\" || s = \"active\" || s = \"visited\" || s = \"link\" || s = \"before\" || s = \"after\" || s = \"checked\" || s = \"marker\"\n\nlet isGlobal s = s = \"body\" || s = \"html\"\n\nlet specifySelector (styleName : string) (selectors : string) =\n if (styleName = \"\") then\n selectors\n else\n let trans s = if isPseudo s || isGlobal s then s else sprintf \"%s.%s\" s styleName // button -> button.styleA\n splitMapJoin ',' (splitMapJoin ' ' (mapPseudo trans)) selectors\n\nlet private styleListToText (css : list) =\n \" {\\n\" + String.Join (\"\\n\", css |> Seq.map (fun (nm,v) -> $\" {nm}: {v};\")) + \" }\\n\"\n\nlet private frameToText (f : KeyFrame) =\n sprintf \"%d%% %s\" f.StartAt (styleListToText f.Style)\n\nlet private framesToText (frames : KeyFrames) =\n sprintf \"@keyframes %s {\\n%s\\n}\\n\"\n frames.Name\n (String.Join(\"\\n\", frames.Frames |> List.map frameToText))\n\nlet private isSutilRule (nm:string,v) = nm.StartsWith(\"sutil\")\n\nlet private ruleToText (styleName : string) (rule:StyleRule) =\n //rule.SelectorSpec + (styleListToText rule.Style)\n let styleText = String.Join (\"\\n\", rule.Style |> Seq.filter (not << isSutilRule) |> Seq.map (fun (nm,v) -> $\" {nm}: {v};\"))\n [\n specifySelector styleName rule.SelectorSpec\n \" {\\n\"\n styleText\n \"}\\n\"\n ] |> String.concat \"\"\n\nlet rec mediaRuleToText styleName rule =\n sprintf \"@media %s {\\n%s\\n}\\n\" (rule.Condition) (rule.Rules |> List.map (entryToText styleName) |> String.concat \"\\n\")\n\nand entryToText (styleName : string) = function\n | Rule rule ->\n ruleToText styleName rule\n | KeyFrames frames ->\n framesToText frames\n | MediaRule rule ->\n mediaRuleToText styleName rule\n\nlet private styleSheetAsText (styleSheet : StyleSheetDefinitions) =\n System.String.Join(\"\\n\", styleSheet |> List.map (entryToText \"\"))\n\nlet private addStyleSheet (doc:Document) styleName (styleSheet : StyleSheetDefinitions) =\n let style = newStyleElement doc\n for entry in styleSheet do\n entryToText styleName entry |> doc.createTextNode |> style.appendChild |> ignore\n (fun () -> style.parentElement.removeChild(style) |> ignore)\n\nlet addGlobalStyleSheet (doc:Document) (styleSheet : StyleSheetDefinitions) =\n addStyleSheet doc \"\" styleSheet\n\n/// \n/// Define a CSS styling rule\n/// \nlet rule selector style =\n let result = Rule {\n SelectorSpec = selector\n //Selector = parseSelector selector\n Style = style\n }\n //log($\"%s{selector} -> %A{result.Selector}\")\n result\n\n/// \n/// Define a CSS keyframe as part of a keyframes sequence\n/// See also: \n/// \nlet keyframe startAt style =\n {\n StartAt = startAt\n Style = style\n }\n\n/// \n/// Define a CSS keyframes sequence\n/// \n/// \n/// \n/// keyframes \"dashdraw\" [\n/// keyframe 0 [\n/// Css.custom(\"stroke-dashoffset\", \"10\")\n/// ]\n/// ]\n/// \n/// \nlet keyframes name frames =\n KeyFrames {\n Name = name\n Frames = frames\n }\n\nlet internal showEl (el : HTMLElement) isVisible =\n if isVisible then\n if Interop.exists el \"_display\" then\n addStyleAttr el \"display\" (Interop.get el \"_display\")\n else\n removeStyleAttr el \"display\"\n else\n addStyleAttr el \"display\" \"none\"\n let ev = Interop.customEvent (if isVisible then Event.Show else Event.Hide) {| |}\n el.dispatchEvent(ev) |> ignore\n ()\n\nlet internal makeMediaRule condition rules =\n MediaRule { Condition = condition; Rules = rules }\n\nopen Browser.Css\n\n#if !FABLE_REPL_LIB\nConstructStyleSheetsPolyfill.register()\n#endif\n\nopen Fable.Core\n\n\ntype internal Node with\n /// returns this DocumentOrShadow adopted stylesheets or sets them.\n /// https://wicg.github.io/construct-stylesheets/#using-constructed-stylesheets\n []\n member __.adoptedStyleSheets with get(): CSSStyleSheet array = jsNative and set(v: CSSStyleSheet array) = jsNative\n []\n member __.getRootNode() : Node = jsNative\n\nlet adoptStyleSheet (styleSheet : StyleSheetDefinitions) =\n SutilElement.Define( \"adoptStyleSheet\",\n fun ctx ->\n let run() =\n let sheet = CSSStyleSheet.Create()\n sheet.replaceSync (styleSheetAsText styleSheet)\n\n let rootNode : Node = ctx.ParentNode.getRootNode()\n\n rootNode.adoptedStyleSheets <- Array.concat [ rootNode.adoptedStyleSheets; [| sheet |] ]\n\n if ctx.Parent.IsConnected() then\n run()\n else\n rafu run\n () )\n\nlet private ruleMatchEl (el: HTMLElement) (rule: StyleRule) =\n el.matches(rule.SelectorSpec)\n\nlet private rulesOf (styleSheet: StyleSheetDefinitions) =\n styleSheet\n |> List.map (function\n | Rule r -> Some r\n | _ -> None)\n |> List.choose id\n\nopen Browser.Types\nopen Browser.Css\nopen Browser.CssExtensions\n\nlet private applyCustomRulesToElement (rules : StyleRule list) (e: HTMLElement) =\n for rule in rules |> List.filter (ruleMatchEl e) do\n for custom in rule.Style do\n match custom with\n | (nm, v) when nm = \"sutil-use-global\" ->\n failwith \"sutil-use-global not supported\"\n | (nm, v) when nm = \"sutil-use-parent\" -> ()\n | (nm, v) when nm = \"sutil-add-class\" ->\n ClassHelpers.addToClasslist (string v) e\n | (nm,v) ->\n e.style.setProperty( nm, string v )\n\n\nlet private applyCustomRules (rules : StyleSheetDefinitions) (ctx: BuildContext, result : SutilEffect) =\n match result with\n | DomNode n ->\n n |> applyIfElement (rulesOf rules |> applyCustomRulesToElement)\n | _ -> ()\n (ctx, result)\n\n/// \n/// Support for the custom rules \"sutil-add-class\". They're clever but also difficult to understand. See their usage in Sutil.Bulma\n/// \nlet withCustomRules (rules : StyleSheetDefinitions) (element : SutilElement) =\n SutilElement.Define(\"withCustomRules\",\n fun ctx ->\n ctx\n |> ContextHelpers.withPostProcess (applyCustomRules rules)\n |> build element )\n\nlet private applyStyleSheet (namedSheet : NamedStyleSheet) (ctx: BuildContext, result : SutilEffect)=\n match result with\n | DomNode _ ->\n result.AsDomNode\n |> applyIfElement\n (fun el ->\n if not (Interop.exists el NodeKey.StyleClass) then\n Interop.set el (NodeKey.StyleClass) namedSheet.Name\n ClassHelpers.addToClasslist namedSheet.Name el)\n | _ -> ()\n (ctx, result)\n\nlet withStyle styleSheet (element : SutilElement) : SutilElement =\n SutilElement.Define(\"withStyle\",\n fun ctx ->\n let name = ctx.MakeName \"sutil\"\n let namedSheet = { Name = name; StyleSheet = styleSheet }\n addStyleSheet ctx.Document name styleSheet |> ignore\n ctx\n |> ContextHelpers.withPreProcess (applyStyleSheet namedSheet)\n |> build element )\n","/// \n/// Support for CSS transitions that can react to store values\n/// \nmodule Sutil.Transition\n// Adapted from svelte/transitions/index.js\n\nopen Browser.CssExtensions\nopen Browser.Types\nopen Styling\nopen Core\nopen DomHelpers\nopen System.Collections.Generic\nopen System\nopen Fable.Core\nopen Interop\n\nlet private logEnabled() = Logging.isEnabled \"trans\"\nlet private log s = Logging.log \"trans\" s\n\nmodule private LoopTasks =\n\n type private Task = { C : float -> bool; F : unit -> unit }\n\n type LoopTask = { Promise : JS.Promise; Abort: (unit -> unit) }\n\n let mutable private tasks = new HashSet()\n\n let rec runTasks(now) =\n tasks |> Array.ofSeq |> Array.iter (fun task ->\n if not (task.C(now)) then\n tasks.Remove(task) |> ignore\n task.F()\n )\n if tasks.Count <> 0 then\n raf runTasks |> ignore\n\n (**\n * For testing purposes only!\n *)\n let private clearLoops =\n tasks.Clear()\n\n (**\n * Creates a new task that runs on each raf frame\n * until it returns a falsy value or is aborted\n *)\n let loop (callback: float -> bool) =\n let mutable task = Unchecked.defaultof\n\n if tasks.Count = 0 then\n raf runTasks |> ignore\n\n {\n Promise = Promise.create( fun fulfill _ ->\n task <- { C = callback; F = fulfill }\n tasks.Add(task) |> ignore\n )\n\n Abort = fun _ -> tasks.Remove (task) |> ignore\n }\n\ntype TransitionProp =\n | Key of string\n | X of float\n | Y of float\n | Opacity of float\n | Delay of float\n | Duration of float\n | DurationFn of (float -> float)\n | Ease of (float -> float)\n | CssGen of (float -> float -> string )\n | Tick of (float -> float -> unit)\n | Speed of float\n | Fallback of TransitionBuilder\n\nand Transition =\n {\n Key : string\n X : float\n Y : float\n Opacity : float\n Delay : float\n Duration : float\n DurationFn : (float->float) option\n Speed : float\n Ease : (float -> float)\n CssGen : (float -> float -> string ) option\n Tick: (float -> float -> unit) option\n Fallback: TransitionBuilder option\n } with\n static member Default = {\n Key =\"\"\n X = 0.0\n Y = 0.0\n Delay = 0.0\n Opacity = 0.0\n Duration = 0.0\n DurationFn = None\n Speed = 0.0\n Ease = Easing.linear\n CssGen = None\n Fallback = None\n Tick = None }\n\nand CreateTransition =\n unit -> Transition\n\nand TransitionBuilder = TransitionProp list -> HTMLElement -> CreateTransition\n\ntype Animation = {\n From: ClientRect\n To: ClientRect\n}\n\nlet mergeProps newerProps existingProps : TransitionProp list =\n existingProps @ newerProps\n\nlet withProps (userProps : TransitionProp list) (f : TransitionBuilder) : TransitionBuilder =\n fun (initProps : TransitionProp list) ->\n initProps |> mergeProps userProps |> f\n\ntype TransitionAttribute =\n | InOut of TransitionBuilder\n | In of TransitionBuilder\n | Out of TransitionBuilder\n\nlet private overrideDuration d = if Sutil.DevToolsControl.Options.SlowAnimations then 10.0 * d else d\nlet private overrideDurationFn fo = if Sutil.DevToolsControl.Options.SlowAnimations then (fo |> Option.map (fun f -> ((*)10.0 << f))) else fo\n\nlet private applyProp (r:Transition) (prop : TransitionProp) =\n match prop with\n | Delay d -> { r with Delay = d }\n | Duration d -> { r with Duration = d; DurationFn = None }\n | DurationFn fo -> { r with DurationFn = Some fo; Duration = 0.0 }\n | Ease f -> { r with Ease = f }\n | CssGen f -> { r with CssGen = Some f }\n | Tick f -> { r with Tick = Some f }\n | Speed s -> { r with Speed = s }\n | X n -> { r with X = n }\n | Y n -> { r with Y = n }\n | Opacity n -> { r with Opacity = n }\n | Key f -> { r with Key = f }\n | Fallback f -> { r with Fallback = Some f }\n\nlet applyProps (props : TransitionProp list) (tr:Transition) = props |> List.fold applyProp tr\nlet makeTransition (props : TransitionProp list) = applyProps props Transition.Default\nlet mapTrans (f: Transition -> TransitionProp list) t = applyProps (f t) t\n\nlet element (doc:Document) tag = doc.createElement(tag)\n\nlet mutable private numActiveAnimations = 0\nlet mutable private tasks : (unit -> unit) list = []\nlet mutable private activeDocs : Map = Map.empty\n\nlet private registerDoc (doc:Document) =\n activeDocs <- activeDocs.Add( doc.GetHashCode(), doc )\n if logEnabled() then log($\"Active docs: {activeDocs.Count}\")\n\nlet private runTasks() =\n let copy = tasks\n tasks <- []\n if (copy.Length > 0) then\n if logEnabled() then log($\"- - - Tasks: running {copy.Length} tasks - - - - - - - - - - - - - -\")\n for f in copy do f()\n\nlet private waitAnimationFrame f =\n let init = tasks.IsEmpty\n tasks <- f :: tasks\n if init then\n Window.requestAnimationFrame( fun _ ->\n runTasks()\n ) |> ignore\n\nlet private getSutilStyleElement (doc : Document) =\n let mutable e = doc.querySelector(\"head style#__sutil_keyframes\")\n if (isNull e) then\n e <- element doc \"style\"\n e.setAttribute(\"id\", \"__sutil_keyframes\")\n doc.head.appendChild(e) |> ignore\n e\n\nlet private dotSheet styleElem : CSSStyleSheet = Interop.get styleElem \"sheet\"\n\nlet private getSutilStylesheet (doc : Document) = getSutilStyleElement doc |> dotSheet\n\nlet private nextRuleId = Helpers.makeIdGenerator()\n\nlet private toEmptyStr s = if System.String.IsNullOrEmpty(s) then \"\" else s\n\nlet createRule (node : HTMLElement) (a:float) (b:float) tr (uid:int) =\n registerDoc (documentOf node)\n\n let css = match tr.CssGen with\n | Some f -> f\n | None -> failwith \"No CSS function supplied\"\n\n if (tr.DurationFn.IsSome) then\n failwith \"Duration function not permitted in createRule\"\n\n let durn = tr.Duration |> overrideDuration\n\n let step = 16.666 / durn\n let mutable keyframes = [ \"{\\n\" ];\n\n for p in [0.0 ..step.. 1.0] do\n let t = a + (b - a) * tr.Ease(p)\n keyframes <- keyframes @ [ sprintf \"%f%%{%s}\\n\" (p * 100.0) (css t (1.0 - t)) ]\n\n let rule = keyframes @ [ sprintf \"100%% {%s}\\n\" (css b (1.0 - b)) ] |> String.concat \"\"\n\n let name = sprintf \"__sutil_%d\" (if uid = 0 then nextRuleId() else uid)\n let keyframeText = sprintf \"@keyframes %s %s\" name rule\n if logEnabled() then log <| sprintf \"keyframe: %s\" (keyframes |> List.skip (keyframes.Length / 2) |> List.head)\n if logEnabled() then log($\"createRule {name} {durn}ms for {nodeStr node}\")\n\n let stylesheet = getSutilStylesheet (documentOf node)\n stylesheet.insertRule( keyframeText, stylesheet.cssRules.length) |> ignore\n\n let animations =\n if String.IsNullOrEmpty(node.style.animation) then [] else [ node.style.animation ]\n @ [ sprintf \"%s %fms linear %fms 1 both\" name durn tr.Delay ]\n\n node.style.animation <- animations |> String.concat \", \"\n numActiveAnimations <- numActiveAnimations + 1\n name\n\nlet clearAnimations (node:HTMLElement) = node.style.animation <-\"\"\n\nlet private clearRules() =\n Window.requestAnimationFrame( fun _ ->\n if (numActiveAnimations = 0) then\n for kv in activeDocs do\n let doc = kv.Value\n let stylesheet = getSutilStylesheet doc\n if logEnabled() then log <| sprintf \"clearing %d rules\" (int stylesheet.cssRules.length)\n for i in [(int stylesheet.cssRules.length-1) .. -1 .. 0] do\n stylesheet.deleteRule( float i )\n //doc.__svelte_rules = {};\n activeDocs <- Map.empty\n ) |> ignore\n\nlet private deleteRule (node:HTMLElement) (name:string) =\n let previous = (toEmptyStr node.style.animation).Split( ',' )\n let next =\n previous |> Array.filter\n (if System.String.IsNullOrEmpty(name)\n then (fun anim -> anim.IndexOf(name) < 0) // remove specific animation\n else (fun anim -> anim.IndexOf(\"__sutil\") < 0)) // remove all Svelte animations\n let deleted = previous.Length - next.Length\n if (deleted > 0) then\n //log <| sprintf \"Deleted rule(s) %s (%d removed)\" name deleted\n node.style.animation <- next |> Array.map (fun s -> s.Trim()) |> String.concat \", \"\n numActiveAnimations <- numActiveAnimations - deleted\n if (numActiveAnimations = 0) then clearRules()\n\nlet private rectToStr (c : ClientRect ) =\n sprintf \"[%f,%f -> %f,%f]\" c.left c.top c.right c.bottom\n\nlet flip (node:Element) (animation:Animation) props =\n let tr = applyProps props {\n Transition.Default with\n Delay = 0.0\n DurationFn = Some (fun d -> System.Math.Sqrt(d) * 60.0)\n Ease = Easing.quintOut }\n let style = Window.getComputedStyle(node)\n let transform = if style.transform = \"none\" then \"\" else style.transform\n let scaleX = animation.From.width / node.clientWidth\n let scaleY = animation.From.height / node.clientHeight\n let dx = (animation.From.left - animation.To.left) / scaleX\n let dy = (animation.From.top - animation.To.top) / scaleY\n let d = Math.Sqrt(dx * dx + dy * dy)\n if logEnabled() then log( sprintf \"flip: %A,%A %A %A -> %A\" dx dy transform (rectToStr animation.From) (rectToStr animation.To))\n {\n tr with\n Duration = match tr.DurationFn with\n | None -> tr.Duration //\n | Some f -> f(d) // Use user's function or our default\n DurationFn = None // Original converts any function into a scalar value\n CssGen = Some (fun t u -> sprintf \"transform: %s translate(%fpx, %fpx);`\" transform (u * dx) (u * dy))\n }\n\nlet createAnimation (node:HTMLElement) (from:ClientRect) (animateFn : Element -> Animation -> TransitionProp list -> Transition) props =\n //if (!from)\n // return noop;\n let tgt (* to *) = node.getBoundingClientRect()\n\n let shouldCreate =\n not (isNull from) &&\n not (from.width = 0) &&\n not (from.height = 0) &&\n not (from.left = tgt.left && from.right = tgt.right && from.top = tgt.top && from.bottom = tgt.bottom)\n // return noop;\n\n //let { delay = 0, duration = 300, easing = identity,\n // start: start_time = exports.now() + delay,\n // end = start_time + duration, tick = noop, css } = fn(node, { From = from; To = tgt }, props);\n\n // TODO : Tick loop\n\n if (shouldCreate) then\n let a = animateFn node { From = from; To = tgt } props\n let r = { a with Duration = if (a.Duration = 0.0 && a.DurationFn.IsNone) then 300.0 else a.Duration }\n createRule node 0.0 1.0 r 0\n else\n \"\"\n\nlet private waitAnimationEnd (el : HTMLElement) (f : unit -> unit) =\n let rec cb _ =\n el.removeEventListener(\"animationend\",cb)\n f()\n el.addEventListener(\"animationend\", cb)\n\nlet animateNode (node : HTMLElement) from =\n waitAnimationFrame <| fun () ->\n let name = createAnimation node from flip []\n waitAnimationEnd node <| fun _ ->\n deleteRule node name\n\nlet private tickGen = Helpers.makeIdGenerator()\n\nlet private findTransition (intro:bool) (trans : TransitionAttribute list) : TransitionBuilder option =\n let mutable result : TransitionBuilder option = None\n for x in trans do\n result <- match result, x, intro with\n | Some _, _, _ -> result\n | None, In x, true -> Some x\n | None, Out x, false -> Some x\n | None, InOut x, _ -> Some x\n | _ -> None\n result\n\nlet transitionNode (el : HTMLElement)\n (trans : TransitionAttribute list)\n (initProps : TransitionProp list) // Likely to just be Key, if anything\n (isVisible : bool)\n (start: HTMLElement -> unit)\n (complete: HTMLElement -> unit) =\n\n let mutable ruleName = \"\"\n\n let cancelTick () =\n match NodeKey.get el NodeKey.TickTask with\n | Some f ->\n NodeKey.clear el NodeKey.TickTask\n f()\n | None -> ()\n\n let runTick tr b durn =\n let logEnabled = Logging.isEnabled \"tick\"\n let log = Logging.log \"tick\"\n\n let a = if b = 0.0 then 1.0 else 0.0\n let d = b - a\n let tickId = tickGen()\n let tick = match tr.Tick with|Some f -> f|None -> failwith \"No tick function supplied\"\n let ease = tr.Ease\n let delay = tr.Delay\n\n let mutable t = a\n let mutable start = 0.0\n let mutable finish = 0.0\n let mutable started = false\n let mutable finished = false\n\n Interop.set el NodeKey.TickTask (fun () ->\n if logEnabled then log $\"#{tickId}: cancel\"\n finished <- true\n )\n\n if logEnabled then log $\"#{tickId}: run b={b} durn={durn}\"\n if (b > 0.0) then\n tick 0.0 1.0\n\n LoopTasks.loop <| fun now ->\n if not started then\n start <- now + delay\n finish <- start + durn\n if logEnabled then log $\"#{tickId}: start: start={start} finish={finish}\"\n started <- true\n\n if finished || now >= finish then\n if logEnabled then log $\"#{tickId}: finish: t={t}\"\n t <- b\n tick t (1.0 - t)\n finished <- true\n\n else if now >= start then\n let e = now - start\n let t0 = e / durn\n t <- a + d * (ease t0)\n if logEnabled then log $\"#{tickId}: tick: t={t} t0={t0} e={e}\"\n tick t (1.0 - t)\n\n not finished\n\n let hide() =\n if logEnabled() then log $\"hide {nodeStr el}\"\n showEl el false\n complete el\n if ruleName <> \"\" then deleteRule el ruleName\n CustomDispatch<_>.dispatch(el,\"outroend\")\n\n let show() =\n if logEnabled() then log $\"show {nodeStr el}\"\n showEl el true\n complete el\n if ruleName <> \"\" then deleteRule el ruleName\n CustomDispatch<_>.dispatch(el, \"introend\")\n\n let tr = findTransition isVisible trans\n\n let startTransition createTrans =\n let event = if isVisible then \"introstart\" else \"outrostart\"\n let (a,b) = if isVisible then (0.0, 1.0) else (1.0, 0.0)\n let onEnd = if isVisible then show else hide\n\n cancelTick()\n\n waitAnimationFrame <| fun () ->\n CustomDispatch<_>.dispatch(el,event)\n start el\n waitAnimationEnd el onEnd\n if (isVisible) then\n showEl el true // Check: we're doing this again at animationEnd\n let tr = createTrans()\n if tr.DurationFn.IsSome then failwith \"Duration function not permitted\"\n let d = tr.Duration\n if tr.CssGen.IsSome then\n ruleName <- createRule el a b tr 0\n if tr.Tick.IsSome then\n // Wait for the cancelled runTick to finish\n DomHelpers.wait el (fun () ->\n let t = runTick tr b d\n t.Promise)\n\n // Save the value of display for use by showEl\n let _display = el.style.display\n if not (isNull _display) && _display <> \"\" && _display <> \"none\" then\n Interop.set el \"_display\" _display\n\n match tr with\n | None ->\n showEl el isVisible\n complete el\n | Some init ->\n deleteRule el \"\"\n let createTrans = (init initProps) el\n startTransition createTrans\n\ntype Hideable = {\n predicate : IObservable\n element : SutilElement\n transOpt : TransitionAttribute list\n}\n\ntype HideableRuntime = {\n hideable : Hideable\n mutable target : SutilEffect\n mutable cache : bool\n mutable unsubscribe : System.IDisposable\n}\n\nlet createHideableRuntime h =\n {\n hideable = h\n target = SideEffect\n cache = false\n unsubscribe = null\n }\n\n\nlet collectNodes (sn : SutilEffect option) = sn |> Option.map (fun n -> n.collectDomNodes()) |> Option.defaultValue []\n\nlet transitionList (list : Hideable list) : SutilElement =\n SutilElement.Define( \"transitionList\",\n fun ctx ->\n let runtimes = list |> List.map createHideableRuntime\n for rt in runtimes do\n rt.unsubscribe <- rt.hideable.predicate |> Store.subscribe ( fun show ->\n if (rt.target.IsEmpty) then\n rt.target <- build rt.hideable.element ctx\n rt.cache <- not show\n\n if (rt.cache <> show) then\n rt.cache <- show\n rt.target.collectDomNodes() |> List.iter (fun node ->\n transitionNode (node :?> HTMLElement) rt.hideable.transOpt [] show ignore ignore )\n )\n () )\n\ntype MatchOption<'T> = ('T -> bool) * SutilElement * TransitionAttribute list\n\nlet makeHideable guard element transOpt = {\n element = element\n transOpt = transOpt\n predicate = guard\n}\n\nlet transitionMatch<'T> (store : IObservable<'T>) (options : MatchOption<'T> list) =\n options |> List.map (fun (p,e,t) -> makeHideable (store |> Store.map p) e t) |> transitionList\n\nlet transitionOpt (trans : TransitionAttribute list)\n (store : IObservable)\n (element: SutilElement)\n (elseElement : SutilElement option) : SutilElement =\n SutilElement.Define(\"transitionOpt\",\n fun ctx ->\n let transResult = SutilEffect.MakeGroup( \"transition\", ctx.Parent, ctx.Previous ) |> Group\n ctx.AddChild transResult\n let transCtx = ctx |> ContextHelpers.withParent transResult\n\n let mutable target : SutilEffect = SideEffect\n let mutable cache = false\n let mutable targetElse : SutilEffect = SideEffect\n\n let unsub = store |> Store.subscribe (fun isVisible ->\n let wantTransition = not target.IsEmpty\n\n if target.IsEmpty then\n target <- build element transCtx\n cache <- not isVisible\n match elseElement with\n | Some e -> targetElse <- build e transCtx\n | None -> ()\n\n if cache <> isVisible then\n cache <- isVisible\n let trans' = if wantTransition then trans else []\n\n target.collectDomNodes() |> List.iter (fun node ->\n transitionNode (node :?> HTMLElement) trans' [] isVisible ignore ignore\n )\n targetElse.collectDomNodes() |> List.iter (fun node ->\n transitionNode (node :?> HTMLElement) trans' [] (not isVisible) ignore ignore\n )\n //if not (isNull targetElse) then transitionNode (targetElse :?> HTMLElement) trans' [] (not isVisible) ignore ignore\n )\n\n transResult )\n\n/// Show or hide according to an IObservable<bool> using a transition\nlet transition (options : TransitionAttribute list) visibility element =\n transitionOpt options visibility element None\n\n/// Alternate between a pair of elements according to an IObservable<bool> with no transition\nlet transitionElse(options : TransitionAttribute list) visibility element otherElement=\n transitionOpt options visibility element (Some otherElement)\n\n/// Show or hide according to an IObservable<bool> with no transition\nlet showIf visibility element =\n transitionOpt [] visibility element None\n\n/// Alternate between a pair of elements according to an IObservable<bool> with no transition\nlet showIfElse visibility element otherElement=\n transitionOpt [] visibility element (Some otherElement)\n\n\n\n","///\nmodule internal Sutil.Bindings\n\nopen Transition\nopen Core\nopen DomHelpers\nopen Browser.Types\nopen System\nopen Fable.Core\nopen CoreElements\n\nlet private logEnabled() = Logging.isEnabled \"bind\"\nlet private log s = Logging.log \"bind\" s\nlet private bindId = Helpers.makeIdGenerator()\n\n// Binding helper\nlet bindSub<'T> (source : IObservable<'T>) (handler : BuildContext -> 'T -> unit) =\n SutilElement.Define( \"bindSub\",\n fun ctx ->\n let unsub = source.Subscribe( handler ctx )\n SutilEffect.RegisterDisposable(ctx.Parent,unsub)\n () )\n\nlet elementFromException (x : exn) =\n el \"div\" [\n attr (\"style\",\"color: #FF8888;\")\n attr (\"title\", \"See console for details\")\n text (\"sutil: exception in bind: \" + x.Message)\n ]\n\nlet bindElementC<'T> (store : IObservable<'T>) (element: 'T -> SutilElement) (compare : 'T -> 'T -> bool)=\n SutilElement.Define( \"bindElementC\",\n fun ctx ->\n let mutable node = SideEffect\n let group = SutilEffect.MakeGroup(\"bindc\",ctx.Parent,ctx.Previous)\n let bindNode = Group group\n\n if logEnabled() then log($\"bind: {group.Id} ctx={ctx.Action} prev={ctx.Previous}\")\n ctx.AddChild bindNode\n\n let run() =\n let bindCtx = { ctx with Parent = bindNode }\n let disposable = store |> Observable.distinctUntilChangedCompare compare |> Store.subscribe (fun next ->\n try\n if logEnabled() then log($\"bind: rebuild {group.Id} with {next}\")\n node <- build (element(next)) (bindCtx |> ContextHelpers.withReplace (node,group.NextDomNode))\n with\n | x ->\n //Logging.error $\"Exception in bindo: {x.StackTrace}: parent={ctx.Parent} node={node.ToString()}\"\n JS.console.error(x)\n node <- build (elementFromException x) (bindCtx |> ContextHelpers.withReplace (node,group.NextDomNode))\n\n )\n group.RegisterUnsubscribe ( fun () ->\n if logEnabled() then log($\"dispose: Bind.el: {group}\")\n node.Dispose()\n disposable.Dispose())\n\n run()\n\n bindNode )\n\nlet bindElementCO<'T> (store : IObservable<'T>) (element: IObservable<'T> -> SutilElement) (compare : 'T -> 'T -> bool)=\n SutilElement.Define( \"bindElementCO\",\n fun ctx ->\n let mutable node = SideEffect\n let group = SutilEffect.MakeGroup(\"bindco\",ctx.Parent,ctx.Previous)\n let bindNode = Group group\n\n if logEnabled() then log($\"bind: {group.Id} ctx={ctx.Action} prev={ctx.Previous}\")\n ctx.AddChild bindNode\n\n let run() =\n let bindCtx = { ctx with Parent = bindNode }\n let disposable = store |> Observable.distinctUntilChangedCompare compare |> Store.subscribe (fun next ->\n try\n if logEnabled() then log($\"bind: rebuild {group.Id} with {next}\")\n node <- build (element(store)) (bindCtx |> ContextHelpers.withReplace (node,group.NextDomNode))\n with\n | x ->\n JS.console.error(x)\n node <- build (elementFromException x) (bindCtx |> ContextHelpers.withReplace (node,group.NextDomNode))\n )\n group.RegisterUnsubscribe ( fun () ->\n if logEnabled() then log($\"dispose: Bind.el: {group}\")\n node.Dispose()\n disposable.Dispose())\n\n\n run()\n\n bindNode )\n\nlet bindElement<'T> (store : IObservable<'T>) (element: 'T -> SutilElement) : SutilElement=\n bindElementCO store (Store.current >> element) (fun _ _-> false)\n\n/// Backwards compatibility\nlet bindFragment = bindElement\n\nlet bindElement2<'A,'B> (a : IObservable<'A>) (b : IObservable<'B>) (element: ('A*'B) -> SutilElement) =\n SutilElement.Define(\"bindElement2\",\n fun ctx ->\n let mutable node : SutilEffect = SideEffect\n let group = SutilEffect.MakeGroup(\"bind2\",ctx.Parent,ctx.Previous)\n let bindNode = Group group\n ctx.AddChild bindNode\n\n let bindCtx = { ctx with Parent = bindNode }\n\n let d = Store.subscribe2 a b (fun next ->\n try\n node <- build (element(next)) (bindCtx |> ContextHelpers.withReplace (node,group.NextDomNode))\n with\n | x -> Logging.error $\"Exception in bind: {x.Message}\"\n )\n\n group.RegisterUnsubscribe (Helpers.unsubify d)\n\n bindNode\n )\n\nlet bindElementKO<'T,'K when 'K : equality> (store : IObservable<'T>) (element: IObservable<'T> -> SutilElement) (key : 'T -> 'K) : SutilElement =\n let compare a b = key a = key b\n bindElementCO store element compare\n\nlet bindElementK<'T,'K when 'K : equality> (store : IObservable<'T>) (element: 'T -> SutilElement) (key : 'T -> 'K) : SutilElement =\n let compare a b = key a = key b\n bindElementC store element compare\n\nlet bindPromiseStore<'T> (p : ObservablePromise<'T>)\n (waiting : SutilElement)\n (result: 'T -> SutilElement)\n (fail : Exception -> SutilElement)\n : SutilElement =\n bindElement p <| (function\n | PromiseState.Waiting -> waiting\n | PromiseState.Result r -> result r\n | PromiseState.Error x -> fail x)\n\nlet bindPromise<'T> (p : JS.Promise<'T>)\n (waiting : SutilElement)\n (result: 'T -> SutilElement)\n (fail : Exception -> SutilElement)\n : SutilElement =\n let x = ObservablePromise<'T>(p)\n //x.Run p\n bindPromiseStore x waiting result fail\n\ntype BindFn<'T> = IObservable<'T> -> ('T -> SutilElement) -> SutilElement\nlet private getInputChecked el = Interop.get el \"checked\"\nlet private setInputChecked (el : Node) (v:obj) = Interop.set el \"checked\" v\nlet private getInputValue el : string = Interop.get el \"value\"\nlet private setInputValue el (v:string) = Interop.set el \"value\" v\n\nlet bindSelected<'T when 'T : equality> (selection:IObservable>) (dispatch : List<'T> -> unit) : SutilElement =\n SutilElement.Define(\"bindSelected\",\n fun ctx ->\n\n let selectElement = ctx.ParentElement :?> HTMLSelectElement\n let selOps = selectElement.selectedOptions\n let op (coll:HTMLCollection) i = coll.[i] :?> HTMLOptionElement\n let opValue op : 'T = Interop.get op \"__value\"\n\n let getValueList() =\n [0..selOps.length-1] |> List.map (fun i -> opValue (op selOps i))\n\n let updateSelected (v : List<'T>) =\n let ops = selectElement.options\n for i in [0..ops.length-1] do\n let o = op ops i\n o.selected <- v |> List.contains (opValue o)\n\n let unsubInput = listen \"input\" selectElement <| fun _ ->\n getValueList() |> dispatch\n\n // We need to finalize checked status after all attrs have been processed for input,\n // in case 'value' hasn't been set yet\n once Event.ElementReady selectElement <| fun _ ->\n let unsub = selection |> Store.subscribe (updateSelected)\n SutilEffect.RegisterDisposable(ctx.Parent, unsub)\n\n SutilEffect.RegisterUnsubscribe(ctx.Parent,unsubInput)\n ()\n )\n\nlet bindSelectMultiple<'T when 'T : equality> (store:IStore>) : SutilElement =\n bindSelected store (fun sln -> store <~ sln)\n\nlet bindSelectSingle<'T when 'T : equality> (store:IStore<'T>) : SutilElement =\n bindSelected (store .> List.singleton) (fun sln -> sln |> List.exactlyOne |> Store.set store)\n\nlet bindSelectOptional<'T when 'T : equality> (store:IStore<'T option>) : SutilElement =\n let toList topt = match topt with |None -> []|Some t -> List.singleton t\n let fromList list = match list with |[] -> None |x::_ -> Some x\n bindSelected (store .> toList) (fun sln -> sln |> fromList |> Store.set store)\n\nlet private isNullString (obj:obj) =\n isNull obj || System.String.IsNullOrEmpty(downcast obj)\n\nlet private getId (s : IStore<'T>) = s.GetHashCode()\n\nlet bindGroup<'T> (store:Store>) : SutilElement =\n SutilElement.Define( \"bindGroup\",\n fun ctx ->\n let parent = ctx.ParentNode\n let name = match Interop.get parent \"name\" with\n | s when isNullString s -> $\"store-{getId store}\"\n | s -> s\n\n // Group this input with all other inputs that reference the same store\n Interop.set parent \"name\" name\n\n let getValueList() =\n let inputs = (documentOf parent).querySelectorAll(@$\"input[name=\"\"{name}\"\"]\")\n [0..(inputs.length-1)] |> List.map (fun i -> inputs.[i]) |> List.filter getInputChecked |> List.map getInputValue\n\n let updateChecked (v : List) =\n setInputChecked parent ( v |> List.contains (getInputValue parent) )\n\n // Update the store when the radio box is clicked on\n let unsubInput = DomHelpers.listen \"input\" parent <| fun _ ->\n getValueList() |> Store.set store\n\n // We need to finalize checked status after all attrs have been processed for input,\n // in case 'value' hasn't been set yet\n once Event.ElementReady parent <| fun _ ->\n store |> Store.get |> updateChecked\n\n // When store changes make sure check status is synced\n let unsub = store |> Store.subscribe (updateChecked)\n\n SutilEffect.RegisterDisposable(ctx.Parent,unsub)\n SutilEffect.RegisterUnsubscribe(ctx.Parent,unsubInput)\n () )\n\n// T can realistically only be numeric or a string. We're relying (I think!) on JS's ability\n// to turn a string into an int automatically in the Store.set call (maybe it's Fable doing that)\n//\nlet bindRadioGroup<'T> (store:Store<'T>) : SutilElement =\n SutilElement.Define( \"bindRadioGroup\",\n fun ctx ->\n let parent = ctx.ParentNode\n let name = match Interop.get parent \"name\" with\n | s when isNullString s -> $\"store-{getId store}\"\n | s -> s\n // Group this input with all other inputs that reference the same store\n Interop.set parent \"name\" name\n\n let updateChecked (v : obj) =\n setInputChecked parent ( (string v) = getInputValue parent )\n\n // Update the store when the radio box is clicked on\n let inputUnsub = listen \"input\" parent <| fun _ ->\n Interop.get parent \"value\" |> Store.set store\n\n // We need to finalize checked status after all attrs have been processed for input,\n // in case 'value' hasn't been set yet\n once Event.ElementReady parent <| fun _ ->\n store |> Store.get |> updateChecked\n\n // When store changes make sure check status is synced\n let unsub = store |> Store.subscribe updateChecked\n\n SutilEffect.RegisterDisposable(ctx.Parent,unsub)\n SutilEffect.RegisterUnsubscribe(ctx.Parent,inputUnsub)\n\n () )\n\nlet bindClassToggle (toggle:IObservable) (classesWhenTrue:string) (classesWhenFalse:string) =\n bindSub toggle <| fun ctx active ->\n if active then\n ctx.ParentElement |> ClassHelpers.removeFromClasslist classesWhenFalse\n ctx.ParentElement |> ClassHelpers.addToClasslist classesWhenTrue\n else\n ctx.ParentElement |> ClassHelpers.removeFromClasslist classesWhenTrue\n ctx.ParentElement |> ClassHelpers.addToClasslist classesWhenFalse\n\n// Deprecated\nlet bindClass (toggle:IObservable) (classes:string) = bindClassToggle toggle classes \"\"\n\nlet bindClassNames (classNames:IObservable<#seq>) =\n bindSub classNames <| fun ctx current ->\n ctx.ParentElement.className <- \"\"\n ctx.ParentElement.classList.add( current |> Array.ofSeq )\n\nlet bindClassName (classNames:IObservable) =\n bindSub classNames <| fun ctx current ->\n ctx.ParentElement.className <- current\n\n/// Bind a store value to an element attribute. Updates to the element are unhandled\nlet bindAttrIn<'T> (attrName:string) (store : IObservable<'T>) : SutilElement =\n SutilElement.Define(\"bindAttrIn\",\n fun ctx ->\n let unsub =\n if attrName = \"class\" then\n store |> Store.subscribe (fun cls -> ctx.ParentElement.className <- (string cls))\n else\n store |> Store.subscribe (DomHelpers.setAttribute ctx.ParentElement attrName)\n SutilEffect.RegisterDisposable(ctx.Parent,unsub)\n () )\n\nlet bindAttrOut<'T> (attrName:string) (onchange : 'T -> unit) : SutilElement =\n SutilElement.Define( \"bindAttrOut\",\n fun ctx ->\n let parent = ctx.ParentNode\n let unsubInput = listen \"input\" parent <| fun _ ->\n Interop.get parent attrName |> onchange\n SutilEffect.RegisterUnsubscribe(ctx.Parent,unsubInput)\n () )\n\n// Bind a scalar value to an element attribute. Listen for onchange events and dispatch the\n// attribute's current value to the given function. This form is useful for view templates\n// where v is invariant (for example, an each that already filters on the value of v, like Todo.Done)\nlet attrNotify<'T> (attrName:string) (value :'T) (onchange : 'T -> unit) : SutilElement =\n SutilElement.Define( \"attrNotify\",\n fun ctx ->\n let parent = ctx.ParentNode\n let unsubInput = listen \"input\" parent <| fun _ ->\n Interop.get parent attrName |> onchange\n Interop.set parent attrName value\n SutilEffect.RegisterUnsubscribe(ctx.Parent, unsubInput)\n () )\n\n// Bind an observable value to an element attribute. Listen for onchange events and dispatch the\n// attribute's current value to the given function\nlet bindAttrBoth<'T> (attrName:string) (value : IObservable<'T>) (onchange : 'T -> unit) : SutilElement =\n fragment [\n bindAttrIn attrName value\n bindAttrOut attrName onchange\n ]\n\nlet bindListen<'T> (attrName:string) (store : IObservable<'T>) (event:string) (handler : Event -> unit) : SutilElement =\n SutilElement.Define( \"bindListen\",\n fun ctx ->\n let parent = ctx.ParentNode\n let unsubA = DomHelpers.listen event parent handler\n let unsubB = store |> Store.subscribe ( Interop.set parent attrName )\n SutilEffect.RegisterUnsubscribe(ctx.Parent,unsubA)\n SutilEffect.RegisterDisposable(ctx.Parent,unsubB)\n () )\n\n// Bind a store value to an element attribute. Listen for onchange events write the converted\n// value back to the store\nlet private bindAttrConvert<'T> (attrName:string) (store : Store<'T>) (convert : obj -> 'T) : SutilElement =\n SutilElement.Define( \"bindAttrConvert\",\n fun ctx ->\n let parent = ctx.ParentNode\n //let attrName' = if attrName = \"value\" then \"__value\" else attrName\n let unsubInput = DomHelpers.listen \"input\" parent <| fun _ ->\n Interop.get parent attrName |> convert |> Store.set store\n let unsub = store |> Store.subscribe ( Interop.set parent attrName )\n SutilEffect.RegisterUnsubscribe(parent,unsubInput)\n SutilEffect.RegisterDisposable(parent,unsub)\n () )\n\n// Unsure how to safely convert Element.getAttribute():string to 'T\nlet private convertObj<'T> (v:obj) : 'T =\n v :?> 'T\n\n// Bind a store to an attribute in both directions\nlet bindAttrStoreBoth<'T> (attrName:string) (store : Store<'T>) =\n bindAttrConvert attrName store convertObj<'T>\n\nlet bindAttrStoreOut<'T> (attrName:string) (store : Store<'T>) : SutilElement =\n SutilElement.Define( \"bindAttrStoreOut\",\n fun ctx ->\n let parent = ctx.ParentNode\n let unsubInput = DomHelpers.listen \"input\" parent <| fun _ ->\n Interop.get parent attrName |> convertObj<'T> |> Store.set store\n //(asEl parent).addEventListener(\"input\", (fun _ -> Interop.get parent attrName |> convertObj<'T> |> Store.set store ))\n SutilEffect.RegisterUnsubscribe(ctx.Parent,unsubInput)\n ()\n )\n\nlet private attrIsSizeRelated (attrName:string) =\n let upr = attrName.ToUpper()\n upr.IndexOf(\"WIDTH\") >= 0 || upr.IndexOf(\"HEIGHT\") >= 0\n\nlet listenToProp<'T> (attrName:string) (dispatch: 'T -> unit) : SutilElement =\n SutilElement.Define( sprintf \"listenToProp %s\" attrName,\n fun ctx ->\n let parent = ctx.ParentNode\n let notify() = Interop.get parent attrName |> convertObj<'T> |> dispatch\n\n once Event.ElementReady parent <| fun _ ->\n if attrIsSizeRelated attrName then\n SutilEffect.RegisterDisposable(parent,(ResizeObserver.getResizer (downcast parent)).Subscribe( notify ))\n else\n SutilEffect.RegisterUnsubscribe(parent, DomHelpers.listen \"input\" parent (fun _ -> notify()))\n\n rafu notify\n () )\n\nlet bindPropOut<'T> (attrName:string) (store : Store<'T>) : SutilElement =\n listenToProp attrName (Store.set store)\n\ntype KeyedStoreItem<'T,'K> = {\n Key : 'K\n //CachedElement : HTMLElement\n Node : SutilEffect\n SvId : int\n Position : IStore\n Value: IStore<'T>\n Rect: ClientRect\n}\n\nlet private findCurrentNode doc (current:Node) (id:int) =\n if (isNull current || isNull current.parentNode) then\n if logEnabled() then log($\"each: Find node with id {id}\")\n match DomHelpers.findNodeWithSvId doc id with\n | None ->\n if logEnabled() then log(\"each: Disaster: cannot find node\")\n null\n | Some n ->\n if logEnabled() then log($\"each: Found it: {n}\")\n n\n else\n //log($\"Cannot find node with id {id}\")\n current\n\nlet private findCurrentElement doc (current:Node) (id:int) =\n let node = findCurrentNode doc current id\n match node with\n | null -> null\n | n when isElementNode n -> n :?> HTMLElement\n | x -> if logEnabled() then log $\"each: Disaster: found node but it's not an HTMLElement\"\n null\n\nlet private genEachId = Helpers.makeIdGenerator()\n\n\nlet private asDomNode (element: SutilEffect) (ctx: BuildContext) : Node =\n //let result = (ctx |> build element)\n match element.collectDomNodes () with\n | [ n ] -> n\n | [] -> errorNode ctx.Parent $\"Error: Empty node from {element} #{element.Id}\"\n | xs ->\n let doc = ctx.Document\n let tmpDiv = doc.createElement (\"div\")\n\n let en =\n errorNode (DomNode tmpDiv) \"'fragment' not allowed as root for 'each' blocks\"\n\n DomEdit.appendChild tmpDiv en\n ctx.Parent.AppendChild tmpDiv\n\n xs\n |> List.iter (fun x -> DomEdit.appendChild tmpDiv x)\n\n upcast tmpDiv\n\nlet private asDomElement (element: SutilEffect) (ctx: BuildContext) : HTMLElement =\n let node = asDomNode element ctx\n\n if isElementNode node then\n downcast node\n else\n let doc = ctx.Document\n let span = doc.createElement (\"span\")\n DomEdit.appendChild span node\n ctx.Parent.AppendChild span\n span\n\nlet eachiko_wrapper (items:IObservable>) (view : IObservable * IObservable<'T> -> SutilElement) (key:int*'T->'K) (trans : TransitionAttribute list) : SutilElement =\n let log s = Logging.log \"each\" s\n\n SutilElement.Define(\"eachiko_wrapper\",\n fun ctx ->\n log($\"eachiko: Previous = {ctx.Previous}\")\n let eachGroup = SutilEffect.MakeGroup(\"each\",ctx.Parent,ctx.Previous)\n let eachNode = Group eachGroup\n ctx.AddChild eachNode\n\n let mutable state = ([| |] : KeyedStoreItem<'T,'K> array) .ToCollectionWrapper()\n let eachId = genEachId() + 1\n let idKey = \"svEachId\"\n let hasEid (n : Node) = Interop.exists n idKey\n let eachIdOf n : int = if hasEid n then Interop.get n idKey else -1\n let setEid n = Interop.set n idKey eachId\n let eachCtx = ctx |> ContextHelpers.withParent eachNode\n\n#if LOGGING_ENABLED\n let logState state' =\n Browser.Dom.console.groupCollapsed(\"each state #\" + eachGroup.Id)\n state' |> List.map (fun s -> sprintf \"%s %f,%f\" (string s.Key) s.Rect.left s.Rect.top) |> List.iter (fun s -> log(s))\n Browser.Dom.console.groupEnd()\n\n let logItems (items : list<'T>) =\n Browser.Dom.console.groupCollapsed(\"each items #\" + eachGroup.Id)\n items |> List.mapi (fun i s -> sprintf \"%s\" (string (key(i,s)))) |> List.iter (fun s -> log(s))\n Browser.Dom.console.groupEnd()\n#endif\n\n let unsub = items |> Store.subscribe (fun newItems ->\n let wantAnimate = true\n\n if Logging.isEnabled \"each\" then\n log(\"-- Each Block Render -------------------------------------\")\n log($\"caching rects for render. Previous: {state |> CollectionWrapper.length} items. Current {newItems |> CollectionWrapper.length} items\")\n\n state <- state |> CollectionWrapper.map (fun ki ->\n let el = findCurrentElement ctx.Document (*ki.Element*)null ki.SvId\n { ki with (*Element = el; *)Rect = el.getBoundingClientRect() })\n\n //logItems newItems\n //logState state\n\n // Last child that doesn't have our eachId\n if Logging.isEnabled \"each\" then log($\"Previous = {ctx.Previous}\")\n //let prevNodeInit : Node = vnode.PrevDomNode\n let mutable prevNode = SideEffect\n\n let newState = newItems |> CollectionWrapper.mapi (fun itemIndex item ->\n let itemKey = key(itemIndex,item)\n let optKi = state |> CollectionWrapper.tryFind (fun x -> x.Key = itemKey)\n match optKi with\n | None ->\n let storePos = Store.make itemIndex\n let storeVal = Store.make item\n let ctx2 = eachCtx |> ContextHelpers.withPrevious prevNode\n if Logging.isEnabled \"each\" then log $\"++ creating new item '{item}' (key={itemKey}) with prev='{prevNode}' action={ctx2.Action}\"\n let sutilNode = ctx2 |> build (view (storePos,storeVal))\n let itemNode = ctx2 |> asDomElement sutilNode\n if Logging.isEnabled \"each\" then log $\"-- created #{svId itemNode} with prev='{nodeStrShort (itemNode.previousSibling)}'\"\n setEid itemNode\n SutilEffect.RegisterDisposable(sutilNode,storePos)\n SutilEffect.RegisterDisposable(sutilNode,storeVal)\n transitionNode itemNode trans [Key (string itemKey)] true ignore ignore\n let newKi = {\n SvId = svId itemNode\n Key = itemKey\n Node = sutilNode\n //CachedElement = itemNode\n Position = storePos\n Rect = itemNode.getBoundingClientRect()\n Value = storeVal\n }\n\n let prevEl = itemNode.previousSibling :?> HTMLElement\n if Logging.isEnabled \"each\" then log $\"new item #{newKi.SvId} eid={eachIdOf itemNode} {itemKey} {rectStr newKi.Rect} prevNode={prevNode} prevSibling={nodeStr prevEl}\"\n prevNode <- sutilNode\n newKi\n | Some ki ->\n ki.Position |> Store.modify (fun _ -> itemIndex)\n ki.Value |> Store.modify (fun _ -> item)\n let el = findCurrentElement ctx.Document null ki.SvId (*ki.Element*)\n if Logging.isEnabled \"each\" then log $\"existing item {ki.SvId} {ki.Key} {rectStr ki.Rect}\"\n if wantAnimate then\n clearAnimations el\n animateNode el (ki.Rect)\n prevNode <- ki.Node\n ki\n )\n\n //logState newState\n\n if Logging.isEnabled \"each\" then log(\"Remove old items\")\n // Remove old items\n for oldItem in state do\n if not (newState |> CollectionWrapper.exists (fun x -> x.Key = oldItem.Key)) then\n if Logging.isEnabled \"each\" then log($\"removing key {oldItem.Key}\")\n let el = findCurrentElement ctx.Document null oldItem.SvId (*oldItem.Element*)\n fixPosition el\n //ctx.Parent.RemoveChild(el) |> ignore\n ctx.Parent.InsertBefore(el,null) |> ignore\n //oldItem.Node.Dispose()\n transitionNode el trans [Key (string oldItem.Key)] false\n ignore (fun e -> eachGroup.RemoveChild(oldItem.Node))\n\n //ctx.Parent.PrettyPrint(\"each #\" + vnode.Id + \": before reorder\")\n\n // Reorder\n let mutable prevDomNode = eachGroup.PrevDomNode\n for ki in newState do\n if Logging.isEnabled \"each\" then log($\"Checking order: #{ki.SvId}\")\n let el = findCurrentElement ctx.Document null ki.SvId (*ki.Element*)\n if not (isNull el) then\n if not(isSameNode prevDomNode el.previousSibling) then\n if Logging.isEnabled \"each\" then log($\"reordering: ki={nodeStr el} prevNode={nodeStr prevDomNode}\")\n if Logging.isEnabled \"each\" then log($\"reordering key {ki.Key} {nodeStrShort el} parent={el.parentNode}\")\n //ctx.Parent.RemoveChild(el) |> ignore\n ctx.Parent.InsertAfter(el, prevDomNode)\n prevDomNode <- el\n\n //ctx.Parent.PrettyPrint(\"each #\" + vnode.Id + \": after reorder\")\n\n state <- newState\n )\n\n eachGroup.RegisterUnsubscribe (Helpers.unsubify unsub)\n eachNode\n )\n\nlet private duc = Observable.distinctUntilChanged\n\nlet eachiko = eachiko_wrapper\n\nlet each (items:IObservable>) (view : 'T -> SutilElement) (trans : TransitionAttribute list) =\n eachiko_wrapper items (fun (_,item) -> bindElement (duc item) view) (fun (i,v) -> i,v.GetHashCode()) trans\n\nlet eachi (items:IObservable>) (view : (int*'T) -> SutilElement) (trans : TransitionAttribute list) : SutilElement =\n eachiko items (fun (index,item) -> bindElement2 (duc index) (duc item) view) fst trans\n\nlet eachio (items:IObservable>) (view : (IObservable*IObservable<'T>) -> SutilElement) (trans : TransitionAttribute list) =\n eachiko items view fst trans\n\nlet eachk (items:IObservable>) (view : 'T -> SutilElement) (key:'T -> 'K) (trans : TransitionAttribute list) =\n eachiko\n items\n (fun (_,item) -> bindElement (duc item) view)\n (snd>>key)\n trans\n\n#if false\nlet each_seq (items:IObservable>) (view : 'T -> SutilElement) (trans : TransitionAttribute list) =\n eachiko_seq items (fun (_,item) -> bindElement (duc item) view) (fun (i,v) -> i,v.GetHashCode()) trans\n\nlet eachi_seq (items:IObservable>) (view : (int*'T) -> SutilElement) (trans : TransitionAttribute list) : SutilElement =\n eachiko items (fun (index,item) -> bindElement2 (duc index) (duc item) view) fst trans\n\nlet eachio_seq (items:IObservable>) (view : (IObservable*IObservable<'T>) -> SutilElement) (trans : TransitionAttribute list) =\n eachiko_seq items view fst trans\n\nlet eachk_seq (items:IObservable>) (view : 'T -> SutilElement) (key:'T -> 'K) (trans : TransitionAttribute list) =\n eachiko_seq\n items\n (fun (_,item) -> bindElement (duc item) view)\n (snd>>key)\n trans\n#endif\n\nlet bindStore<'T> (init:'T) (app:Store<'T> -> Core.SutilElement) : Core.SutilElement =\n SutilElement.Define( \"bindStore\",\n fun ctx ->\n let s = Store.make init\n SutilEffect.RegisterDisposable(ctx.Parent,s)\n ctx |> (s |> app |> build)\n )\n\nlet declareStore<'T> (init : 'T) (f : Store<'T> -> unit) =\n declareResource (fun () -> Store.make init) f\n\nopen Browser.CssExtensions\n\nlet bindStyle<'T> (value : IObservable<'T>) (f : CSSStyleDeclaration -> 'T -> unit) =\n SutilElement.Define( \"bindStyle\",\n fun ctx ->\n let style = ctx.ParentElement.style\n let unsub = value.Subscribe(f style)\n SutilEffect.RegisterDisposable( ctx.Parent, unsub )\n () )\n\nlet bindWidthHeight (wh: IObservable) =\n bindStyle wh (fun style (w,h) ->\n if w <> 0.0 && h <> 0.0 then\n style.width <- w.ToString() + \"px\"\n style.height <- h.ToString() + \"px\"\n )\n\nlet bindLeftTop (xy : IObservable) =\n bindStyle xy (fun style (x,y) ->\n if x <> 0.0 && y <> 0.0 then\n style.left <- x.ToString() + \"px\"\n style.top <- y.ToString() + \"px\"\n )\n\nlet (|=>) store element = bindElement store element\n\nlet cssAttrsToString (cssAttrs) =\n cssAttrs |> Seq.map (fun (n,v) -> $\"{n}: {v};\") |> String.concat \"\"\n\nlet listWrap( list : 'T list ) = list.ToCollectionWrapper()\nlet listWrapO (list : IObservable<'T list>) = list |> Store.map listWrap\n\nlet arrayWrap( arr : 'T array ) = arr.ToCollectionWrapper()\nlet arrayWrapO (arr : IObservable<'T array>) = arr |> Store.map arrayWrap\n","namespace Sutil\n\nopen Transition\nopen Core\nopen Browser.Types\nopen System\nopen Fable.Core\nopen Bindings\nopen CoreElements\n\n/// \n/// Bindings for observables and the Core. For example, use an IObservable<bool> to toggle an element's class attribute\n/// \ntype Bind =\n\n static member visibility( isVisible : IObservable) = Transition.transition [] isVisible\n static member visibility( isVisible : IObservable,trans : TransitionAttribute list) = Transition.transition trans isVisible\n\n /// \n /// For input[type='radio']\n /// Only the checkbox with store's current value will be checked at any one time.\n /// \n static member radioValue<'T>( store : Store<'T> ) = Sutil.Bindings.bindRadioGroup store\n\n /// \n /// For multiple input elements. The input elements are grouped explicitly by name, or will be implicitly grouped by\n /// the (internal) name of the binding store.\n /// Each checkbox in the group is checked if its value is contained in the current string list\n /// \n static member checkboxGroup( store : Store ) = Sutil.Bindings.bindGroup store\n\n static member selectMultiple<'T when 'T : equality>( store : IStore<'T list> ) = Sutil.Bindings.bindSelectMultiple store\n static member selectOptional<'T when 'T : equality>( store : Store<'T option> ) = Sutil.Bindings.bindSelectOptional store\n static member selectSingle<'T when 'T : equality>( store : Store<'T> ) = Sutil.Bindings.bindSelectSingle store\n\n static member selectSingle<'T when 'T : equality>( value : System.IObservable<'T>, dispatch : 'T -> unit ) =\n bindSelected (value .> List.singleton) (List.exactlyOne >> dispatch)\n\n static member selectMultiple<'T when 'T : equality>( value : System.IObservable<'T list>, dispatch: 'T list -> unit ) =\n bindSelected value dispatch\n\n ///\n /// Bind a scalar value to an element attribute. Listen for onchange events and dispatch the\n /// attribute's current value to the given function. This form is useful for view templates\n /// where v is invariant (for example, an each that already filters on the value of v, like Todo.Done)\n ///\n static member attrInit<'T>( attrName : string, initValue : 'T, dispatch : 'T -> unit) = attrNotify attrName initValue dispatch\n\n /// Two-way binding from value to attribute and from attribute to dispatch function\n static member attr<'T> (name:string, value: IObservable<'T>, dispatch: 'T -> unit) =\n bindAttrBoth name value dispatch\n\n /// Dual-binding for a given attribute. Changes to value are written to the attribute, while\n /// changes to the attribute are written back to the store. Note that an IStore is also\n /// an IObservable, for which a separate overload exists.\n static member attr<'T> (name:string, value: IStore<'T>) = bindAttrStoreBoth name value\n\n /// One-way binding from value to attribute. Note that passing store to this function will\n /// select the more specific `attr<'T>( string, IStore<'T>)` overload.\n /// If that looks to be a problem, we'll rename both of them to force a considered choice.\n static member attr<'T> (name:string, value: IObservable<'T>) = bindAttrIn name value\n\n /// One-way binding from attribute to dispatch function\n static member attr<'T> (name:string, dispatch: 'T -> unit) = bindAttrOut name dispatch\n\n /// One way binding from style values into style attribute\n static member style (attrs : IObservable<#seq>) =\n Bind.attr(\"style\", attrs |> Store.map cssAttrsToString)\n\n /// One way binding from custom values to style updater function. This allows updating of the element's style property rather than the style attribute string.\n static member style<'T>( values : IObservable<'T>, updater : CSSStyleDeclaration -> 'T -> unit ) =\n bindStyle values updater\n\n static member leftTop( xy : IObservable) =\n bindLeftTop xy\n\n static member widthHeight( xy : IObservable) =\n bindWidthHeight xy\n\n static member toggleClass (toggle:IObservable, activeClass : string, inactiveClass : string) =\n bindClassToggle toggle activeClass inactiveClass\n\n static member toggleClass (toggle:IObservable, activeClass : string) =\n bindClassToggle toggle activeClass \"\"\n\n static member className (name:IObservable) =\n bindClassName name\n\n static member classNames (name:IObservable<#seq>) =\n bindClassNames name\n\n /// Binding from value to a DOM fragment. Each change in value replaces the current DOM fragment\n /// with a new one.\n static member el<'T> (value : IObservable<'T>, element: 'T -> SutilElement) : SutilElement =\n bindElement value element\n\n static member el<'T,'K when 'K : equality> (value : IObservable<'T>, key:'T->'K, element: 'T -> SutilElement) : SutilElement =\n bindElementK value element key\n\n static member el<'T,'K when 'K : equality> (value : IObservable<'T>, key:'T->'K, element: IObservable<'T> -> SutilElement) : SutilElement =\n bindElementKO value element key\n\n /// Deprecated naming, use Bind.el\n static member fragment<'T> (value : IObservable<'T>) (element: 'T -> SutilElement) = bindElement value element\n\n /// Binding from two values to a DOM fragment. See fragment<'T>\n static member el2<'A,'B> (valueA : IObservable<'A>) (valueB : IObservable<'B>) (element: 'A * 'B -> SutilElement) = bindElement2 valueA valueB element\n\n /// Deprecated naming, use Bind.el\n static member fragment2<'A,'B> (valueA : IObservable<'A>) (valueB : IObservable<'B>) (element: 'A * 'B -> SutilElement) = bindElement2 valueA valueB element\n\n static member selected<'T when 'T : equality> (value : IObservable<'T list>, dispatch : 'T list -> unit) = bindSelected value dispatch\n static member selected<'T when 'T : equality> (store : IStore<'T list>) = bindSelectMultiple store\n static member selected<'T when 'T : equality> (store : IStore<'T option>) = bindSelectOptional store\n static member selected<'T when 'T : equality> (store : IStore<'T>) = bindSelectSingle store\n\n // -- Simple cases: 'T -> view ---------------------------\n\n /// Bind lists to a simple template, with transitions\n static member each (items:IObservable>, view : 'T -> SutilElement, trans : TransitionAttribute list) =\n each (listWrapO items) view trans\n\n /// Bind lists to a simple template\n static member each (items:IObservable>, view : 'T -> SutilElement) =\n each (listWrapO items) view []\n\n // -- Keyed ----------------------------------------------\n\n /// Bind keyed lists to a simple template, with transitions\n /// Deprecated: Use a view template that takes IObservable<'T>\n static member each (items:IObservable>, view : 'T -> SutilElement, key:'T -> 'K, trans : TransitionAttribute list) : SutilElement =\n eachk (listWrapO items) view key trans\n\n /// Bind keyed lists to a simple template\n /// Deprecated: Use a view template that takes IObservable<'T>\n static member each (items:IObservable>, view : 'T -> SutilElement, key:'T -> 'K) : SutilElement =\n eachk (listWrapO items) view key []\n\n /// Bind keyed lists to a simple template, with transitions\n static member each (items:IObservable>, view : IObservable<'T> -> SutilElement, key:'T -> 'K, trans : TransitionAttribute list) : SutilElement =\n eachiko (listWrapO items) (snd>>view) (snd>>key) trans\n\n /// Bind keyed lists to a simple template, with transitions\n static member each (items:IObservable>, view : IObservable<'T> -> SutilElement, key:'T -> 'K) : SutilElement =\n eachiko (listWrapO items) (snd>>view) (snd>>key) []\n\n // -- Indexed Lists --------------------------------------------\n\n static member eachi (items:IObservable>, view : (int*'T) -> SutilElement, trans : TransitionAttribute list) : SutilElement =\n eachi (listWrapO items) view trans\n\n static member eachi (items:IObservable>, view : (int*'T) -> SutilElement ) : SutilElement =\n eachi (listWrapO items) view []\n\n // -- Observable views\n static member eachi (items:IObservable>, view : IObservable * IObservable<'T> -> SutilElement, trans : TransitionAttribute list) : SutilElement =\n eachio (listWrapO items) view trans\n\n static member eachi (items:IObservable>, view : IObservable * IObservable<'T> -> SutilElement ) : SutilElement =\n eachio (listWrapO items) view []\n\n static member eachi (items:IObservable>,view : IObservable * IObservable<'T> -> SutilElement,key:int*'T->'K,trans : TransitionAttribute list) : SutilElement =\n eachiko (listWrapO items) view key trans\n\n static member eachi (items:IObservable>,view : IObservable * IObservable<'T> -> SutilElement,key:int*'T->'K) : SutilElement =\n eachiko (listWrapO items) view key []\n\n static member promises (items : IObservable>, view : 'T -> SutilElement, waiting: SutilElement, error : Exception -> SutilElement)=\n Bind.el( items, fun p -> Bind.promise(p, view, waiting, error) )\n\n static member promise (p : JS.Promise<'T>, view : 'T -> SutilElement, waiting: SutilElement, error : Exception -> SutilElement)=\n Bind.el( p.ToObservable(), fun state ->\n match state with\n | PromiseState.Waiting -> waiting\n | PromiseState.Error x -> error x\n | PromiseState.Result r -> view r\n )\n\n static member promise (p : JS.Promise<'T>, view : 'T -> SutilElement) =\n let w = el \"div\" [ CoreElements.class' \"promise-waiting\"; text \"waiting...\"]\n let e (x : Exception) = el \"div\" [ CoreElements.class' \"promise-error\"; text x.Message ]\n Bind.promise(p, view, w, e )\n\n/// \n/// Bindings for array observables and the Core. For example, IObservable<int[]>. The Bind class already handles lists. BindArray exists to eliminate compilation errors related to overloading of the each method.\n/// \ntype BindArray =\n\n /// Bind arrays to a simple template, with transitions\n static member each (items:IObservable<'T []>, view : 'T -> SutilElement, trans : TransitionAttribute list) =\n each (arrayWrapO items) view trans\n\n /// Bind arrays to a simple template\n static member each (items:IObservable<'T []>, view : 'T -> SutilElement) =\n each (arrayWrapO items) view []\n\n /// Bind keyed arrays to a simple template, with transitions\n /// Deprecated: Use a view template that takes IObservable<'T>\n static member each (items:IObservable>, view : 'T -> SutilElement, key:'T -> 'K, trans : TransitionAttribute list) : SutilElement =\n eachk (arrayWrapO items) view key trans\n\n /// Bind keyed arrays to a simple template\n /// Deprecated: Use a view template that takes IObservable<'T>\n static member each (items:IObservable>, view : 'T -> SutilElement, key:'T -> 'K) : SutilElement =\n eachk (arrayWrapO items) view key []\n\n /// Bind keyed arrays to a simple template, with transitions\n static member each (items:IObservable>, view : IObservable<'T> -> SutilElement, key:'T -> 'K, trans : TransitionAttribute list) : SutilElement =\n eachiko (arrayWrapO items) (snd>>view) (snd>>key) trans\n\n /// Bind keyed arrays to a simple template, with transitions\n static member each (items:IObservable>, view : IObservable<'T> -> SutilElement, key:'T -> 'K) : SutilElement =\n eachiko (arrayWrapO items) (snd>>view) (snd>>key) []\n\n // -- Indexed Arrays --------------------------------------------\n\n static member eachi (items:IObservable>, view : (int*'T) -> SutilElement, trans : TransitionAttribute list) : SutilElement =\n eachi (arrayWrapO items) view trans\n\n static member eachi (items:IObservable>, view : (int*'T) -> SutilElement ) : SutilElement =\n eachi (arrayWrapO items) view []\n\n\n///\n/// Operators to help with bindings\n/// \n[]\nmodule BindOperators =\n\n /// \n /// An alias for Bind.el\n /// \n /// \n /// Consider this binding:\n /// \n /// Bind.el( model .> errorMessage, fun msg -> Html.div [ text msg ] )\n /// \n /// This operator would allow this to be rewritten as\n /// \n /// model .> errorMessage >/ fun msg -> Html.div [ text msg ]\n /// \n /// In fact, for this particular message, you can code golf this into\n /// \n /// model .> errorMessage >/ Html.div\n /// \n /// \n let (>/) a b = Bind.el( a , b)\n","namespace Feliz\r\n\r\nopen System\r\nopen Feliz.Styles\r\n\r\ntype AttrEngine<'Node>\r\n /// Customizable HTML Attribute generator API.\r\n ///\r\n /// Make a node with attribute name and value.\r\n /// Make a node for boolean attribute with name and value.\r\n (mk: string -> string -> 'Node, mkBool: string -> bool -> 'Node) =\r\n\r\n /// Create a custom attribute\r\n ///\r\n /// You generally shouldn't need to use this, if you notice an attribute missing please submit an issue.\r\n member _.custom (key: string, value: string) = mk key value\r\n\r\n /// List of types the server accepts, typically a file type.\r\n member _.accept (value: string) = mk \"accept\" value\r\n\r\n /// List of supported charsets.\r\n member _.acceptCharset (value: string) = mk \"accept-charset\" value\r\n\r\n /// Defines a keyboard shortcut to activate or add focus to the element.\r\n member _.accessKey (value: string) = mk \"accesskey\" value\r\n\r\n /// The URI of a program that processes the information submitted via the form.\r\n member _.action (value: string) = mk \"action\" value\r\n\r\n /// Alternative text in case an image can't be displayed.\r\n member _.alt (value: string) = mk \"alt\" value\r\n\r\n /// Controls the amplitude of the gamma function of a component transfer element when\r\n /// its type attribute is gamma.\r\n member _.amplitude (value: float) = mk \"amplitude\" (Util.asString value)\r\n\r\n /// Controls the amplitude of the gamma function of a component transfer element when\r\n /// its type attribute is gamma.\r\n member _.amplitude (value: int) = mk \"amplitude\" (Util.asString value)\r\n\r\n /// Identifies the currently active descendant of a `composite` widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-activedescendant\r\n member _.ariaActiveDescendant (id: string) = mk \"aria-activedescendant\" id\r\n\r\n /// Indicates whether assistive technologies will present all, or only parts\r\n /// of, the changed region based on the change notifications defined by the\r\n /// `aria-relevant` attribute.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-atomic\r\n member _.ariaAtomic (value: bool) = mkBool \"aria-atomic\" value\r\n\r\n /// Indicates whether an element, and its subtree, are currently being\r\n /// updated.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-busy\r\n member _.ariaBusy (value: bool) = mkBool \"aria-busy\" value\r\n\r\n /// Indicates the current \"checked\" state of checkboxes, radio buttons, and\r\n /// other widgets. See related `aria-pressed` and `aria-selected`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-checked\r\n member _.ariaChecked (value: bool) = mkBool \"aria-checked\" value\r\n\r\n /// Identifies the element (or elements) whose contents or presence are\r\n /// controlled by the current element. See related `aria-owns`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-controls\r\n member _.ariaControls ([] ids: string[]) = mk \"aria-controls\" (String.concat \" \" ids)\r\n\r\n /// Specifies a URI referencing content that describes the object. See\r\n /// related `aria-describedby`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-describedat\r\n\r\n member _.ariaDescribedAt (uri: string) = mk \"aria-describedat\" uri\r\n /// Identifies the element (or elements) that describes the object. See\r\n /// related `aria-describedat` and `aria-labelledby`.\r\n ///\r\n /// The `aria-labelledby` attribute is similar to `aria-describedby` in that\r\n /// both reference other elements to calculate a text alternative, but a\r\n /// label should be concise, where a description is intended to provide more\r\n /// verbose information.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-describedby\r\n\r\n member _.ariaDescribedBy ([] ids: string[]) = mk \"aria-describedby\" (String.concat \" \" ids)\r\n /// Indicates that the element is perceivable but disabled, so it is not\r\n /// editable or otherwise operable. See related `aria-hidden` and\r\n /// `aria-readonly`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-disabled\r\n member _.ariaDisabled (value: bool) = mkBool \"aria-disabled\" value\r\n\r\n // /// Indicates what functions can be performed when the dragged object is\r\n // /// released on the drop target. This allows assistive technologies to\r\n // /// convey the possible drag options available to users, including whether a\r\n // /// pop-up menu of choices is provided by the application. Typically, drop\r\n // /// effect functions can only be provided once an object has been grabbed\r\n // /// for a drag operation as the drop effect functions available are\r\n // /// dependent on the object being dragged.\r\n // ///\r\n // /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-dropeffect\r\n // member _.ariaDropEffect ([] values: AriaDropEffect []) = mk \"aria-dropeffect\" values |> Array.map Util.asString |> String.concat \" \"\r\n\r\n /// Indicates whether the element, or another grouping element it controls,\r\n /// is currently expanded or collapsed.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-expanded\r\n member _.ariaExpanded (value: bool) = mkBool \"aria-expanded\" value\r\n\r\n /// Identifies the next element (or elements) in an alternate reading order\r\n /// of content which, at the user's discretion, allows assistive technology\r\n /// to override the general default of reading in document source order.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-flowto\r\n member _.ariaFlowTo ([] ids: string[]) = mk \"aria-flowto\" (String.concat \" \" ids)\r\n\r\n /// Indicates an element's \"grabbed\" state in a drag-and-drop operation.\r\n ///\r\n /// When it is set to true it has been selected for dragging, false\r\n /// indicates that the element can be grabbed for a drag-and-drop operation,\r\n /// but is not currently grabbed, and undefined (or no value) indicates the\r\n /// element cannot be grabbed (default).\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-grabbed\r\n member _.ariaGrabbed (value: bool) = mkBool \"aria-grabbed\" value\r\n\r\n /// Indicates that the element has a popup context menu or sub-level menu.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-haspopup\r\n member _.ariaHasPopup (value: bool) = mkBool \"aria-haspopup\" value\r\n\r\n /// Indicates that the element and all of its descendants are not visible or\r\n /// perceivable to any user as implemented by the author. See related\r\n /// `aria-disabled`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-hidden\r\n member _.ariaHidden (value: bool) = mkBool \"aria-hidden\" value\r\n\r\n /// Indicates the entered value does not conform to the format expected by\r\n /// the application.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-invalid\r\n member _.ariaInvalid (value: bool) = mkBool \"aria-invalid\" value\r\n\r\n /// Defines a (Util.asString value) that labels the current element. See related\r\n /// `aria-labelledby`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-label\r\n member _.ariaLabel (value: string) = mk \"aria-label\" value\r\n /// Defines the hierarchical level of an element within a structure.\r\n ///\r\n /// This can be applied inside trees to tree items, to headings inside a\r\n /// document, to nested grids, nested tablists and to other structural items\r\n /// that may appear inside a container or participate in an ownership\r\n /// hierarchy. The value for `aria-level` is an integer greater than or\r\n /// equal to 1.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-level\r\n member _.ariaLevel (value: int) = mk \"aria-level\" (Util.asString value)\r\n\r\n /// Identifies the element (or elements) that labels the current element.\r\n /// See related `aria-label` and `aria-describedby`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-labelledby\r\n member _.ariaLabelledBy ([] ids: string[]) = mk \"aria-labelledby\" (String.concat \" \" ids)\r\n\r\n /// Indicates whether a text box accepts multiple lines of input or only a\r\n /// single line.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-multiline\r\n member _.ariaMultiLine (value: bool) = mkBool \"aria-multiline\" value\r\n\r\n /// Indicates that the user may select more than one item from the current\r\n /// selectable descendants.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-multiselectable\r\n member _.ariaMultiSelectable (value: bool) = mkBool \"aria-multiselectable\" value\r\n\r\n /// Identifies an element (or elements) in order to define a visual,\r\n /// functional, or contextual parent/child relationship between DOM elements\r\n /// where the DOM hierarchy cannot be used to represent the relationship.\r\n /// See related `aria-controls`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-owns\r\n member _.ariaOwns ([] ids: string[]) = mk \"aria-owns\" (String.concat \" \" ids)\r\n\r\n /// Indicates the current \"pressed\" state of toggle buttons. See related\r\n /// `aria-checked` and `aria-selected`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-pressed\r\n member _.ariaPressed (value: bool) = mkBool \"aria-pressed\" value\r\n\r\n /// Defines an element's number or position in the current set of listitems\r\n /// or treeitems. Not required if all elements in the set are present in the\r\n /// DOM. See related `aria-setsize`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-posinset\r\n member _.ariaPosInSet (value: int) = mk \"aria-posinset\" (Util.asString value)\r\n\r\n /// Indicates that the element is not editable, but is otherwise operable.\r\n /// See related `aria-disabled`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-readonly\r\n member _.ariaReadOnly (value: bool) = mkBool \"aria-readonly\" value\r\n\r\n // /// Indicates what user agent change notifications (additions, removals,\r\n // /// etc.) assistive technologies will receive within a live region. See\r\n // /// related `aria-atomic`.\r\n // ///\r\n // /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-relevant\r\n // member _.ariaRelevant ([] values: AriaRelevant []) = mk \"aria-relevant\" values |> Array.map Util.asString |> String.concat \" \"\r\n\r\n /// Indicates that user input is required on the element before a form may\r\n /// be submitted.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-required\r\n member _.ariaRequired (value: bool) = mkBool \"aria-required\" value\r\n\r\n /// Indicates the current \"selected\" state of various widgets. See related\r\n /// `aria-checked` and `aria-pressed`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-selected\r\n member _.ariaSelected (value: bool) = mkBool \"aria-selected\" value\r\n\r\n /// Defines the maximum allowed value for a range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuemax\r\n member _.ariaValueMax (value: float) = mk \"aria-valuemax\" (Util.asString value)\r\n /// Defines the maximum allowed value for a range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuemax\r\n member _.ariaValueMax (value: int) = mk \"aria-valuemax\" (Util.asString value)\r\n\r\n /// Defines the minimum allowed value for a range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuemin\r\n member _.ariaValueMin (value: float) = mk \"aria-valuemin\" (Util.asString value)\r\n /// Defines the minimum allowed value for a range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuemin\r\n member _.ariaValueMin (value: int) = mk \"aria-valuemin\" (Util.asString value)\r\n\r\n /// Defines the current value for a range widget. See related\r\n /// `aria-valuetext`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuenow\r\n member _.ariaValueNow (value: float) = mk \"aria-valuenow\" (Util.asString value)\r\n /// Defines the current value for a range widget. See related\r\n /// `aria-valuetext`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuenow\r\n member _.ariaValueNow (value: int) = mk \"aria-valuenow\" (Util.asString value)\r\n\r\n /// Defines the human readable text alternative of `aria-valuenow` for a\r\n /// range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuetext\r\n member _.ariaValueText (value: string) = mk \"aria-valuetext\" value\r\n\r\n /// Defines the number of items in the current set of listitems or\r\n /// treeitems. Not required if all elements in the set are present in the\r\n /// DOM. See related `aria-posinset`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-setsize\r\n member _.ariaSetSize (value: int) = mk \"aria-setsize\" (Util.asString value)\r\n\r\n /// Indicates that the script should be executed asynchronously.\r\n member _.async (value: bool) = mkBool \"async\" value\r\n\r\n /// Indicates the name of the CSS property or attribute of the target element\r\n /// that is going to be changed during an animation.\r\n member _.attributeName (value: string) = mk \"attributeName\" value\r\n\r\n /// Indicates whether controls in this form can by default have their values\r\n /// automatically completed by the browser.\r\n member _.autoComplete (value: string) = mk \"autocomplete\" value\r\n\r\n /// The element should be automatically focused after the page loaded.\r\n member _.autoFocus (value: bool) = mkBool \"autofocus\" value\r\n\r\n /// The audio or video should play as soon as possible.\r\n member _.autoPlay (value: bool) = mkBool \"autoplay\" value\r\n\r\n /// Specifies the direction angle for the light source on the XY plane (clockwise),\r\n /// in degrees from the x axis.\r\n member _.azimuth (value: float) = mk \"azimuth\" (Util.asString value)\r\n /// Specifies the direction angle for the light source on the XY plane (clockwise),\r\n /// in degrees from the x axis.\r\n member _.azimuth (value: int) = mk \"azimuth\" (Util.asString value)\r\n\r\n /// Represents the base frequency parameter for the noise function of the\r\n /// filter primitive.\r\n member _.baseFrequency (value: float) = mk \"baseFrequency\" (Util.asString value)\r\n /// Represents the base frequency parameter for the noise function of the\r\n /// filter primitive.\r\n member _.baseFrequency (value: int) = mk \"baseFrequency\" (Util.asString value)\r\n /// Represents the base frequency parameter for the noise function of the\r\n /// filter primitive.\r\n member _.baseFrequency (horizontal: float, vertical: float) = mk \"baseFrequency\" (Util.asString horizontal + \",\" + Util.asString vertical)\r\n /// Represents the base frequency parameter for the noise function of the\r\n /// filter primitive.\r\n member _.baseFrequency (horizontal: int, vertical: int) = mk \"baseFrequency\" (Util.asString horizontal + \",\" + Util.asString vertical)\r\n /// Represents the base frequency parameter for the noise function of the\r\n /// filter primitive.\r\n\r\n /// Defines when an animation should begin or when an element should be discarded.\r\n member _.begin' (value: string) = mk \"begin\" value\r\n\r\n /// Shifts the range of the filter. After applying the kernelMatrix of the \r\n /// element to the input image to yield a number and applied the divisor attribute, the bias\r\n /// attribute is added to each component. This allows representation of values that would\r\n /// otherwise be clamped to 0 or 1.\r\n member _.bias (value: float) = mk \"bias\" (Util.asString value)\r\n /// Shifts the range of the filter. After applying the kernelMatrix of the \r\n /// element to the input image to yield a number and applied the divisor attribute, the bias\r\n /// attribute is added to each component. This allows representation of values that would\r\n /// otherwise be clamped to 0 or 1.\r\n member _.bias (value: int) = mk \"bias\" (Util.asString value)\r\n\r\n /// Specifies a relative offset value for an attribute that will be modified during an animation.\r\n member _.by (value: float) = mk \"by\" (Util.asString value)\r\n /// Specifies a relative offset value for an attribute that will be modified during an animation.\r\n member _.by (value: int) = mk \"by\" (Util.asString value)\r\n /// Specifies a relative offset value for an attribute that will be modified during an animation.\r\n member _.by (value: string) = mk \"by\" value\r\n\r\n member _.capture (value: bool) = mkBool \"capture\" value\r\n\r\n /// This attribute declares the document's character encoding. Must be used in the meta tag.\r\n member _.charset (value: string) = mk \"charset\" value\r\n\r\n /// A URL that designates a source document or message for the information quoted. This attribute is intended to\r\n /// point to information explaining the context or the reference for the quote.\r\n member _.cite (value: string) = mk \"cite\" value\r\n\r\n /// Specifies a CSS class for this element.\r\n member _.className (value: string) = mk \"class\" value\r\n /// Takes a `seq` and joins them using a space to combine the classses into a single class property.\r\n ///\r\n /// `prop.className [ \"one\"; \"two\" ]`\r\n ///\r\n /// is the same as\r\n ///\r\n /// `prop.className \"one two\"`\r\n member _.className (names: seq) = mk \"class\" (String.concat \" \" names)\r\n\r\n /// Takes a `seq` and joins them using a space to combine the classses into a single class property.\r\n ///\r\n /// `prop.classes [ \"one\"; \"two\" ]` => `prop.className \"one two\"`\r\n member _.classes (names: seq) = mk \"class\" (String.concat \" \" names)\r\n\r\n member _.classes (names: seq) =\r\n let class' = names |> Seq.choose (function false, _ -> None | true, c -> Some c) |> String.concat \" \"\r\n mk \"class\" class'\r\n\r\n /// Defines the number of columns in a textarea.\r\n member _.cols (value: int) = mk \"cols\" (Util.asString value)\r\n\r\n /// Defines the number of columns a cell should span.\r\n member _.colSpan (value: int) = mk \"colspan\" (Util.asString value)\r\n\r\n /// A value associated with http-equiv or name depending on the context.\r\n member _.content (value: string) = mk \"content\" value\r\n\r\n /// Indicates whether the element's content is editable.\r\n member _.contentEditable (value: bool) = mkBool \"contenteditable\" value\r\n\r\n /// If true, the browser will offer controls to allow the user to control video playback,\r\n /// including volume, seeking, and pause/resume playback.\r\n member _.controls (value: bool) = mkBool \"controls\" value\r\n\r\n /// The SVG cx attribute define the x-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: , , and \r\n member _.cx (value: ICssUnit) = mk \"cx\" (Util.asString value)\r\n /// The SVG cx attribute define the x-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: , , and \r\n member _.cx (value: int) = mk \"cx\" (Util.asString value)\r\n\r\n /// The SVG cy attribute define the y-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: , , and \r\n member _.cy (value: ICssUnit) = mk \"cy\" (Util.asString value)\r\n /// The SVG cy attribute define the y-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: , , and \r\n member _.cy (value: int) = mk \"cy\" (Util.asString value)\r\n\r\n // TODO\r\n // /// Defines a SVG path to be drawn.\r\n // member _.d (path: seq) =\r\n // PropHelpers.createSvgPathFloat path\r\n // |> h.MakeAttr(\"d\",)\r\n // /// Defines a SVG path to be drawn.\r\n // member _.d (path: seq) =\r\n // PropHelpers.createSvgPathInt path\r\n // |> h.MakeAttr(\"d\",)\r\n /// Defines a SVG path to be drawn.\r\n member _.d (path: string) = mk \"d\" path\r\n\r\n // /// Sets the inner Html content of the element.\r\n // member _.dangerouslySetInnerHTML (content: string) = mk \"dangerouslySetInnerHTML\" (createObj [ \"__html\" ==> content ])\r\n\r\n /// This attribute indicates the time and/or date of the element.\r\n member _.dateTime (value: string) = mk \"datetime\" value\r\n\r\n /// Indicates to a browser that the script is meant to be executed after the document\r\n /// has been parsed, but before firing DOMContentLoaded.\r\n ///\r\n /// Scripts with the defer attribute will prevent the DOMContentLoaded event from\r\n /// firing until the script has loaded and finished evaluating.\r\n ///\r\n /// This attribute must not be used if the src attribute is absent (i.e. for inline scripts),\r\n /// in this case it would have no effect.\r\n member _.defer (value: bool) = mkBool \"defer\" value\r\n\r\n /// Represents the kd value in the Phong lighting model.\r\n ///\r\n /// In SVG, this can be any non-negative number.\r\n member _.diffuseConstant (value: float) = mk \"diffuseConstant\" (Util.asString value)\r\n /// Represents the kd value in the Phong lighting model.\r\n ///\r\n /// In SVG, this can be any non-negative number.\r\n member _.diffuseConstant (value: int) = mk \"diffuseConstant\" (Util.asString value)\r\n\r\n /// Sets the directionality of the element.\r\n member _.dirName (value: string) = mk \"dirName\" value\r\n\r\n /// Indicates whether the user can interact with the element.\r\n member _.disabled (value: bool) = mkBool \"disabled\" value\r\n\r\n /// Specifies the value by which the resulting number of applying the kernelMatrix\r\n /// of a element to the input image color value is divided to\r\n /// yield the destination color value.\r\n ///\r\n /// A divisor that is the sum of all the matrix values tends to have an evening\r\n /// effect on the overall color intensity of the result.\r\n member _.divisor (value: float) = mk \"divisor\" (Util.asString value)\r\n /// Specifies the value by which the resulting number of applying the kernelMatrix\r\n /// of a element to the input image color value is divided to\r\n /// yield the destination color value.\r\n ///\r\n /// A divisor that is the sum of all the matrix values tends to have an evening\r\n /// effect on the overall color intensity of the result.\r\n member _.divisor (value: int) = mk \"divisor\" (Util.asString value)\r\n\r\n /// This attribute, if present, indicates that the author intends the hyperlink to be used for downloading a resource.\r\n member _.download (value: bool) = mkBool \"download\" value\r\n\r\n /// Indicates whether the the element can be dragged.\r\n member _.draggable (value: bool) = mkBool \"draggable\" value\r\n\r\n /// SVG attribute to indicate a shift along the x-axis on the position of an element or its content.\r\n member _.dx (value: float) = mk \"dx\" (Util.asString value)\r\n /// SVG attribute to indicate a shift along the x-axis on the position of an element or its content.\r\n member _.dx (value: int) = mk \"dx\" (Util.asString value)\r\n\r\n /// SVG attribute to indicate a shift along the y-axis on the position of an element or its content.\r\n member _.dy (value: float) = mk \"dy\" (Util.asString value)\r\n /// SVG attribute to indicate a shift along the y-axis on the position of an element or its content.\r\n member _.dy (value: int) = mk \"dy\" (Util.asString value)\r\n\r\n /// SVG attribute that specifies the direction angle for the light source from the XY plane towards\r\n /// the Z-axis, in degrees.\r\n ///\r\n /// Note that the positive Z-axis points towards the viewer of the content.\r\n member _.elevation (value: float) = mk \"elevation\" (Util.asString value)\r\n /// SVG attribute that specifies the direction angle for the light source from the XY plane towards\r\n /// the Z-axis, in degrees.\r\n ///\r\n /// Note that the positive Z-axis points towards the viewer of the content.\r\n member _.elevation (value: int) = mk \"elevation\" (Util.asString value)\r\n\r\n /// Defines an end value for the animation that can constrain the active duration.\r\n member _.end' (value: string) = mk \"end\" value\r\n /// Defines an end value for the animation that can constrain the active duration.\r\n member _.end' (values: seq) = mk \"end\" (String.concat \";\" values)\r\n /// Defines the exponent of the gamma function.\r\n member _.exponent (value: float) = mk \"exponent\" (Util.asString value)\r\n /// Defines the exponent of the gamma function.\r\n member _.exponent (value: int) = mk \"exponent\" (Util.asString value)\r\n\r\n // /// Defines the files that will be uploaded when using an input element of the file type.\r\n // member _.files (value: FileList) = mk \"files\" value\r\n\r\n /// SVG attribute to define the opacity of the paint server (color, gradient, pattern, etc) applied to a shape.\r\n member _.fillOpacity (value: float) = mk \"fill-opacity\" (Util.asString value)\r\n /// SVG attribute to define the opacity of the paint server (color, gradient, pattern, etc) applied to a shape.\r\n member _.fillOpacity (value: int) = mk \"fill-opacity\" (Util.asString value)\r\n\r\n /// SVG attribute to define the size of the font from baseline to baseline when multiple\r\n /// lines of text are set solid in a multiline layout environment.\r\n member _.fontSize (value: float) = mk \"font-size\" (Util.asString value)\r\n /// SVG attribute to define the size of the font from baseline to baseline when multiple\r\n /// lines of text are set solid in a multiline layout environment.\r\n member _.fontSize (value: int) = mk \"font-size\" (Util.asString value)\r\n\r\n /// A space-separated list of other elements’ ids, indicating that those elements contributed input\r\n /// values to (or otherwise affected) the calculation.\r\n member _.for' (value: string) = mk \"for\" value\r\n /// A space-separated list of other elements’ ids, indicating that those elements contributed input\r\n /// values to (or otherwise affected) the calculation.\r\n member _.for' (ids: #seq) = mk \"for\" (ids |> String.concat \" \")\r\n\r\n /// The
element to associate the element with (its form owner). The value of this\r\n /// attribute must be the id of a in the same document. If this attribute is not set, the\r\n ///