EQ2001
A C# construct with no runtime equivalent in the browser (typed-reference intrinsics: __makeref, __reftype, __refvalue, stackalloc, pointers).
Restructure without it.
EQ2002
goto.
Restructure with loops and conditionals, or a labelled break/continue (those DO translate).
EQ2003
new T() on a type parameter — generic arguments are erased at runtime in JavaScript, so the concrete type is unknown.
Pass a factory (Func<T>) or the constructed value in.
EQ2004
A member with no JavaScript translation: an extension method whose declaring class is not part of this compilation, or a call the transpiler maps nothing for (Stopwatch.StartNew, Roslyn…) inside a class it mirrors, written qualified or reached bare through using static (WriteLine under using static System.Console, since 0.2.0-preview.60). Also a System.Range value stored rather than indexed with, or handed to an indexer that takes the Range itself (this[Range r], since 0.2.0-preview.61). A method group of a member no twin carries is the delegate its call is, so a group whose call has no translation fails with the call's own message, at the group (Func<string, string, IFormatProvider, TimeSpan> read = TimeSpan.ParseExact), and so does a group whose method hands a value back through an out or a ref, and a delegate with such parameters built from another. Also a member of a date, a time, an instant or a span that its twin does not carry (TimeSpan.TryFormat, DateTime.ToBinary); a static of a PACKAGE's type, from an assembly the build has no source for, read, called or reached through using static, and a construction of one, named with the assembly (Status.Label, new Gauge("a")), while a value of it the server sends keeps reading its members and a constant and an enum's member are their values; a construction of a .NET type no strategy builds (new Random(), new Stopwatch()); and an interpolation made a FormattableString or an IFormattable anywhere but FormattableString.Invariant, FormattableString.CurrentCulture and string.Create(provider, …) (since 0.2.0-preview.64). Also GetType() and MemberwiseClone(), called or taken as a method group, a chain read from one (x.GetType().Name) reported once, at its root (since 0.2.0-preview.64). A member of an API only a server has (file I/O, networking, OS threading) is never this code: it is the client boundary's (EQ2102–EQ2107, EQ2112), told once at the call.
Use an instance member or bring the declaring source in; add a strategy; for a range, index with it directly (text[a..b]), or give the type a Length (or a Count) and a Slice(int start, int length), which a range calls; construct a package's type and read its statics in a [ServerAction], or reference the project it is written in, whose types the build compiles; call a method that has an out where its value is needed; move the call behind a [ServerAction]; or, when the whole class only ever runs on the server, mark the CLASS [ServerOnly] and no module is emitted for it (0.2.0-preview.46).
EQ2005
An infinite iterator. Iterators are MATERIALISED into an array, so the loop would run forever instead of yielding lazily.
Give the loop an end (a bound, a yield break), or take what you need inside the method.
EQ2006
The member does not bind in the semantic model, so any translation would be a guess.
Either the code does not compile, or eqc is missing references / generated sources. Never guessed — see Compiler. EQ2007
A comparer that changes what a collection considers equal or in order: a collection expression's with(…) argument beyond a capacity hint, or a comparer handed to a collection's constructor (new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase)) or to a LINQ operator that finds its keys or its elements by it (ToHashSet, and ToDictionary, ToLookup, GroupBy and Distinct since 0.2.0-preview.61). A list, a set or a dictionary finds an element by its type's default equality and takes no other: the default comparers and StringComparer.Ordinal pass. A sort or a binary search takes the type's default comparer, a Comparison<T>, a StringComparer's six, Comparer<T>.Create and a comparer you write, and refuses only one no twin carries (a StringComparer made for a culture, a comparer a library compiled).
Drop the comparer, or normalize the keys yourself (lower-case them on the way in and on every lookup). For a sort, pass a Comparison<T>.
EQ2008
Query syntax using join, let, a second from, or into — its C# translation runs through compiler-generated transparent identifiers. Also the fenced initializer forms.
Rewrite in method syntax, where every operator is supported.
EQ2009
A component is declared more than once in one file (partial declarations). eqc emits one module per declaration and cannot merge them.
Combine the members into a single declaration.
EQ2010
A symbol the framework keeps on the HOST — a type or a single member marked [ServerOnly] — named from client code. The runtime ships no twin, so the reference would compile, emit, and fail at hydration on "does not provide an export named" while SSR kept answering 200. An extension method called on a value that crosses names its home too: curve.Ease(t) is CurveEvaluator.Ease(curve, t), and it failed at the call. A type declared inside one that never crosses (a [ServerOnly] class or an attribute) has no twin either, as its owner has none, while one declared inside an exception class of the app's crosses as that class does, so client code that reaches it is refused the same way, however it reaches it: its name, an alias, using static, an operator or a conversion its value brings, or a zero. A module that would import its twin reports it at the declaration that holds the reference (Since 0.2.0-preview.61). A member marked [ServerOnly] is refused wherever client code names it, the code of its own type included: a component leaves such a method out of its twin, and its own Build calling it was a call to a member the twin does not have (Since 0.2.0-preview.62). A class, a static class and a record leave it out of theirs too. A call or a method group that reaches such a method through its contract, the interface member it implements or the method it overrides, is refused as well, naming the method, wherever its receiver can be the type that keeps it: the contract carries no attribute, so ((IShape)new Circle()).Area() built and threw a TypeError in the browser, and a call through a base ran the base's method where .NET ran the server's. A call bound to a method that is not [ServerOnly], a call through base, a call made on a type that cannot hold the method, and a contract no client code calls (a server interface a page fulfils on the server) build, across the app and the projects it references. A variant interface's receiver can hold it too: ISource<object> holds a StringSource : ISource<string>, and ISink<string> an ObjectSink : ISink<object>, while ISource<int> holds neither. A [ServerOnly] member is refused as a bare method group as it is through this., and so is an extension block's, which no twin holds either. A [ServerOnly] operator or conversion is refused wherever client code applies it: a conversion, implicit or spelled as a cast, a compound assignment, a tuple equality, a foreach's element and a deconstruction's part, where Amount a = 7 built and called Amount.fromInt(7). So is a [ServerOnly] method C# calls for the code without naming it: Deconstruct in a deconstruction, Dispose in a using, and GetEnumerator, or the MoveNext, Current or Dispose of the enumerator it answers, wherever a sequence is read, a foreach, a spread [.. xs] or a LINQ operator. An instance member of a type the build writes no module for is refused where client code reads it off a value, whose position names no type, unless the value's expression holds a refusal already: ledger.Describe() over a parameter was written as ledger.describe(). A type of the app, or of a project it references, that the build writes no module for is refused wherever client code writes its name, a top-level one as much as a nested one: one marked [ServerOnly], one over a [ServerOnly] base, an attribute class, and the zero of a [ServerOnly] struct. A call, a read, using static, a method group, a construction, an operator, an extension, a type test, a local's or a member's annotation, and a Server Action's answer or parameter each name it. A position the module writes as nothing is free: a component's field or parameter (annotated any), a cast, a nameof, a reference type's zero, a type argument of a base list, which no twin writes, a dictionary's key or value type (annotated any with the dictionary), and a string literal that holds the name. Code that never crosses names it freely: a [ServerAction]'s body, a [ServerOnly] member, another [ServerOnly] class. A component crosses whatever it is marked.
Call it from server code: a [ServerAction], a [ServerOnly] class, or a realizer. Never from a component's Build. A call through a contract is made from server code too, or the method's [ServerOnly] is taken off so it crosses. Unlike EQ2004 this is a DECISION, not a gap — adding a strategy is not the answer.
EQ2011
A member that would take a name the runtime's component already uses. C# keeps a primary-constructor parameter, a field and a property apart, and spells them differently from the runtime's camelCase; JavaScript folds all of it onto this.<name>, so the assignment replaces the runtime's member and the page fails only in the browser. The list is read from the live runtime, never typed.
Rename the member. An override is exempt — a component's Build is meant to replace the runtime's build, and replacing a base member is what one is for — but a plain method is not: public void Mount() { } overrides nothing and still emits mount() over the runtime's own, so the component never mounts.
EQ2012
A [ServerAction] on an ABSTRACT component. The server registers an action under the name of the CONCRETE component carrying it — it skips abstract types and walks inherited methods — so it serves Tile/Load while a stub emitted on the base would invoke CardBase/Load. Nothing serves that id and the page gets "action not found", on both sides silently.
Declare the action on the concrete component. An alias is not the answer: the descriptor carries the component TYPE to invoke on, so two children inheriting one action give the base's id two answers — the owner of an inherited action is a decision, not a patch.
EQ2013
A vocabulary type whose browser half revives the values of a type argument (ServerTopic<T>) is built where that argument is, or holds, a type parameter, as in static ServerTopic<T> Topic<T>(string name) => new(name). JavaScript erases the type there, so the topic would carry no spec and every payload would reach its subscribers unrevived: a decimal or a long as the text the wire writes, a record without its members.
Build the topic where its payload type is concrete, as a static member of the type that declares the app's topics: static ServerTopic<RoomEvent> Room(string id) => new($"room:{id}"). See Server events. EQ2014
An exception type is built or tested where a type argument it carries, its own or one of a type it is nested in, is, or holds, a type parameter, as in static Exception Of<T>() => new Failed<T>(), catch (Failed<T>), or new Missing() inside the generic class that declares it. An exception carries the types it is, which a typed catch, is and its name read, and JavaScript erases a type parameter, so the exception would carry, or the test compare, T itself: catch (Failed<int>) missed what Of<int>() threw (Since 0.2.0-preview.61).
Build and test an exception where its type arguments are concrete types, and declare an exception class outside a generic type.