All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- [Dart] Enable explicit variable typing for more data types (by @ncave)
- [Dart] Fix tests for
round,sign,truncate,log,log2,log10,pow,DivRem,Min,Max,Clamp,MinMagnitude,MaxMagnitude,cosh,sinh,tanh, and floatParse(by @ncave) - [Python] Add
Math.DivRemsupport for int, int64, and bigint (by @dbrattli) - [Python] Fix modulo with negative numbers using Python floored semantics instead of .NET truncated semantics for bigint (fixes #4462) (by @dbrattli)
- [Beam] Fix
System.String.Concatwith 4+ arguments not being supported (by @dbrattli) - [TS/Python] Fix thisArg type for overloads in structs (#4453) (by @ncave)
- [TS/Python] Fix invalid
thisargument type in structs (#4453) (by @ncave) - [JS/TS] Fix
Nformat specifier (ToString("N0"),String.Format("{0:N0}", ...)) producing a trailing dot when precision is 0 (fix #2582) (by @MangelMaxime) - [JS/TS] Fix
C0andP0format specifiers producing trailing dot (e.g.,"¤1,000."→"¤1,000") (by @MangelMaxime) - [All] Fix captured side-effect-free values (e.g. empty ResizeArray) being incorrectly inlined into object expression getters in release mode, causing a new instance to be created on each getter call (fixes #3779) (by @MangelMaxime)
- [Python] Fix missing
awaiton else branch of ternary expressions in async closures (by @dbrattli) - [Beam] Fix
|> ignoreon cross-module Emit calls generating variable bindings that shadow Emit case-clause variables (by @dbrattli) - [Beam] Fix
containsIdentRefnot checkingCallThisArg (by @dbrattli) - [All] Fix CLI color not resetting after error messages (fixes #3755) (by @MangelMaxime)
- [JS/TS]
StringEnumnow respectCompiledValueandCompiledName(by @shayanhabibi) - [JS/TS] Fix invalid syntax emitted when negating negative literals (fix #4251) (by @MangelMaxime)
- [Rust] Fix negative counting in CallInfo.GenericArgs (by @ncave)
- [Rust] Fix inline bindings and captured idents tracking (by @ncave)
- [Rust] Fix
return!in async computation expressions so inner async workflows are returned and awaited correctly (by @mizzle-mo) - [JS/TS] Improve
Regex.EscapeandRegex.Unescapehandling (by @MangelMaxime) - [All] Fix allow plugins to target .NET6 target framework (by @MangelMaxime)
- [Python] Fix function references passed as arguments inside tail-call optimised functions gaining unnecessary default parameters for outer TCO variables they don't reference (fix #3877)
- [TS] Fix abstract instance methods not emitted in TypeScript when class uses
[<AttachMembers>](fixes #3506) (by @MangelMaxime) - [JS/TS] Fix
Unchecked.defaultof<'T>for struct types with fields returningundefinedinstead of zero-initialized values (by @MangelMaxime) - [JS/TS] Fixed quotation for union string cases (by @MangelMaxime)
- [Python] Fix
Unchecked.defaultof<'T>for struct types with fields returning incorrect values instead of zero-initialized instances (by @MangelMaxime) - [Python] Fix
Unchecked.defaultof<char>returning""(empty string) instead of"\u0000"(null character) (by @MangelMaxime) - [Python] Improve
Unchecked.defaultof<_>for declared entities (by @MangelMaxime)
[All] Add support for [<InlineIfLambda>] (by @MangelMaxime)
- [JS/TS] Fix
Array.zeroCreateproducingnullfor user-defined struct (value type) elements instead of a default-initialized instance (by @MangelMaxime) - [All] Fix interpolated string holes missing format specifiers in State.fs and Python/Replacements.fs (code scanning alerts 1144, 1145, 1512)
- [Rust] Replace unsafe
.IsSome && .Valueoption pattern withOption.existsin Fable2Rust.fs (code scanning alert 1125) - [JS/TS] Fix
Unchecked.defaultof<char>being emitted asnullinstead of'\0'(by @MangelMaxime) - [JS/TS] Fix
static val mutablefields declared with[<DefaultValue>]not being zero-initialized (fix #2739) (by @MangelMaxime) - [JS/TS/Python] Fix record/struct types augmented with
static letorstatic member valgenerating extra constructor parameters for each static field, causing constructor arguments to be assigned to wrong slots (by @MangelMaxime) - [TS] Annotate
System.Collections.Generic.IList<T>asMutableArray<T>(by @MangelMaxime) - [JS/TS] Fix
ResizeArrayindex getter/setter not throwingIndexOutOfRangeExceptionwhen index is out of bounds (fix #3812) (by @MangelMaxime) - [Beam] Fix unused term warning in try/catch when exception variable is not referenced (by @dbrattli)
- [Beam] Fix "no effect" warning for pure BIF calls (
self/0,node/0) in non-final block positions (by @dbrattli) - [Beam] Fix
reraise()generating unboundMatchValuevariable — use raw Erlang reason variable for re-throw (by @dbrattli) - [Beam] Fix
Erlang.receive<'T>()resolving to timeout overload due to F# unit argument (by @dbrattli) - [JS/TS] Generate comments for members in class decorated with
[<AttachMembers>](by @MangelMaxime) - [Beam] Fix
[<ImportAll>]generating invalidmodule:*()Erlang code when binding is used as a value (by @dbrattli) - [Beam] Fix string slicing and
Substringwith compound expressions producing wrongbinary:partlength due to missing parentheses in emitted Erlang (by @dbrattli) - [Beam] Fix non-ASCII characters in string literals being truncated to single bytes — emit
<<"..."/utf8>>instead of<<"...">>(by @dbrattli) - [Beam] Fix
Emitexpressions withcaseleaking variables into surrounding scope — auto-wrap in IIFE for scope isolation (by @dbrattli)
- [Beam] Auto-generate rebar3 scaffold (
rebar.config,.app.src) after compilation;.erlfiles now placed insrc/subdirectories (by @dbrattli) - [Beam] Support
[<ImportAll>]+[<Erase>]interface pattern for typed FFI bindings (by @dbrattli)
- [Beam] Fix dropped top-level side effects — multiple
ActionDeclarationmain/0functions are now merged (by @dbrattli) - [Beam] Fix
%%escape in string interpolation producing double%instead of single (by @dbrattli) - [Beam] Fix double-quoted atoms for uppercase
CompiledNameon DU cases (e.g.''EXIT''→'EXIT') (by @dbrattli) - [Beam] Fix cross-project imports producing self-recursive calls when source files share the same name (by @dbrattli)
- [Beam] Support
Type.GetGenericArgumentsandType.GetInterfacefor reflection (by @dbrattli) - [TS] Correctly resolve type references for
TypeScriptTaggedUnion(by @MangelMaxime and @jrwone0) - [TS] Expose optional
stackproperty onException(by @MangelMaxime) - [Python] Fix
nonlocal/globaldeclarations generated insidematch/casebodies causingSyntaxError(by @dbrattli) - [Python] Fix exception variable captured in deferred closures causing
NameError(PEP 3110 scoping) (by @dbrattli) - [JS/TS] Support format specifiers and single hole in JSX string templates (by @MangelMaxime)
- [All] Fix generic parameter resolution in inline functions with static member constraints (by @Programmerino and @MangelMaxime)
- [Beam] Add arithmetic tests and support for DivRem, MinMagnitude, MaxMagnitude, Decimal rounding, BigInt.Log (by @dbrattli)
- [Beam] Add
fable_random.erland fix Random seeded/NextBytes tests (by @dbrattli)
- [Python] Fix
__hash__to return nativeintinstead ofint32for Python 3.14 compatibility (by @dbrattli) - [Python] Fix PyPI publish workflow version pattern to support
rctags (by @dbrattli) - [Beam] Bundle
fable-library-beamin NuGet package sodotnet fable --lang beamworks (by @dbrattli) - [Beam] Fix optional arguments by unwrapping at call sites and padding missing trailing args (by @dbrattli)
- [Beam] Fix generic constraint interface dispatch (by @dbrattli)
- [Beam] Fix class constructor field invokes and explicit val fields (by @dbrattli)
- [Beam] Fix mutable record field mutation (by @dbrattli)
- [JS/TS] Allows compiling
fable-library-tsfor Browser environment (by @goswinr)
- [Beam] Add Erlang/BEAM target (
--lang beam). Compiles F# to.erlsource files. 2086 tests passing. (by @dbrattli)
- [Beam] Fix object expression self-references, constructor
as selfpatterns, and property get/set key collisions in object expressions (by @dbrattli) - [Python] Fix type var scoping for PEP 695 annotations: emit
Anyfor type vars outside function scope and prevent non-repeated generic params from leaking intoScopedTypeParams(by @dbrattli) - [JS/TS] Ignore extra args in FSharpType functions (by @olivercoad)
- [Python] Fix HashSet operations (Count, Contains, Remove, UnionWith, IntersectWith, ExceptWith) to work with both native Python sets and custom MutableSet (by @dbrattli)
- [Python] Fix
Array.length,.Length,Array.isEmpty, andResizeArray.Countto uselen()instead of.lengthproperty for plain Python list interop (by @dbrattli) - [Python] Fix
Task<T>pass-through returns not being awaited in if/else and try/with branches (by @dbrattli) - [Python] Fix
:? T as xtype test pattern in closures causingUnboundLocalErrordue tocast()shadowing outer variable (by @dbrattli) - [All] Prevent Fable from freezing when running a sub-process via
--run(fix #3631) (by @MangelMaxime) - [All] Improve console width detection when rewritting console output (by @MangelMaxime)
- [Python] Changed DU representation to use separate classes for each case (by @dbrattli)
- [Python] Fable will no longer auto-generate
__str__or__hash__for custom types. Use thePy.StringableandPy.Hashablemarker interfaces to generate these methods (by @dbrattli)
- [Python] Added ABC base classes for F# types and Py marker interfaces for Python interop (by @dbrattli)
- [Python] Add tuple pattern matching with guards and improve match statement generation (by @dbrattli)
- [Python] Add Python 3.10+ match statement support for pattern matching (by @dbrattli)
- [Python] Fix curry/uncurry to handle arbitrary number of arguments (by @dbrattli)
- [Python] Fix type annotations for protocols, Option casting, and abstract classes (by @dbrattli)
- [Python] Fix type annotations for curried functions and numeric types (by @dbrattli)
- [Python] Fix type annotations for inref, IList, DateKind, and regex collections (by @dbrattli)
- [Python] Fix type annotations for protocols, ABCs, Atom, and Set module (by @dbrattli)
- [Python] Fix type annotations for async functions, date operations, and None handling (by @dbrattli)
- [Python] Fix type annotations for tuple indexing, generic defaults, and reflection (by @dbrattli)
- [All] Fix
StringBuilder.Charsgetter and setter (by @MangelMaxime)
- [All] Remove
--legacyCrackerflag, MSBuild cracker is now the default and the only cracker supported (by @MangelMaxime)
- [Python] Use Fable AST for type parameter extraction instead of Python AST heuristics (by @dbrattli)
- [Python] Fix library type stubs for parse_int32/64 and from_integer (by @dbrattli)
- [Python] Fix missing type parameters on generic methods (by @dbrattli)
- [JS/TS] Fix #4305 DateTimeOffset.Now returns wrong time (by @ncave)
- [Python] Support catching Python
BaseExceptionsubclasses (KeyboardInterrupt,SystemExit,GeneratorExit) for Python interop (by @dbrattli)
- [Python] F#
task { }expressions now generate Pythonasync deffunctions (by @dbrattli) - [Python] Generate idiomatic
exceptclauses for typed exception patterns (by @dbrattli)
- [Python] Fix
ResizeArraycompatibility withSeq/Arrayfunctions (by @dbrattli) - [Python] Fix
FSharpListgeneric type parameter handling forIEnumerable_1compatibility (by @dbrattli)
- [Python] Add
Array.skipWhilesupport (by @dbrattli) - [Python] Add
Array.takeWhilesupport (by @dbrattli) - [Python] Allow
IEnumerator_1as base class to fix typing issues (by @dbrattli) - [Python] Add Pythonic import path syntax for relative imports (
.module,..parent,...grandparent) (by @dbrattli) - [Python] Add
[<Py.DecorateTemplate>]attribute for creating custom decorator attributes (by @dbrattli) - [Python] Add
[<Py.ClassAttributesTemplate>]attribute for creating custom class attribute shortcuts (by @dbrattli) - [Python] Add
[<Py.DataClass>]as a built-in shorthand for[<Py.ClassAttributes(style = Attributes, init = false)>](by @dbrattli)
- [Python] Fix String.Concat spread operator issue in Python transpilation (by @dbrattli)
- [Python] Fix regression
[<Erase>]on class types not preventing them from being emitted to Python (by @dbrattli) - [Python] Fix regression
%Aformat specifier to output booleans as lowercasetrue/false(by @dbrattli) - [Python] Fix various bugs in fable-library numeric types and string operations (by @dbrattli)
- [Python]
[<Py.Decorate>]now emits decorator strings verbatim and addsimportFromparameter for explicit import control (by @dbrattli)
- [Python] Fix
printf.cont()not applying continuation function when currying (by @dbrattli)
- [Python] Add support for
[<Py.Decorate>]attribute on methods (previously only worked on classes) (by @dbrattli) - [Python] Add new
[<Py.ClassMethod>]attribute to emit @classmethod instead of @staticmethod (by @dbrattli) - [Python] Added support for Pydantic serialization of core numeric and array types (by @dbrattli)
- [Python] Fix record member method naming (by @dbrattli)
- [Python] Fix regression, named arguments not being converted to snake_case (by @dbrattli)
- [Python] Fix regression, erased interfaces should not generate code (#4277) (by @dbrattli)
- [Rust] Update
fable-library-rustdependencies (by @ncave) - [All] Update TargetFramework to net10.0 (by @ncave)
- [All] Update FCS to latest (commit cfda5f6) (by @ncave)
- [Python] fable-library for Python is now distributed via PyPI instead of being bundled in the NuGet package (by @dbrattli)
- [All] Fix
--cwdwith quoted paths (by @MangelMaxime) - [All] Fix
--legacyCrackerflag logic (by @MangelMaxime) - [All] Fix
BuildalyzerCrackerso it can work on .NET 10 (by @MangelMaxime)
- [All] Invoke MSBuild from Fable current working directory (by @cr3wdayt5p)
- [TS] Added support for
erasableSyntaxOnlyin TypeScript (by @ncave) - [All] Added some default
Systemexception implementations (by @ncave) - [All] Added
ofOption/toOption/ofValueOption/toValueOption(by @ncave) - [Python] Added
Decorateattribute to add Python decorators to classes (by @dbrattli) - [Python] Added
ClassAttributesattribute to control Python class generation (@dbrattli) - [Python] Added support for Python 3.14 (by @dbrattli)
- [JS/TS] Replace the deprecated
substrmethod withslice(by @Thorium)
- [TS] Fix ObjectExpr tests with multiple interfaces (by @ncave)
- [TS] Fix ObjectExpr abstract base constructor type (by @ncave)
- [JS/TS] Fix #4240 Missing DateTime constructor (by @ncave)
- [PHP] Fix php import extensions (by @MangelMaxime)
- [TS] Fix #3973 Typescript imports file extension (by @ncave)
- [TS] Fix support for abstract classes and members (by @ncave)
- [TS] Fix getters, setters, indexers in interfaces (by @ncave)
- [TS] Enable typedArrays flag usage for TypeScript (by @ncave)
- [All] Fix #4221 Fable.Type union case arg names (by @ncave)
- [All] Erase Nullable Reference Types to inner type (by @ncave)
- [Python] Improve Python (e.g. Pydantic) interop (by @dbrattli)
- [JS/TS] Fix comparers for non-nullable types (by @ncave)
- [Rust] Fix curried object expression getters (by @ncave)
- [Rust] Fix compiler-generated generic args (by @ncave)
- [All] Fixed #4041 missing unit argument (by @ncave)
- [JS/TS/Python] Fixed eq comparer mangling (by @ncave)
- [All] Fix all
BitConverterreturn types (by @ncave) - [TS] Don't cast union case types to
any(by @ncave) - [JS/TS] Fix Dictionary.ICollection.Remove (by @ncave)
- [TS/Dart] Fixed optional parameter types (by @ncave)
- [TS] Initialize un-initialized variables (by @ncave)
- [JS/TS] Replace
ErrorwithException(by @ncave) - [All] Fix MSBuildResolver to include define when restoring the project (by @MangelMaxime)
- [Python] Support for Nullable Reference Types (by @dbrattli)
- [JS/TS] Fix #3533: Add directives prologues supports (by @MangelMaxime)
- [JS/TS] Support for Nullable Reference Types (by @ncave and @MangelMaxime)
- [Rust] Initial support for Nullable Reference Types (by @ncave)
- [Python] Use Python 3.12 type parameter syntax. Deprecate Python 3.10 and 3.11 (by @dbrattli)
- [Python] Records now snake-cases all member fields (by @dbrattli)
- [Python] Anonymous records now preserves the casing of member fields (by @dbrattli)
- [Python] Option type is now
Option[T]instead ofT | None(by @dbrattli) - [Python] Use uv instead of Poetry for package management (by @dbrattli)
- [Python] Fable Library for Python is now partially written in Rust (by @dbrattli)
- [All] Improve filewatcher error messages (by @goswinr)
- [Python] Fixed static properties and are now translated as Python class attributes (by @dbrattli)
- [Python] Fixed DateTime with DateTimeKind generates proper enum reference (#3689) (by @dbrattli)
- [Python] Fixed Dictionary KeyValuePair enumeration when casting to IEnumerable (#3771) (by @dbrattli)
- [Python] Fixed
createEmpty<T>for interfaces usingSimpleNamespacewith type casting (#3604) (by @dbrattli) - [Python] Fixed EmitMethod + ParamObject losing keyword arguments (#3871) (by @dbrattli)
- [Python] Fixed EmitConstructor + ParamObject losing keyword arguments (#3871) (by @dbrattli)
- [Python] Fixed DateTimeOffset.TryParse, ToString() and Offset property access (#3854) (by @dbrattli)
- [Python] Fixed anonymous records in Maps causing comparison errors (#3869) (by @dbrattli)
- [Python] Fixed handling of erased types for Python (#3968) (by @dbrattli)
- [Python] Fixed unit function (zero arguments functions) are transpiled inconsistently (#4126) (by @dbrattli)
- [Python] Fixed resource managers with empty body (#3912) (by @dbrattli)
- [Python] Fixed
Async.Sleepto handle TimeSpan correctly (#4137) (by @dbrattli) - [Python] Make sure snake-cased Record do not conflict (by @dbrattli)
- [Python] Do not return None | None for optional unit types (#4127) (by @dbrattli)
- [JS/TS] JSX : Alias
emptyCEs list tonullwhen encountered in thechildrenlist (by @MangelMaxime) - [JS/TS] JSX : Allow usage of
unboxwhen definining properties forJSX.create(by @MangelMaxime)
- [Python] Fixed testing with interfaces leads to incorrect pattern match (#3972) (by @dbrattli)
- [Python] Fixed error when type contains multiple generic type parameters (#3986) (by @dbrattli)
- [Python] Fixed import path handling for libraries (#4088) (by @dbrattli)
- [Python] Reenable type aliasing for imports with name "*" (by @freymauer)
- [JS/TS] Optimise JSX output in order to avoid F# list CEs to surface in it (by @MangelMaxime)
- [All] Remove unused
Fable.Corecopy types from internal module (by @MangelMaxime)
- [Python] Add support for
nullArgCheck(by @MangelMaxime) - [All] Add support for F#
nullness(by @MangelMaxime) - [JS/TS] Add support for
Unchecked.nonNull(by @MangelMaxime) - [All] Add support for
TreatWarningsAsErrors(by @MangelMaxime) - [All] Print help message on unexpected arguments (by @MangelMaxime)
- [JS/TS] Make
nullArgCheckreport the same error message as on .NET (by @MangelMaxime) - [TS] Sanitize DUs case names when generating constructor function (by @MangelMaxime)
- [All] Don't print help message on failed compilation (by @MangelMaxime)
- [JS] Don't generate an import statement for pojos defined in another file (by @shayanhabibi)
- [JS/TS] Add support for
CaseRules.LowerAllonStringEnums(by @shayanhabibi) - [Rust] Support Rust 2024 language edition (by @ncave)
- [JS/TS] Add
Candcformat for numeric types (by @MangelMaxime) - [JS/TS] Add
Bandbformat for numeric types (by @MangelMaxime) - [JS/TS] Add
nformat for numeric types (by @MangelMaxime) - [JS/TS] Generate compiler error when detecting an invalid/unsupported format specifier for numeric types (by @MangelMaxime)
- [JS/TS] Fix #4025: No reflection info for pojos (by @alfonsogarciacaro)
- [JS/TS] Fix #4049: decimal/bigint to integer conversion checks (by @ncave)
- [JS/TS] Fix
decimaltocharconversion checks (by @ManngelMaxime) - [JS/TS] Propagate non-captured exception when running
Async.StartorAsync.StartImmediate(by @MangelMaxime) - [JS/TS] Report an error at compilation time when trying to use
Async.RunSynchronously(by @MangelMaxime) - [JS/TS] Fix short
DateTimeandDateTimeOffsetshort format strings (by @MangelMaxime) - [All] Don't scan system packages for plugins (by @MangelMaxime)
- [JS/TS] Fix date formatting when repeating a format token more than the known format (example repeating 'd' more than 4 times) (by @MangelMaxime)
- [Python] Fix date formatting when repeating a format token more than the known format (example repeating 'd' more than 4 times) (by @MangelMaxime)
- [JS/TS] Fix #4010: Supports direct nested types when using
jsOptions(by @MangelMaxime)
let opts =
jsOptions<Level1> (fun o ->
o.level2.level3.valueA <- 10
o.level2.level3.valueB <- 20
o.topValueA <- 20
)- [JS/TS] Fix numeric formats (by @MangelMaxime)
- [JS/TS] Throw an error is an invalid Numeric format is provided (mimic .NET behavior) (by @MangelMaxime)
- [Python] Print root module and module function comments (by @alfonsogarciacaro)
- [Rust] Add support for module comments (by @ncave)
- [Rust] Add support for null strings (by @ncave)
- [TS/JS]
Pojoattribute support (by @alfonsogarciacaro)
- [JS/TS] - Fix anonymous record printing (#4029) (by @alfonsogarciacaro)
- [Python] - Fix #3998: PhysicalEquality (by @alfonsogarciacaro)
- [Python] Resolve relative paths for non-qualified imports (#3481) (by @alfonsogarciacaro)
- [Python]
importSideEffectsshouldn't generate identifier (#3965) (by @alfonsogarciacaro) - [JS/TS] Fix #4031: Hoist vars locally in for and while loops (@alfonsogarciacaro)
- [JS/TS] In
JSX, generate self closing element when element has no children (#4037) (by @shayanhabibi)
- [All] Add
--realsig+to fixMethod not found: 'Boolean Fable.CompilerOptions.Equals(by @nojaf)
- [TS] Include XML Doc comment on interface properties (by @Freymaurer)
- [TS] Generate
interfacetype when using the "ParamObject" class pattern (by @MangelMaxime) - [Rust] - Initial support for null values (by @ncave)
- [All] Disable .NET Welcome message when cracking project (#4014) (by @MangelMaxime)
- [All] Add
StringBuiler.Append(c: char, repeatCount: int)overload (by @roboz0r) - [All] Added primitive types equality and comparison (by @ncave)
- [All] Updated FCS to latest F# 9.0 (by @ncave)
- [All] Updated Fable-FCS to latest F# 9.0 (by @ncave)
- [All] Updated metadata to latest .NET 9.0 (by @ncave)
- [All] Updated FCS type constraints (by @ncave)
- [Python] Add missing unicode categories in python library (by @joprice)
- [All] Log JSON output if we fail to parse MSBuild result (by @MangelMaxime)
- [JS/TS/Python] Add new
TimeSpanoverloads support coming from .NET 9.0 (by @MangelMaxime) - [Rust] Add new
TimeSpanoverloads support coming from .NET 9.0 (by @ncave)
- [JS/TS] Fix
DateTimeOffset.ToLocalTime(by @MangelMaxime) - [All] Don't fails silently if an unknown argument is provided, instead log the error and print the help message (by @MangelMaxime)
- [TS] Make discriminated union
.Is*properties works (@MangelMaxime) - [JS/TS/Python] Fix
hinDateTime.ToString(@MangelMaxime) - [JS/TS] Fix
hhinDateTime.ToString(@MangelMaxime) - [JS/TS] Don't generate the setter code if a property is decorated with
[<Erase>](@MangelMaxime)
- [Python] Fix type testing against
uint8,uint32,uint64,decimal(@MangelMaxime) - [JS/TS] Workaround source map generation bug (deteriorate them a little) (@MangelMaxime)
- [All] Allow Fable 5 to be used with Fable 4 plugins (@ncave)
- [All] Add
--legacyCrackeras a fallback (@MangelMaxime)
- [All] Make MSBuildCracker the default (@MangelMaxime)
- [All] Replace
FABLE_COMPILER_4withFABLE_COMPILER_5as the compiler directive (@MangelMaxime) - [All] Move TargetFramework to
net8.0(@ncave)
- [JS/TS] Added missing
ResizeArray.CopyToreplacements (by @ncave) - [JS/TS] Added missing
Dictionaryconstructors from enumerable (by @ncave)
- [Rust] Fixed import path rewrite (by @ncave)
- [Rust] Updated derived interfaces (by @ncave)
- [Rust] Updated string comparisons (by @ncave)
- [Rust] Fixed derived traits mapping (by @ncave)
- [JS/TS] Added missing
ICollectionhelpers (#3914) (by @ncave) - [JS/TS] Added missing
IReadOnlyCollectionhelpers (by @ncave)
- [Rust] Added basic class inheritance support (by @ncave)
- [Rust] Added
String.Replace(char, char)and test (by @ncave) - [Rust] Support type extensions for external types (by @ncave)
- [Rust] Support more
System.Arraymethods and tests (by @ncave) - [Rust] Added decision tree multiple target references (by @ncave)
- [Rust] Added Char surrogate tests for completeness (by @ncave)
- [JS] Add
System.String.Normalizesupport (by @DashieTM) - [JS] Allow
[<Erase>]to work on members (by @MangelMaxime)
- [Rust] Updated derived traits mapping (by @ncave)
- [Rust] Updated some collections equality (by @ncave)
- [Rust] Fixed try finally handler order of execution (by @ncave)
- [JS/TS/Python/Rust] Fixed
String.StartsWith/EndsWith(#3934) (by @ncave) - [All/Rust] Removed
Regex.Replacefrom hot paths (by @ncave) - [JS] Fix regression, generate
letvariable when usingimporton a private mutable variable (by @MangelMaxime) - [TS] Prevent generics to be duplicated (by @MangelMaxime)
- [TS] Fix interface generation when decorated with
Mangle(by @MangelMaxime)
- [Rust] Added support for Dictionary/HashSet comparers (by @ncave)
- [Rust] Updated support for interface object expressions (by @ncave)
- [Rust] Added missing ResizeArray methods and tests (by @ncave)
- [Rust] Added Async.Sleep and test (by @ncave)
- GH-3900 [Python] Fix nuget packages with hypens in their names (by @MangelMaxime)
- [Rust] Uncurry field types for object expressions (by @ncave)
- [Rust] Fixed pattern matching on
thisargument (by @ncave) - [All] Fixed Missing DU member with interface (#3915) (by @ncave)
- [TS] Fixed missing Async type signature (#3864) (by @MangelMaxime)
- [JS/TS] Add support for
OrdinalIgnoreCaseoverload forString.EndsWith(#3892) (by @goswinr) - [JS/TS] Add
uri.Port,uri.IsDefaultPort(by @MangelMaxime)
- [Python] Remove
$sign when reporting an error fromassert_equalandassert_not_equal(#3878) (by @joprice) - [All] Don't hide original error when failing to scan an assembly for plugin (#3896) (by @MangelMaxime)
- [JS/TS] Fix escaping of
{and}in FormattableString (#3890) (by @roboz0r) - [JS/TS] Fix
uri.Hostto return the host name without the port (by @MangelMaxime) - [JS/TS] Fix TypeScript compilation by resolving type of
jsOptions(#3894) (by @ManngelMaxime)
- [Rust] Added support for static interface calls (by @ncave)
- [All] Fixed passing delegates with unit args (#3862) (by @ncave)
- [JS/TS] Fixed Decimal comparisons (#3884) (by @ncave)
- [Rust] Fixed return type for byref body (by @ncave)
- [JS/TS] Fixed unwrapping optional arguments (#3847) (by @ncave)
- [JS/TS] Fixed BigInt.ToDecimal with negative values (#3500) (by @ncave)
- [All] Ignore testers for erased union cases (#3658) (by @ncave)
- [All] Fixed Fable compiler hanging on some errors (#3842) (by @ncave)
- [JS/TS] Fixed DateTime.MinValue, DateTime.MaxValue (#3836) (by @ncave)
- [JS/TS] Fixed missing field using TypeScriptTaggedUnion (#3837) (by @ncave)
- [TS] Fixed interface indexers (#3830) (by @ncave)
- GH-3835 [All] Use case insensitive comparison when searching for dependencies between fable packages (by @ThisFunctionalTom)
- GH-3817 [All] Fix broken --precompiledLib switch (#3818) (by @DunetsNM)
- [JS/TS] Fixed TimeSpan.FromMilliseconds (#3815) (by @ncave)
- [Python] Fixed quotation for union string cases (by @dbrattli)
- [Python] Fixed casing issues with identifiers and reflection info (#3811) (by @dbrattli)
- [JS/TS/Python] Fixed interface static members (#3566) (by @ncave)
- [Rust] Added support for XmlDoc comments (by @ncave)
- [Rust] Support captures in object expressions (by @ncave)
- [Rust] Added type extensions support (by @ncave)
- [Rust] Added Char implementation module (by @ncave)
- [Python] Fixes for custom hash values (#3796) (by @dbrattli)
- [Python] Fix for import of camelCased class (#3808) (by @dbrattli)
- [JS/TS] Fixed optional args for reflection (by @ncave)
- [JS/TS] Fixed type visibility when parent is namespace (by @ncave)
- [JS/TS] Fixed DateTimeOffset.ToString with custom format (by @ncave)
- [Rust] Fixed property get on constrained generic types (by @ncave)
- [Rust] Fixed module member imports (by @ncave)
- [JS/TS] Add
ConditionalWeakTable(by @chkn)
- GH-3778 [Python] Fixed custom hash values on Record types (by @dbrattli)
- [JS/TS] Fixed
DateTime.AddforDateTimeKind.Unspecified(by @ncave) - [Rust] Fixed deprecated
NaiveDateTimeusage inDateTime(by @ncave) - [Rust] Fixed generic interface implementation types (by @ncave)
- [Rust] Fixed Dictionary constructor from IEnumerable (by @ncave)
- [Rust] Fixed Seq.cast support for arrays and lists (by @ncave)
- [JS/TS]
Boolean.tryParseshould not crash onnullstring (@goswinr)
- [Rust] Added some boxing support (by @ncave)
-
GH-3769 [All] Local plugin build does not run indefinably. (by @nojaf)
-
GH-3769 [JS/TS] Types hidden by signature files should not be exported. (by @nojaf)
-
GH-3772 [JS/TS] Re-implement
DateTime.ToStringcustom format handling (by @MangelMaxime)It now supports all custom format specifiers, and behave as if
CultureInfo.InvariantCulturewas used (Fable does not support Globalization). -
GH-3772 [JS/TS] Make compilation fails if calling
DateTimeconstructor with microseconds (by @MangelMaxime)JavaScript
Datedoes not support microseconds, we need to wait forTemporalto be widely supported before reconsidering this. -
GH-3773 [Python] Fix
DateTimecustom formatfffffffandFFFFFFF(by @MangelMaxime)
- GH-3772 [JS/TS] Split replacement for
DateTimeandDateTimeOffset(by @MangelMaxime)
- GH-3759 Add
StringBuilder.Chars(by @MangelMaxime) - Added range overload for
String.ToCharArray(by @ncave)
- GH-3761 Added
StringBuilder.Chars,StringBuilder.Removeand tests. (by @ncave)
- GH-3761 Added
StringBuildersupport and tests. (by @ncave)
- GH-3748 Accessing an array out of bounds should emit an exception (by @MangelMaxime)
- GH-3748 Setting an array out of bounds should emit an exception (by @MangelMaxime)
- GH-3761 Fixed incorrect
StringBuilder.Removeimplementation. (by @ncave)
- GH-3761 Fixed incorrect
StringBuilder.Removeimplementation. (by @ncave)
- GH-3761 Updated
StringBuilderto remove allocations where possible. (by @ncave)
- GH-3761 Updated
StringBuilderto remove allocations where possible. (by @ncave)
- Update to Fable.AST 4.4.0
- Embed
fable-library-jsin Fable DLL (by @MangelMaxime)
- GH-3733 GH-3727 Add support for more
ResultAPI (by @zprobinson)Result.isOkResult.isErrorResult.ContainsResult.CountResult.DefaultValueResult.DefaultWithResult.ExistsResult.FoldResult.FoldBackResult.ForAllResult.IterateResult.ToArrayResult.ToListResult.ToOption
- GH-3721 Add
--test:MSBuildCrackerflag allowing to use the experimental MSBuildCracker (by @nojaf)
- GH-3745 Add support for
ListCollector(by @nojaf)instance.Addinstance.AddManyinstance.AddManyAndCloseinstance.Close
- Remove
Choice.d.tsfrom source code offable-library(by @MangelMaxime) - GH-3748 Accessing an array out of bounds should emit an exception (by @MangelMaxime)
- Remove
Choice.d.tsfrom source code offable-library(by @MangelMaxime) - GH-3748 Accessing an array out of bounds should emit an exception (by @MangelMaxime)
- GH-3717 Nested type with Custom Equality gives false negative equality (by @dbrattli)
- Generate assert statements for
assertexpressions in debug mode (by @dbrattli)
- GH-3744 Fix behaviour when passing
--verboseto be consistent with behaviour before changing the logging library (by @nojaf)
- GH-3749 Rename
fable-librarytofable-library-js(by @MangelMaxime)
- GH-3719 Restore dependencies against the
.fsprojafter evaluating thefable-temp.csprojfile (Improves IDE supports) (by @MangelMaxime) - Don't delete
fable_moduleswhen re-evaluating the project file after a changes has been detected (Improves HMR experience) (by @MangelMaxime)
- GH-3723 Fix logger initialisation to allow
--versionto work (by @MangelMaxime)
- GH-3716 System.Array.Resize: also handle the case where the array is null (by @chkn)
- Fixed function composition types (by @ncave)
- GH-3668 Normalize fable-library argument (by @nojaf)
- GH-3682 Support some custom unary math operors (Acos, Asin, Atan, Atan2, Cos, Cosh, Exp, Log, Log2, Log10, Sin, Sinh, Sqrt, Tan, Tanh) (by @PierreYvesR)
- GH-3603 Port back fixes for missing
.gitignorefile in the generatedfable_modules/folder (by @MangelMaxime) - GH-3684 Re-compile files from
fable_modulesafter changing the project file in watch mode (by @OrfeasZ)
- Fixed 'System.Collections.Generic.Queue' bug (by @PierreYvesR)
- Fixed instance calls for generic comparers (by @ncave)
- Fixed nested type with custom hashcode (by @dbrattli)
- Add 'Double.IsPositiveInfinity' (by @PierreYvesR)
- GH-3666 Fix for
DateTimeandTimeSpanaddition (by @dbrattli) - GH-3663 Fix
DateTime.ParseandDateTime.TryParse(by @MangelMaxime)
- Fix
DateTime.Parsewhen providing a 1 digit hour for PM times (3:5:34 PM) (by @MangelMaxime)
- Fixed unary negation for signed integer MinValue (by @ncave)
- Fixed excluding signature files from imports (by @ncave)
- Fixed generic try_catch closure trait (by @ncave)
- Fixed
selfarg capture in methods (by @ncave) - Fixed 'System.Collections.Generic.Queue' bug (by @PierreYvesR)
- Added support for generic comparers (by @ncave)
- GH-3671 Use
Microsoft.Extensions.Logging(by @nojaf) - GH-3634 Suffix temporary
csprojwith.fable-temp.csprojand include a comment in the file (by @MangelMaxime)
- Fix
DateTime.DayOfWeek(by @MangelMaxime)
-
GH-3663 Complete rewrite of
DateTimesupports (by @MangelMaxime)Special thanks to @dbrattli and @ncave for their help
- Constructors
- From
(year, month, day)up to(year, month, day, hour, minute, second, millisecond, microsecond)(with and withoutDateTimeKind) - From
ticks(with and withoutDateTimeKind)
- From
- Instance methods:
dt.Yeardt.Monthdt.Daydt.Hourdt.Minutedt.Seconddt.Milliseconddt.Microseconddt.ToUniversalTimedt.DayOfWeekdt.DayOfYeardt.ToShortDateStringdt.ToShortTimeStringdt.ToLongDateStringdt.ToLongTimeStringdt.ToStringdt.ToLocalTimedt.Datedt.AddYearsdt.AddMonthsdt.AddDaysdt.AddHoursdt.AddMinutesdt.AddSecondsdt.AddMillisecondsdt.AddMicrosecondsdt.Kind
- Static methods:
DateTime.TodayDateTime.NowDateTime.NowDateTime.UtcNowDateTime.MinValueDateTime.MaxValueDateTime.ParseDateTime.TryParseDateTime.SpecifyKind
- Constructors
- GH-3715 Add support for System.Array.Resize (by @chkn)
- GH-3655 Fix for Python output file names (by @dbrattli)
- GH-3660 Fix for decimal to string with culture (by @dbrattli)
- Fix the version reported by Fable (@MangelMaxime)
- Updated FCS to fce0cf00585c12174fa3e51e4fc34afe784b9b4e (by @ncave)
- GH-3675 Breaking Change
staticmembers always requirestatic member, disregarding FCS from F# v7.0 and early v8.0 supported dismissing thememberkeyword.
- GH-3645 Add
TimeSpan.ParseandTimeSpan.TryParsesupport to Python (by @MangelMaxime) - GH-3649 Add
List.sortBy(by @dbrattli) - GH-3638 Add
Array.sortandArray.sortDescending(by @dbrattli)
- GH-3465 Fix
string.IndexOfAny(by @pkese)
- GH-3465 Fix
string.IndexOfAny(by @pkese)
- Overall performance improvements
- GH-3603 Missing
.gitignorefile in the generatedfable_modules/folder (by @MangelMaxime) - GH-3712 Fix type of dereferenced byref (by @chkn)
- GH-3648 Records containing different values return the same hash code (by @dbrattli)
- GH-3617: Fix comparaison between list option when one is None (by @mangelmaxime)
- GH-3615: Fix remove from dictionary with tuple as key (by @dbrattli)
- GH-3598: Using obj () now generated an empty dict instead of None (by @dbrattli)
- GH-3597: Do not translate .toString methods to str (by @dbrattli)
- GH-3610: Cleanup Python regex handling (by @dbrattli)
- GH-3628: System.DateTime.Substract not correctly transpiled (by @dbrattli)
- GH-3640: All union cases return the same hash code (by @dbrattli)
- Updated .NET metadata to 8.0.100 (by @ncave)
- Fix #3584: Unit type compiles to undeclared variable (by @ncave)
- Support
DateTime(..., DateTimeKind.Utc).ToString("O")(by @MangelMaxime)
- Added
Guid.TryParse,Guid.ToByteArray(by @ncave)
- Fixed char to string type regression with binary operator (by @dbrattli)
- Fix
DateTime(..., DateTimeKind.Local).ToString("O")(by @MangelMaxime) - Fix calling
value.ToString(CultureInfo.InvariantCulture)(by @MangelMaxime) - Fix #3605: Fix record equality comparison to works with optional fields (by @MangelMaxime and @dbrattli)
- PR #3608: Rewrite
time_span.pyallowing for better precision by using a number representation intead of nativetimedelta. (by @MangelMaxime)
- Use
Anytype for all non-repeated generic arguments (by @dbrattli) - Don't generate unnecessary type type-vars if generic type is replaced by
Any(by @dbrattli) - Generate new style
_T | Noneinstead ofOptional[_T](by @dbrattli)
- Support multiple namespaces sharing a prefix in the same file (by @ncave)
- Support imports with the same namespace across multiple files (by @ncave)
- Fix #3571:
[<AttachMembers>]not compatible with f# memberthis.Item(by @ncave)
- Fix #3567: Turn off FCS warning 3560 by default (by @vzarytovskii)
- Fixed recursive lambda captured idents cloning (by @ncave)
- Updated FCS to bd66d54b1ac4dd0f252c0a37196c2ccd54628356 (by @ncave)
- Support (un)curry up to 20 arguments (by @MangelMaxime)
- Remove support for Python 3.9. Add GH testing for Python 3.12 (by @dbrattli)
- Support (un)curry up to 20 arguments (by @MangelMaxime)
- Support (un)curry up to 20 arguments (by @MangelMaxime)
- Fix #3541: Interface imported in generated javascript when DU has an interface type constraint (by @ncave)
- Fixed
Async.Parallel(by @dbrattli)
- Improve error messages for
Decimal.Parse,Double.Parse,Int32.Parse,Long.Parse(by @ncave)
- Improve error messages for
BigInt.Parse,DateOnly.Parse,DateTime.Parse,DateTimeOffset.Parse,Decimal.Parse,TimeOnly.Parse(by @ncave)
- Improve error messages for
Double.Parse,Int32.Parse,Long.Parse(by @ncave) - Refactored async trampoline leveraging asyncio mainloop. (by @dbrattli)
- Added
Async.StartChild(by @dbrattli) - Fix #3482: Revert removal of
Py.pythonandPy.expr_python(by @dbrattli)
- Fix #3527: Fix error
name '...' is not defined(by @dbrattli) - Fix #3496: Python target is confused with class taking a
length: intargument (by @dbrattli)
- Fix package to include Fable libraries folders
-
Fix #3480: Function decorated with
[<NamedParams>]without arguments provided should take an empty object -
Fix #3494: Calling an attached parametrized getter fails in transpiled javascript
-
Remove fable-py support
-
Fix #3461: Don't default to javascript if the language requested by the user is unknown (help detect typo)
-
Improve --help message for the --lang section
-
Fix #3464: Invalidate cache when the target language changes
-
Always delete the
fable_modulesfolder when the cache is invalidated -
Remove
--typescriptoptions support, use--lang <target>instead -
Fix #3441: Don't ignore error when loading plugin
-
Fix #3482: Remove
Py.pythonandPy.expr_pythonuseemitPyStatementandemitPyExprinstead -
Restrict replacements to accept only functions from their target language module
-
Fix #3528: Consider functions hidden by a signature file as private (@nojaf)
-
Improve error message when Fable doesn't find the
fable-libraryfolder.This is especially useful when working on Fable itself, and should save time to others. Each time I got this is error, I needed several minutes to remember the cause of it.
- Fix #3438: Source maps
- Fix #3440: Don't curry arity-1 functions
- Fix #3452: DateTimeOffset conversion to DateTime
- Fix regression: Don't type test interfaces declared in F# code
- Rust: Added no_std test build
- Rust: Added regex support
- Rust: Fixed no_std support
- Rust: Fixed uncurried options
- Rust: Enabled some applicative tests
- Rust: Enabled some tests
- Rust: Updated switch transform (#3449)
- Rust: Updated dependencies (#3447)
- Rust: Fixed interface properties (#3445)
- Rust: Updated object equality (#3444)
- Rust: Enabled some Comparison tests (#3442)
- Rust: Added DateOnly, TimeOnly tests
- Rust: Added DateTimeOffset tests
- Rust: Updated TimeSpan
- Rust: Added DateTimeOffset
- JS/TS/Rust: Added bigint log, log2, log10, minMag, maxMag
- TS: Fix extension of files in fable_modules with out dir
- TS: Support annotations of StringEnum and TypeScriptTaggedUnion types
- JS/TS: Output JS docs
- Fix range of inlined functions
- Print minimum fable-library version from npm
- Fix fable-library package.json
- Set TypeScript compilation as stable
- Added Map.minKeyValue and maxKeyValue
- Fix #3418: Single-Case Union Reflection
- Include declaration .d.ts files in fable-library
- Update FCS
- Python: Implement missing bigint functions @johannesmols
- TS: Fix #3415: ident type of uncurried lambdas
- TS: Don't use const enums to represent union tags
- TS: Fix function type annotation
- TS: Get generic types of generated members
- TS/JS: Sanitize class fields
- JS Hotfix: Skip compiler generated decls
- TS: Fixes for unions, pattern matching and interface function getters
- Use native JS BigInt for int64/uint64
- Fix #3402: Rust type mismatch error when compiling F# closure code
- Improve optional field and argument typing in TypeScript
- Fix fable-library-ts when used with Vite
- Fix #3397: Curry only user imports
- Fix: Compiler Exception when
!!, Anon Record, and aliasedUx(also behind option) @Booksbaum - Use native bigint type @ncave
- Emit Fable erased unions as TS union types
- Optimize compile time equality and testing (union, list, options)
- TypeScript: enable Comparison, Convert and Event tests
- Fix #3389: Don't wrap TemplateStringArray
- Rust: Fix recursive closures and some type tests,
- TypeScript: Emit interfaces and anonymous record annotations
- Enable Unicode identifiers @kant2002
- Add ability for plugins to remove member declaration @Zaid-Ajaj
- Improve uncurrying mechanism and make it consistent across languages
- Rust: Enable applicative tests and other fixes
- TypeScript: Enable 1909 tests
- Fix #3371: Copying struct records
- Php: Improve output @entropitor
- Rust: string improvements
- TypeScript: Fix applicative tests
- Fable JS stable release
- When using a .csproj, make sure the project is restored before parsing
- Rust, added Stack, Queue
- Use TargetFramework from .fsproj and ask users to upgrade from netstandard2.0 if necessary
- Update FCS (F# 7)
- Python, handling static getters
- Rust, fix deprecated API
- Attempt to improve project parsing
- Added Double.Pow static
- JS, enable calls with
importValueDynamic - JS, Support System.Delegate.DynamicInvoke
- Rust, Added feature for func_type_enum
- Rust, Added Func type wrappers (#3250)
- Try to fix #3244 (cannot parse .fsproj)
- Rust, added small string type
- Python, fix byte array tying issue
- JS, don't mangle idents from imports in emitted code
- JS, optimize some array transforms
- Python, option fixes
- Python, fixes for reference equals with literals
- Python, reduce the number of generated arrow functions
- Rust, Added bigint support
- Use Buildalyzer for parsing .fsproj
- Python, add read/write files
- Python, fix URI and number types
- JS, allow imports in emit expressions and JSX
- JS, improve import path resolution (interpolation, inlined functions)
- TypeScript, fix arithmetic tests
- Use StringTemplate expr in Fable AST for Python
- Add language status to version
- Make --runScript compatible with Python, Rust and Dart
- Update F# compiler
- Compile as net6 binary
- TypeScript, type-safe union types and other fixes
- Enable emitExpr/Statement with interpolation, @alfonsogarciacaro
- Python, fix imported interfaces from other modules, @dbrattli
- Python, allow python code embedder to return generic type T
- Python, enable eliding async/await, @dbrattli
- TypeScript, added library-ts to packages, @ncave
- Python, do not trim emitted statements
- TypeScript, fix fable-library-ts @ncave
- Python, fix regex tests @dbrattli
- Python, fix emit expressions
- JS, helpers for JSX/React apps
- Python, regex fixes for group collection
- Python, fix type annotation for imports of erased interfaces
- Python, better regex handling
- TypeScript, ixed some array issues
- Allow alias for default/namespace imports
- TypeScript, added some interface annotations
- JS, allow alias for default/namespace imports
- Python, fix regression when building on Windows
- Rust, added Default for array, string, hashmap, hashset, guid
- Rust, removed cloning after emit
- Python, make sure module names are valid
- Python, fix interface entity lookup
- Python, fixes for .ToArray and is_array_like
- Rust, fixed TimeSpan fields
- JSX, enable dynamic children
- Python, fix dict remove
- Rust, updated module visibility
- Rust, more dates, @alexswan10k
- Python, fix slice of string statements, @dbrattli
- Python add task RunSynchronously, @dbrattli
- Rust, ade startup an opt-in dependency, @ncave
- Added IsInternal and IsPrivate properties in AST, @ncave
- Rust, better datetime comparison + conversion. DateTimeOffset first, @alexswan10k
- Python, GUID fixes, @dbrattli
- Python, async/await fixes for Task returning functions, @dbrattli
- Rust, another problematic ref counting scenario + fix, @alexswan10k
- Fable.AST 4.0 stable
- Rust, StringBuilder, Dates, ref counting
- Update F# compiler
- Make Fable 4 compatible with Feliz plugins
- Rust, Fixed inner attributes (#3121)
- Rust, Output crate attributes only on last file (#3119)
- Rust, Added collection wrappers (#3118)
- Rust, fix byref nested context not correctly propagating (#3103)
- Rust, Fixed passing fields by ref (#3116)
- Rust, Fixed struct record copy (#3114)
- Rust, Output string type (#3113)
- Python, type var cleanup. Use Any for types starting with $$ (#3100)
- Rust, Fixed string format without args
- Rust, Fixed closure ident cloning (#3106)
- Rust, Fixed static, member and interface imports (#3105)
- Rust, fixed curried apply, @ncave
- Python, allow modules with uppercase letters, @dbrattli
- Rust, added Math.DivRem support, @ncave
- Rust, retain inlined funcs with CompiledName attr, @ncave
- Python, fixes for extreme math values, @dbrattli
- Rust, union fix for import prefixes, @alexswan10k
- Rust, fixed build dependency for wasm32, @ncave
- Rust, added Display trait, @ncave
- Rust, Initial type testing support, @ncave
- Python, typing fixes, @dbrattli
- Python, Relax identifier checking to accept unicode chars, @dbrattli
- Python, Generate Python data classes for records, @dbrattli
- Rust, implement Thread ctor, start, and join. Implement lock fn. @alexswan10k
- Rust, added decimals, @ncave
- Python, better timespan handling, @dbrattli
- Rust, added core assembly, @ncave
- Rust, implement unsafe-cells feature switch + Monitor, @alexswan10k
- Rust, initial support for object expressions, @ncave
- Python, use --fableLib to choose between embedded or site-packages, @dbrattli
- Rust - Make Map and Set support PartialEq, @alexswan10k
- Rust, List/Map/Set cleanup, @ncave
- Rust - more collection interop improvements, @alexswan10k
- Python, array, list and resize-array fixes, @dbrattli
- Rust, fable-library-rust cleanup, @ncave
- Rust, Renamed List, Map, Set, @ncave
- Rust, Merged ctor and static impl,@ncave
- Rust, import deduping, @ncave
- Rust, - More work on collection interop (Set, List, Map), @alexswan10k
- Rust, - First pass at getting the interop experience with built in collections a little better, @alexswan10k
- Python, reverted back to using modules instead of packages, @dbrattli
- Rust, Fixed overload suffix for anon records, @ncave
- Python, fixes for requirements.txt
- Python, generate requirements.txt within fable_modules, @dbrattli
- Rust, represent self as a Lrc[T] for method calls using double pointer indirection, @alexswan10k
- Rust, fixed build issue, @ncave
- Python, import fixes, @dbrattli
- Rust, records and Unions now are correctly unwrapped when Struct attribute is used to tag as value, @alexswan10k
- Rust, support struct anonymous records, @ncave
- Rust, added support for struct tuples, @ncave
- Rust, fixed struct constructors, @ncave
- Rust, made Async optional, @ncave
- Rust, added missing type import and slices, @ncave
- Rust, comparison updates, @ncave
- Make CancellationTokenSource implement IDisposable, @alfonsogarciacaro
- Fixed Array.compareWith issue, @alfonsogarciacaro
- Python, import fixes and package generation, @dbrattli
- Python, use poetry for Python, @dbrattli
- Update to latest FCS @ncave
- Rust Support module imports @ncave
- Rust: Implement basic thread pool + tasks + task builder @alexswan10k
- Rust: Async builder, tasks, configurable pointer types @alexswan10k
- Rust: attribute support @ncave
- Fix import paths in Python
- Use wrapping options for Dart
- Rust and Dart fixes
- JSX string templates
- Dart: compile union cases as child classes
- Dart fixes
- Don't destructure props arg in JSX components
- JSX Support
- Snake Island alpha release 2
- Snake Island alpha release
- Fix #3052: Nested options with Option.orElse #3052 @IanManske
- Fix Fix #3078: Nested interpolation
- Fix #2961: Make Array.compareWith behaviour consistent with dotnet F#
- Fix #2955: units of mesure with unsigned ints
- Fix #2950: String formatting: trim trailing zeroes when using # placeholder
- Fix #2879: Make CancellationTokenSource implement IDisposable
- Don't print multiple sourceMappingURL comments
- Fix #2869: Don't update maps @hensou
- Fix #2869: Use deterministic names for compiler-generate variables
- Update FCS @ncave
- Fix #2869: Avoid unnecessary updates @hensou
- Fix #2931: Array.IndexOf with non-primitive
- Fix #2924: Invalidate cache if source maps option changes
- Fix #2925: Always set unicode flag for Regex
- Enable non-booleans in Emit optional syntax
- Resolve
defaultArgat compile time when possible - Fix #2900: Equality with prototype-less JS objects
- Fix #2895: FableLibDir in cached info is empty when using --precompiledLib
- Fix #2880: Trait call with unit of measure
- Fix generic param user/compiler generated name conflicts
- Fix #2864: Interface names don't conflict in JS
- Fix #2855: duplicate idents from witness in inline expr
- Fix #2868: don't write empty files
- Add warning when duplicated generic params are detected
- Fix #2851: References captured by >> eagerly eval
- Fix wrong out paths when using lower case drive letter
- Fix #2845: Cover more edge cases @Prunkles
- Fix #2840: Keep delegates of arity 1 curried @JaggerJo
- Fix #2844: 1-len array slices starting at 0 work @jpacker
- Fix #2845: Regex.Matches infinite loop @Prunkles
- Type.IsInstanceOfType works for interfaces decorated with Global/Import @chkn
- Prevent combining absolute paths
- Change intro message
- Fix #2832: Adding a converted char to string
- Fix Type.IsSubclassOf(obj) @chkn
- Fix the fixes in the previous release
- Fix #2809: Generic trait calls in multiple nested inlined functions
- Fix #2817: Optimization - Remove wrapping lambdas when possible
- Cache .fsproj parsing result
- Run F# type check and Fable in parallel (use --noParallelTypeCheck flag to disable)
- Automatic --runFast
- Precompilation
- --noReflection flag
- Disable uncurrying functions passed as arguments to local lambdas
- Seeded System.Random
- Fix typeof(obj).IsInstanceOfType @chkn
- Fix #2709: error when using JsInterop.import in inlined functions
- Fix #2719: use with null disposable
- Run sub-process even if compilation was skipped
- Add --noParallelTypeCheck option to disable F#/Fable parallel compilation
- Disable uncurrying functions passed as arguments to local lambdas
- Fix typeof(obj).IsInstanceOfType @chkn
- Fixes for precompiling inline expressions
- Fix #2719: use with null disposable
- Fix #2727: don't write in same line when output redirected
- Fix #2718
- Other stability issues and add more verbose logs
- Prevent Fable from getting stuck on fatal errors
- Show File compiled messages in CI
- Lock file for outDir (mainly intended for parallel processes precompiling the same library)
- Allow inlined functions accessing internal values in Fable.Precompiled.dll (FCS)
- Shorten logs in same line if longer than 80 chars (so they don't jump to next line)
- Check paket.references/paket.lock when checking if project cracker cached info is outdates
- Add flag to disable reflection
- Fix #2709: error when using JsInterop.import in inlined functions
- Fix cache issues
- Seeded random
- Fix watch mode and runFast optimization
- Fix precompile errors
- Performance improvements
- Add precompile command
- New FSharp.Core 6 APIs: updateAt/insertAt/insertManyAt/removeAt/removeManyAt
- Support thousand separators in String.Format
- Fix #2628 @stroborobo
- TypescriptTaggedUnion @cannorin
- Speed up recompilation when adding/removing files
- Fix #2614: Char addition
- Fix #2615: Math.DivRem
- Fix string template literals
- Improve Regex.Match/IsMatch/Matches
- Update FCS
- Support F# 6
- Support DateOnly/TimeOnly @kerams
- Improve watch mode
- Cache project options
- Add Fable.Core.Compiler.triggeredByDependency flag
- Support DefaultParameterValue attribute (not for JS interop)
- Update F# compiler
- Fix watch mode when saving multiple files at same time
- TimeOnly.FromDateTime @kerams
- Remove --watchDeps flag
- Support F# 6
- Support DateOnly/TimeOnly @kerams
- Improve watch mode
- Add
--watchDepsflag - Cache project options
- Add support for StringSplitOptions.TrimEntries @steveofficer
- Fix #2587: DateTimeOffset.Parse issues with some locales @ncave
- Use Process.ArgumentList to escape args passed to subprocess
- Print paths relative to --cwd if set
- Add CLI arg --watchDelay
- Show relative paths in logs
- Fixed Seq.toArray @ncave
- Fix FullName/Name/Namespace of complex array types
- Fix #2572 #2579: Watch .fsi files and referenced .fsproj
- Fix #2576: Last file can omit module declaration
- Fix Seq.cache with partial enumeration
- Fix DateTime Offset parsing with date only and hyphens
- Set NODE_ENV when running a sub-process
- Fix #2571: Forward slash not escaped when creating regex
- Small improvements in Async.ts
- Accept ${entryDir} macro in imports
- Use relative paths for source maps
- Add support of System.Activator for primitive types @Happypig375
- Fix #2566: HashSet.IntersectWith does not respect custom comparer
- Fix calling super from an override when the method was declared in grandparent
- Compile to RegexConstant when possible
- Pass Fable compiled name to ReflectedDecorator
- Remove void wrapper in expression statements
- Fix #2561: Case insensitive args and check
- Fix generic parameters with JS.ReflectedDecorator
- Support System.Collections.Generic.Queue @davedawkins
- Fix custom array equality
- Remove class restriction for ParamObject
- Skip parens in emit if placeholder is already surrounded by parens
- ParamObject attribute
- Rename .fable folder to fable_modules
- Print log about Femto
- Add Type.IsInstanceOfType @chkn
- Fix #2229: Parsing succeeded for some invalid dates @njlr
- Fix #2097: Async.StartChild does not apply timeout @njlr
- Fix #2530: System.Collections.Generic.Stack @njlr
- Fix #2548: Assigning to value of unit type
- Fix #2549: Native ESM support
- Serialize compiler_info as JSON
- JS.Decorator/ReflectedDecorator attributes
- Fix isSubclassOf to walk up the inheritance chain @chkn
- Fix #2520: Uri.OriginalString @njlr
- Fix #2532: Measure products
- Optimize interpolate strings without formatting into JS templates
- Fix #2480: Include package.json in fable-library
- Fix #2522: Warn if user sets .fable as outDir
- Fix #2525: Support infinite arity for currying/uncurrying
- Fix plugin version check
- Fix #2505: Make String.Split match .NET with no or null separators
- Add TimeSpan.Divide and Multiply @0x53A
- Add Async.Sequential @0x53A
- Compile
FormattableStringas JS Templates
- Add --rootModule CLI flag
- Support System.Uri.TryCreate @Choc13
- Fix #2477: Don't drop "DEBUG" and "TRACE" DefineConstants @stroborobo
- Fix #2480: Improve tree shaking with fable-libray
- Fix #2485: Proper representation of Choice with 3 or more items
- Fix #2491: Unchecked.defaultof with struct tuples
- Fix #2496: Custom Pow operator
- Don't print JS files in watch mode if there're F# errors
- Fix SRTP with local inline functions
- Fix regression in FCS: passing SOURCE_IDENTIFIER to static parameters in type providers
- Fix regression: all files were recompiled in watch mode in 3.2.5
- Fix #2472: Tuple-related methods
- Fix #2471: Trait call regression
- Fix #2468: SRTP Parser
- Only show Compile file log in watch compilations
- Fix #2438: Print JS sequence expressions always between parentheses
- Don't jump over mutable idents when inlining
- Experimental.namesofLambda
- Check for correct types in Anonymous Record when assigning to Interface with
[<EmitIndexer>]via !! @Booksbaum - Fix #1973: FormattableString support
- Fix Event issues and and implement FSharpEvent`2 @chkn
- Fix #2451: throw exception when sequence is empty @MNie
- Fix #2445: Improve error message when fable doesn't implement an API
- Update to net5.0 and FCS, @ncave
- Publish with icon and symbols @cartermp
- Add a --sourceMapsRoot CLI option to set source maps sourceRoot @mlaily
- Fix #2433: Improve type info for plugins like Fable.SvelteStore
- Fix #2431: Pass output directory info to plugins
- Experimental
casenameWithFieldIndex
- Fix #1678: BigInt native JS JSON serialization with toJSON
- Fix #2151: Implement DateTimeOffset.toOffset @Booksbaum
- Fix #2410: Invalid offsets are accepted @Booksbaum
- Fix #2411: DateTime(Unspecified) fails when offset not local timezone @Booksbaum
- Fix #2417: overloads with struct tuple
- Fix #2418: List native JS JSON serialization with toJSON
- Update big.js (decimals) @ncave
- Update source-map-sharp to 1.0.5
- Fix watch compilation issues
- Fix #2398: two successive string format placeholders and value of first one ends in
%
- Revert breaking change, configuration should default to Debug only in watch mode @forki
- Fix crash with delegate alias
- Fix #2234: Recompile dependencies in watch mode when Emit/Import attributes change
- Fix #2406: Check --outDir argument when running clean command
- Fix for Fable.Core.JsInterop.importValueDynamic
- Support setting a Build configuration with --configuration cli arg @stroborobo
- Log compiled files in same line
- Fix #2390: Array.choose is executing choose function two times @ncave
- Fix #2394: interpolate doesn't unescape %% correctly @thinkbeforecoding
- Fix #2396: custom exceptions in async workflows
- Fix #2400: Conversion to delegates
- Fix: Accessing named capture group in Regex only works with string constant @Booksbaum
- Fable library improvements and other fixes @ncave
- Fix #2384: Polling file watcher @mlaily
- Fix static constructors with attached members
- Fix #2045: Aliasing a function wrapping a multi-arity function in point-free style
- Add support for named capture groups in Regexes @Booksbaum
- Babel AST: cleanup and refactor @dbrattli
- Fix #1343: Warning when interface name clashes with record field @BillHally
- Fix #2376: Char.IsLetter with “ and ” @ncave @NickDarvey
- Fix #2372: Array.reduce Array.append @inosik
- Fix #2367: Using "unbox null" for callback returns "undefined"
- Fix #2357: Fall-through to default switch case duplicates the switch case consequent code block
- Fix #2356: Curried functions mangled via DU, List.fold and match combination
- Fix #2355: System.Math.Ceiling/Floor returning incorrect values for some Decimals @ncave
- Fix #2350: Empty files
- Fix #2116: Incorrect uncurrying with list of function options
- Fix #2047: Iterating over a list of functions with a for in loop
- Fix #2046: Assigning a function to scoped mutable variable
- Fix #2045: Raise warning for point-free function declarations
- Fast copy for typed arrays @GordonBGood
- Return error exit code when wront arguments passed
- Fix source map writing
- Fix #2350: Invalid JS class for empty files
- Fix #2355: System.Math.Ceiling() and System.Math.Floor returning incorrect values for some Decimals @ncave
- Fix #2357: Remove duplicate switch branches
- Fix #2343: Remove conflicting export default
- Fix #2336: Parameretized padding
- Fix reflection for int64/decimal with units of measure
- Source map support @delneg
- Fix #2342: recompile union tests in watch mode @tomcl
- Fix #2332: watch broken for certain directory structures @jwosty
- Source map support @delneg
- Fix #2332: watch broken for certain directory structures @jwosty
- Fixed compiler option parsing @ncave
- Fix #2329: Class getters with import function helpers
- Fix #2328: Check process is available in context
- Fix #2327: Inherit global class in nested module
- Fix #2325:
AttachMembersattribute
- Opt-in polling watcher @mlaily
- Fix #2323: Uncurrying Emit obj args
- Fix #2318: char ranges @inosik
- Fix #2320:
--yesCLI arg - Fix (partially) #2321:
System.Type.GetInterface
- Fix #2313: Measure abbreviations
- Fix #2311: Arrow function printing
- Fix spread wrapped by parens @do-wa
- Add runtime check for Option.Value
- Remove equals/compare "fast" helper (sometimes fails)
- Official release
- Fix #2293: Fix case of path passed as cli argument @tomcl
- Fix #2277: Make FsWatcher case-insensitive @reinux
- Fix local imports with
importfunction helpers
- Fix #2303: spreading complex expressions
- Fix #2302: Fable.JsonProvider
- Moar beta reduction improvements
- Use caching only in watch mode
- Ignore base constructor calls causing errors @ncave
- Fix watch dependencies when order of union cases changes
- Fix #2295: Disable errors affecting Fable 2-compliant code
- Improve lambda beta reduction
- Fix #1962: Find entities by core assembly name
- Fix #2283: FABLE_COMPILER_3 constant
- Fix #2284: Inline import can absorb arguments
- Fix #2288: Ignore --warnaserror from project references
- Fix #2291: Default hashing for classes
- Fix FSharpType.IsTuple for array of tuples @kerams
- In watch mode, recompile all files if F# failed previously
- Fix #2281: Hashing JS pojos @inosik
- Fix #2280: Inlined imports
- Fix #2278: Optimize
createObj - Fix #2276: Formatting Decimals
- Always lower case ToString
- Fix #2136: Type Provider invalidation @zanaptak
- Support Nullables
- Fix #2267: Allow direct console output preserving colors @zanaptak
- Fix #2259: File conflict in outDir
- Fix #2260: Add new files to watcher
- StringBuilder.Append overloads @gusty
- Make file watcher more robust
- LeanWork.IO.FileSystem.Watcher by Peter Meinl
- Fix #1962: FSharp.UMX measure annotated types
- Fix #2250: Math.Clamp
- Fix #2257: Remove warnings in keyValueList
- Patch FCS witness error @ncave
- Set always --langversion:preview
- Release candidate
- FCS witnesses!
- Other fixes
- Fix #2238: Normalize paths on Windows
- Fix #2212 (3rd attempt): Killing subprocess on Windows
- Typescript-related updates @ncave
- Omit module prefix in imports @Zaid-Ajaj
- Write compiler options to .fable/compiler_info.txt
- Compatibility with Fable.AST beta-002
- Fix #2226: Wrong decimal separator depending on regional setting @bklop
- Fix #2228: Remove unused values generated by imports meant for side effects
- Fix #2224: React.ofImport
- Fix #2216: Remove empty else blocks
- Fix #2212: Ctrl+C doesn't kill subprocess in Windows
- Compatibility with Fable.AST beta-001
- Beta release
- Fix .fsx compilation
- Only use cached (precompiled) files in debug mode
- Only use cached (precompiled) files in debug mode
- Optimize list construction
- Compatibility with latest Fable.AST
- Fix #2211: File extension in dynamic imports @Zaid-Ajaj
- Fix #2212: Kill subprocess in Windows @Zaid-Ajaj
- Fix #2213: Weird logs
- Compatibility with latest Fable.AST release
- Minor improvements in code generation
- Fixed entity resolution @ncave
- Cli improvements
- Fix plugins
- Plugins
- Fix #2202: Using System.Type as Dictionary key @Zaid-Ajaj
- Fix #2203: Comparing large sets @Zaid-Ajaj
- Keep only entity refs in Fable AST
- Detect if command after
--runis innode_modules/.bindir - Set typedArrays=true as default again
- Use latest FCS @ncave
- Disable file caching when compiler version changes
- Add back base class for Union/Record
- Fix calls to static members of imported classes
- --runScript option
- Fix uncurrying of Emit calls
- Fix type testing performance
- Fix union/record string formattin
- Fix running process
- Fix watcher
- Use latest implementation of FSharpMap and FSharpSet
- Fix generic equality
- Improve CLI and other fixes
- Fix: Add names with $reflection suffix to root scope
- Fix deriving from imported JS classes
- Keep support for ParamList attribute until removed from Fable.React
- Ignore warnings from packages (as before)
- Nagareyama alpha