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.
- [All] Allow Fable 5 to be used with Fable 4 plugins (@ncave)
- [All] Add
--legacyCracker
as a fallback (@MangelMaxime)
- [All] Make MSBuildCracker the default (@MangelMaxime)
- [All] Replace
FABLE_COMPILER_4
withFABLE_COMPILER_5
as the compiler directive (@MangelMaxime) - [All] Move TargetFramework to
net8.0
(@ncave)
- [JS/TS] Added missing
ResizeArray.CopyTo
replacements (by @ncave) - [JS/TS] Added missing
Dictionary
constructors 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
ICollection
helpers (#3914) (by @ncave) - [JS/TS] Added missing
IReadOnlyCollection
helpers (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.Array
methods 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.Normalize
support (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.Replace
from hot paths (by @ncave) - [JS] Fix regression, generate
let
variable when usingimport
on 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
this
argument (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
OrdinalIgnoreCase
overload forString.EndsWith
(#3892) (by @goswinr) - [JS/TS] Add
uri.Port
,uri.IsDefaultPort
(by @MangelMaxime)
- [Python] Remove
$
sign when reporting an error fromassert_equal
andassert_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.Host
to 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.Add
forDateTimeKind.Unspecified
(by @ncave) - [Rust] Fixed deprecated
NaiveDateTime
usage 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.tryParse
should not crash onnull
string (@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.ToString
custom format handling (by @MangelMaxime)It now supports all custom format specifiers, and behave as if
CultureInfo.InvariantCulture
was used (Fable does not support Globalization). -
GH-3772 [JS/TS] Make compilation fails if calling
DateTime
constructor with microseconds (by @MangelMaxime)JavaScript
Date
does not support microseconds, we need to wait forTemporal
to be widely supported before reconsidering this. -
GH-3773 [Python] Fix
DateTime
custom formatfffffff
andFFFFFFF
(by @MangelMaxime)
- GH-3772 [JS/TS] Split replacement for
DateTime
andDateTimeOffset
(by @MangelMaxime)
- GH-3759 Add
StringBuilder.Chars
(by @MangelMaxime) - Added range overload for
String.ToCharArray
(by @ncave)
- GH-3761 Added
StringBuilder.Chars
,StringBuilder.Remove
and tests. (by @ncave)
- GH-3761 Added
StringBuilder
support 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.Remove
implementation. (by @ncave)
- GH-3761 Fixed incorrect
StringBuilder.Remove
implementation. (by @ncave)
- GH-3761 Updated
StringBuilder
to remove allocations where possible. (by @ncave)
- GH-3761 Updated
StringBuilder
to remove allocations where possible. (by @ncave)
- Update to Fable.AST 4.4.0
- Embed
fable-library-js
in Fable DLL (by @MangelMaxime)
- GH-3733 GH-3727 Add support for more
Result
API (by @zprobinson)Result.isOk
Result.isError
Result.Contains
Result.Count
Result.DefaultValue
Result.DefaultWith
Result.Exists
Result.Fold
Result.FoldBack
Result.ForAll
Result.Iterate
Result.ToArray
Result.ToList
Result.ToOption
- GH-3721 Add
--test:MSBuildCracker
flag allowing to use the experimental MSBuildCracker (by @nojaf)
- GH-3745 Add support for
ListCollector
(by @nojaf)instance.Add
instance.AddMany
instance.AddManyAndClose
instance.Close
- Remove
Choice.d.ts
from source code offable-library
(by @MangelMaxime) - GH-3748 Accessing an array out of bounds should emit an exception (by @MangelMaxime)
- Remove
Choice.d.ts
from 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
assert
expressions in debug mode (by @dbrattli)
- GH-3744 Fix behaviour when passing
--verbose
to be consistent with behaviour before changing the logging library (by @nojaf)
- GH-3749 Rename
fable-library
tofable-library-js
(by @MangelMaxime)
- GH-3719 Restore dependencies against the
.fsproj
after evaluating thefable-temp.csproj
file (Improves IDE supports) (by @MangelMaxime) - Don't delete
fable_modules
when re-evaluating the project file after a changes has been detected (Improves HMR experience) (by @MangelMaxime)
- GH-3723 Fix logger initialisation to allow
--version
to 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
.gitignore
file in the generatedfable_modules/
folder (by @MangelMaxime) - GH-3684 Re-compile files from
fable_modules
after 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
DateTime
andTimeSpan
addition (by @dbrattli) - GH-3663 Fix
DateTime.Parse
andDateTime.TryParse
(by @MangelMaxime)
- Fix
DateTime.Parse
when 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
self
arg 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
csproj
with.fable-temp.csproj
and include a comment in the file (by @MangelMaxime)
- Fix
DateTime.DayOfWeek
(by @MangelMaxime)
-
GH-3663 Complete rewrite of
DateTime
supports (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.Year
dt.Month
dt.Day
dt.Hour
dt.Minute
dt.Second
dt.Millisecond
dt.Microsecond
dt.ToUniversalTime
dt.DayOfWeek
dt.DayOfYear
dt.ToShortDateString
dt.ToShortTimeString
dt.ToLongDateString
dt.ToLongTimeString
dt.ToString
dt.ToLocalTime
dt.Date
dt.AddYears
dt.AddMonths
dt.AddDays
dt.AddHours
dt.AddMinutes
dt.AddSeconds
dt.AddMilliseconds
dt.AddMicroseconds
dt.Kind
- Static methods:
DateTime.Today
DateTime.Now
DateTime.Now
DateTime.UtcNow
DateTime.MinValue
DateTime.MaxValue
DateTime.Parse
DateTime.TryParse
DateTime.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
static
members always requirestatic member
, disregarding FCS from F# v7.0 and early v8.0 supported dismissing themember
keyword.
- GH-3645 Add
TimeSpan.Parse
andTimeSpan.TryParse
support to Python (by @MangelMaxime) - GH-3649 Add
List.sortBy
(by @dbrattli) - GH-3638 Add
Array.sort
andArray.sortDescending
(by @dbrattli)
- GH-3465 Fix
string.IndexOfAny
(by @pkese)
- GH-3465 Fix
string.IndexOfAny
(by @pkese)
- Overall performance improvements
- GH-3603 Missing
.gitignore
file 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.py
allowing for better precision by using a number representation intead of nativetimedelta
. (by @MangelMaxime)
- Use
Any
type 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 | None
instead 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.python
andPy.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: int
argument (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_modules
folder when the cache is invalidated -
Remove
--typescript
options support, use--lang <target>
instead -
Fix #3441: Don't ignore error when loading plugin
-
Fix #3482: Remove
Py.python
andPy.expr_python
useemitPyStatement
andemitPyExpr
instead -
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-library
folder.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
defaultArg
at 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
--watchDeps
flag - 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
FormattableString
as 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:
AttachMembers
attribute
- Opt-in polling watcher @mlaily
- Fix #2323: Uncurrying Emit obj args
- Fix #2318: char ranges @inosik
- Fix #2320:
--yes
CLI 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
import
function 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
--run
is innode_modules/.bin
dir - 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