- [Breaking]
/* @tupleReturn */
has been removed and will no longer have any effect. You will get an error if you try ot use it or if you use declarations that use it. - Added support for the
Promise
class. - Added support for
async
andawait
using coroutines. - Module resolution now also correctly resolves
<directory>/init.lua
files forrequire("<directory>")
. - Fixed an error not being thrown when trying to call a method in an optional chain that does not exist. (If the method itself is not optional)
- Fixed a bug where parentheses could break the context parameter being resolved for a method.
- Fixed a bug where context parameters in object literal methods were not inferred correctly.
- Fixed a bug with sourceMapTraceback.
- Fixed TS emitting empty JSON files if you use JSON source files.
- [Breaking] The
/** @tupleReturn */
is now deprecated, and will be removed next release. If you are still using it, please upgrade to the LuaMultiReturn language extension. - Added support for JSX, see documentation for more information.
- Added support for the
baseUrl
configuration key for module resolution.
A large list of bugfixes:
- Fixed an exception causing tstl to exit when trying to assign to an optional chain.
- Fixed resolved files appearing duplicated in lua bundles.
- Fixed a problem resolving external Lua files in nested directories.
- Fixed
@noResolution
in library packages losing their NoResolution tag, causing attempts to resolve them for package users. - Fixed a bug in the bundling code causing modules not to be cached if they return nil (which happens if they are not a module)
- Fixed module resolution trying to incorrectly resolve and rewrite things like
myObject.require()
ormy_custom_require()
. - Fixed lualib bundle not being included in the output if external packages use it, but the client code does not.
- Added support for optional chaining
a?.b
,a?.[b]
anda?.()
. - Added an error when trying to bundle a library (
"buildmode": "library"
) project. - Added
--tstlVerbose
CLI flag to help with diagnosing problems. - Fixed a bug where vararg (
...
) was not correctly optimized. - Fixed .tsx files not correctly being resolved.
- Fixed a bug where files were emitted to the wrong location if no
outDir
was specified.
-
Added support for using external Lua code in your project. This means you can create and install node_modules packages containing Lua code. It also lets you include Lua source files as part of your source files. Used Lua will automatically be added to your output. For more information, see the External Lua Code page in the docs.
-
[Breaking] Removed support for deprecated annotations that have been replaced with language extensions:
/** @luaIterator */
,/** @vararg */
,/** @luatable */
and/** forRange */
. If you were still using these, see the docs for instructions how to upgrade. -
Added support for
array.entries()
. -
Added support for
LuaTable.has(key)
andLuaTable.delete(key)
to the language extensions. See docs for more info. -
Made language extension types more strict, disallowing
null
andundefined
in some places where they would cause problems in Lua. -
Fixed an issue where using TypeScript transformer plugins would cause invalid namespace and module code, as well as breaking hoisting.
-
Fixed invalid switch statement output when the
default
clause was not the last clause in the switch. -
Fixed missing LuaLib dependency when using
string.split
. -
Fixed lots of bundling bugs and issues, also added the TypeScriptToLua header to the top of the bundle unless noHeader is specified.
Under the hood:
- Various improvements to testing infrastructure for testing (virtual) projects with multiple files.
- [Breaking] Removed support for
@phantom
,@metaExtension
,@extension
,@pureAbstract
compiler annotations. As of this version these will no longer function! For help upgrading your code see the deprecated annotation docs. - Added official support for Lua 5.4.
- Added the
LuaTable<TKey, TValue>
language extension. This allows the use of barebones Lua tables for key-value storage, without suffering from JS's forced string indexes. For more information see the LuaTable docs. - Deprecated
@vararg
. Instead, tstl will figure out itself when use of the Lua ellipsis token (...
) is appropriate. Also language extension$vararg
was added to force use of the ellipsis token. See the docs for more information. - Added
trailingComments
andleadingComments
fields to statements in the Lua AST. These can be modified by plugins to emit comments in the output lua. For an example see the add-comments test plugin.
Under the hood:
- Tests are now run on a WebAssembly-compiled version of official Lua releases. This means we can now execute test Lua on all Lua versions (except LuaJIT). Shoutout to Fengari for serving us well for a long time.
- [Breaking] Renamed
MultiReturn
toLuaMultiReturn
to be consistent with other language extensions all starting with Lua-. - Fixed various bugs and issues related to
LuaMultiReturn
, including its value not correctly being wrapped in some cases. - Added support for indexing
LuaMultiReturn
values without destructing. - Added language extensions to allow translation directly to (overwritten) Lua operators like
+
,-
,..
. For more information see Operator Map Types. - Added language extension
$range()
. This function can be used to create numeric lua loops, for examplefor (const i of $range(1, 10)) {
translates tofor i=1,10 do
. For more information see $range Iterator Function. - Added support for
Array.isArray
, formalizing tstl's isArray convention (note: Due to[]
and{}
being the same in Lua,{}
- without any keys - is considered an array too.) - Added support for
string.prototype.includes
. - Added support for enum merging.
- Fixed missing lualib dependency in
string.prototype.split
. - Added a not-supported diagnostic for not-yet-implemented optional chaining (
a?.b
). - Moved remaining legacy tests to modern testing utils, removing the legacy testing code.
- [Important] Deprecated the @phantom, @extension, @metaExtension and @pureAbstract annotations. This is done because there are good alternatives in regular TypeScript, and this helps us simplify the transpiler. For now, using these annotations will result in a warning but they will still continue to function. A few months from now these annotations will no longer be supported, so upgrade if possible. See Compiler Annotations for more info.
- Added the
MultiReturn<>
type and$multi()
helper function as the first language extensions. This is to provide a type-safe alternative to the@tupleReturn
annotation. For more information see the new Language Extensions page on the docs website. - Removed some class transformation code from the transpiler that was no longer used.
- Fixed a bug causing object spread to malfunction in some cases (#898).
- Omitted
tostring
for parameters of template literals (`${}`
) that are already known strings. - Fixed a bug causing incorrect Lua syntax to be generated in some cases (#944).
- Upgraded to TypeScript 4.0.
- Added support for
parseInt
andparseFloat
. - Added support for
yield*
for generator functions. - Added support for method, property and accessor decorators.
- Shebangs at the top of a .ts file will now be preserved.
- Fixed an issue causing declarations referencing their own identifier to cause a nil reference error.
- In preparation for some new features, some public APIs have been changed:
- High-level APIs that read input files from the file system (
transpileFiles
andtranspileProject
) now write transpiled files by default. This behavior can be changed by providing awriteFile
callback, similarly to TypeScript'sprogram.emit
. transpile
andemitTranspiledFiles
functions have been replaced with theTranspiler
class. See documentation for usage examples.
- High-level APIs that read input files from the file system (
- Fixed
declarationDir
option not being respected. Function.length
is supported now.- String iteration is now supported.
- Exposed
parseConfigFileWithSystem
to parse tsconfig.json files as part of the tstl API. - Fixed
string.replace
incorrectly escaping somereplaceValue
characters (().+-*?[^$
) - Fixed several other string operations behaving differently from JS (mostly regarding indices out of bounds and NaN arguments).
- Fixed a bug where the length argument of
String.prototype.substr
was evaluated twice. - Fixed some missing dependencies in LuaLib classes (Map, Set, WeakMap, WeakSet)
-
Added new
"luaTarget"
option value -"universal"
. Choosing this target makes TypeScriptToLua generate code compatible with all supported Lua targets.- BREAKING CHANGE: This is a new default target. If you have been depending on LuaJIT being chosen implicitly, you now have to enable it explicitly with
"luaTarget": "JIT"
in thetsconfig.json
file.
- BREAKING CHANGE: This is a new default target. If you have been depending on LuaJIT being chosen implicitly, you now have to enable it explicitly with
-
TypeScript has been updated to 3.9. See release notes for details. This update includes some fixes specific to our API usage:
- Importing a non-module using
import "./file"
produced a TS2307 error #35973 - TypeScript now tries to find a call signature even in presence of type errors #36665:
function foo(this: void, x: string) {} foo(1);
-- Before: with 3.8 (this: void ignored due to signature mismatch) foo(nil, 1) -- Now: with 3.9 foo(1)
- Importing a non-module using
-
Reduced memory consumption and optimized performance of generators and iterators
-
Fixed generator syntax being ignored on methods (
*foo() {}
) and function expressions (function*() {}
) -
Fixed iteration over generators stopping at first yielded
nil
value -
Fixed
Array.prototype.join
throwing an error when array contains anything other than strings and numbers -
Fixed extending a class not keeping
toString
implementation from a super class -
Fixed issue where CLI arguments were incorrectly removed.
-
Fixed issue where class accessors threw an error due to a missing dependency.
Under the hood:
- Upgraded to Prettier 2.0
-
Added support for nullish coalescing
A ?? B
. -
Annotation
/** @noSelf */
now also works directly on function declarations, not only on classes/interfaces. -
Fixed incorrect file paths in source maps.
-
Fixed unknown node kind throwing an error instead of diagnostic.
-
Fixed string index with side-effects being evaluated twice.
-
Added check for node.js version when running tstl.
-
Fixed some issues with reflection class names.
-
Fixed incorrectly escaped variable names.
Under the hood:
- Switched from TSLint to ESLint.
- Added benchmarking capability for garbage collection.
-
Deprecated: The
noHoisting
option has been removed, hoisting will always be done. -
TypeScript has been updated to 3.8. See release notes for details.
-
Fixed class accessors not working when base class is lacking type information (#725)
-
Class extension code has been extracted to lualib
class A {} class B extends A {}
A = __TS__Class() B = __TS__Class() -B.____super = A -setmetatable(B, B.____super) -setmetatable(B.prototype, B.____super.prototype) +__TS__ClassExtends(A, B)
-
Generated code for class accessors is more dynamic now
class A { get a() { return true; } }
A = __TS__Class() -A.prototype.____getters = {} -A.prototype.__index = __TS__Index(A.prototype) -function A.prototype.____getters.a(self) - return true -end +__TS__SetDescriptor( + A.prototype, + "a", + { + get = function(self) + return true + end + } +)
This change simplifies our codebase and opens a path to object accessors implementation
-
Errors reported during transpilation now are created as TypeScript diagnostics instead of being thrown as JavaScript errors. This makes TypeScriptToLua always try to generate valid code (even in presence of errors) and allows multiple errors to be reported in a single file:
for (var x in []) { }
$ tstl file.ts file.ts:1:1 - error TSTL: Iterating over arrays with 'for ... in' is not allowed. file.ts:1:6 - error TSTL: `var` declarations are not supported. Use `let` or `const` instead. $ cat file.lua for x in pairs({}) do end
-
Added
tstl.luaPlugins
option, allowing to specify plugins in atsconfig.json
file:{ "tstl": { "luaPlugins": [{ "name": "./plugin.ts" }] } }
-
Added support for all valid TS
for ... of
loop variable patterns. -
Fixed a bug where spread expressions in array literals were not correctly translated:
- [1, ...[2, 3], 4] // --> { 1, 2, 4 } + [1, ...[2, 3], 4] // --> { 1, 2, 3, 4 } - ((...values) => values)(1, ...[2, 3], 4) // --> { 1, 2, 4 } + ((...values) => values)(1, ...[2, 3], 4) // --> { 1, 2, 3, 4 }
-
Fixed Lua error when left hand side of
instanceof
was not a table type. -
Fixed
sourcemapTraceback
function returning a value different from the standard Lua result in 5.1. -
Fixed missing LuaLib dependency for Error LuaLib function.
-
Fixed several issues with exported identifiers breaking
for ... in
loops and some default class code. -
Fixed overflowing numbers transforming to undefined Infinity, instead they are now transformed to
math.huge
.
-
Breaking: The old annotation syntax (
/* !varArg */
) no longer works, the only currently supported syntax is:/** @varArg */
. -
Breaking: Fixed some cases where variables were incorrectly not labeled
local
. The only variables that are implicitly put in the global context are top-level variables in non-module files, without any imports or exports in their file. -
Moved handling of parentheses out of the transformers and unified this logic in the printer. This might result in some more parentheses in the generated code, but also makes it more correct and fixes some related bugs.
-
Added support for
array.includes
. -
Fixed a bug breaking global augmentation.
-
Fixed hoisting breaking if there were synthetic nodes in the AST (i.e. when a TS transformer modified the AST).
- Breaking: We dropped support for
var
variables. If you still have anyvar
variable declarations, please uselet
orconst
instead. - Breaking: We now depend on Node.js >= 12.13.0
- Added support for string
trimLeft
,trimRight
,trimStart
andtrimEnd
. - Added support for
console.error
,console.warn
andconsole.info
, they will all be transpiled to Lua'sprint
. - Avoided exporting anonymous identifiers.
- Fixed an issue when assigning to an already-exported variable.
- Math.atan2 will now be transpiled to the correct Lua atan2 (or atan for 5.3) method.
- Fixed various destructuring issues.
- Fixed incorrect error for intersection types containing built-ins (like
number
orstring
) - Modules containing
import
orexport
will now always be recognized as module to match TypeScript's logic. - Fixed
true
not being recognized as lua keyword. - Fixed inaccuracies in switch case variable scoping.
- Fixed various problems with variables being global instead of local.
- Refactored transformation pipeline from one big LuaTransformer class to many small modules.
- Moved class construction methods from transformer to LuaLib.
- Upgraded dependencies.
- Added bundling support using options
luaBundle
andluaBundleEntry
(so not TS's outFile). This will bundle all output files into one single bundle file, with luaBundleEntry as entry point. For more information on these options see https://github.com/TypeScriptToLua/TypeScriptToLua/wiki#tstl-specific-options - Added support for
Number.prototype.toString(radix)
. - Fixed
array.flat()
not flattening empty arrays. Note: Due to language restrictions, flat will also flatten objects without keys (or only undefined values) so be careful. For more info on this issue see TypeScriptToLua#737 - Fixed runtime error when throwing non-string errors and
sourceMapTraceback
.
-
We now have a
noImplicitSelf
option you can add to your tstl tsconfig.json. Default behavior isfalse
. Setting this option totrue
will cause no 'self' arguments to be considered/generated in the project. Declarations will behave as if they have a/** @noSelfInFile */
directive. This option is new and might cause correctness issues, use at your own risk and create an issue if you experience any issues. -
Regular
Error
objects can now be thrown,throw
is no longer limited to only strings. Take care: printing/toString'ing the LuaLib error class might have different results for different Lua versions. -
Added LuaLib support for
array.reduceRight
. -
Added LuaLib support for
array.find
. -
Fixed an issue in test code causing some inconsistent behavior between JS <-> Lua to go unnoticed. Also fixed
array.splice
andarray.join
whose Lua versions behaved differently from the ECMAScript specification. -
Fixed array.reduce not behaving according to ECMAScript specification.
-
Fixed order of operations issue with ternary conditional.
-
Updated to TS 3.6.
-
Moved from Travis+Appveyor to GitHub Actions!
-
Added support for array and object destructuring with rest.
-
Changed Map and Set implementations to they preserve insertion order when iterated over, as specified by ECMAScript.
-
Fixed an issue with
/** @luaTable */
variable names disappearing. -
Fixed for-in loops throwing an error when using a pre-defined variable.
-
Fixed issue with initialization order of class properties.
-
Simplified enum transformation code.
-
Added support for default exports and export equals statements.
-
Added support for object spread expressions.
-
Added support for most common destructuring assignments.
-
Added support for omitted declarations in destructuring tuples. (i.e.
const [a,,c] = foo();
) -
@noSelf
now only applies to members of the namespace with the directive, in case of namespace merging. -
Fixed issue with isNumerType causing enum members as array indices not to recieve the
+1
. -
Fixed string.indexOf failing in case the search string was a Lua string pattern.
-
Fixed some crashes from recursive type constraints.
-
Some simplification to the printing of expression statements.
-
Added new testing util methods to improve the testing process.
-
Added support for named function assignments, i.e.
const myFunc = function x(n) { ...; return x(n - 1); }
-
Made detection of string methods more robust.
-
Fixed issue regarding readonly tuple detection.
-
Fixed a nasty issue causing exponential complexity on chained properties/method expressions.
-
Improved handling of constrained generic types related to string and array detection.
-
Returns in try/catch statements now properly return from the current function.
-
TypeScript's
globalThis
is now translated to lua's_G
. Lualib functions were updated where relevant. -
Fixed issue where string/table literals were missing parentheses and caused lua syntax errors.
-
Various improvements/refactorings across the codebase.
-
Fixed syntax error in for...of loops with empty destructuring argument.
-
Fixed issue with
do ... while
scope. -
Fixed a bug with @combileMembersOnly where it would ignore anything before the enum name.
-
Added support for OmittedExpression in array literals and array binding patterns.
-
Added support for tagged template literals.
-
Changed output lua formatting to be more debugger-friendly.
-
Various improvements to source maps.
-
Fixed an issue with the interaction of super calls and exported classes.
-
Fixed
@noResolution
not working on named modules. -
Fixed namespace merging not working due to an earlier change.
-
Some refactoring and plumbing for the website.
-
Added the @vararg directive.
-
Added the @forRange directive.
-
Custom ts transformers can now be loaded from tsconfig.
-
Fixed default tstl header incorrectly showing up above lualib functions.
-
Some improvements to typeof expressions.
-
Imports/exports that are ambient (declarations, types, interfaces, etc) or are not used in value positions no longer generate
require
statements. -
For ... of loops are now translated using
ipairs
. -
Added support for
array.reduce
. -
Added support for
import foo = bar.baz;
statements. -
Fixed some issues with binding pattern parameter default values.
-
Fixed some issues with variable naming.
-
Enabled prettier on the entire codebase.
- Added support for
string.repeat
,string.padStart
andstring.padEnd
. - Added automatic variable renaming for invalid Lua identifiers.
- Fixed
/** @tupleReturn */
not working for function types (i.emyFunc: () => [number, number]
) - Various improvements to source map output format.
- Various small code tweaks and improvements.
-
BREAKING CHANGE: All tstl-specific options should now be inside the "tstl" section in tsconfig.json (see README.md). Root-level options are no longer supported.
-
Added a compiler API to programmatically invoke TypeScriptToLua, and to modify or extend the default transpiler. More info on the Compiler API wiki page.
-
Added support for class decorators.
-
Added support for the @luaTable directive which will force a class to be transpiled as vanilla lua table.
-
Added support for NaN, Infinity and related number functions.
-
Added support for string.startsWith, string.endsWith and improved string.replace implementation.
-
Added support for Symbol.hasInstance.
-
Hoisting now also considers imports.
-
Various improvements to iterators and arrays, they also work with the spread operator now.
-
Fixed an issue with parameters that had
false
as default value.
-
Added support for setting array length. Doing
array.length = x
will set the length of the array tox
(or shorter, if the starting array was shorter!). -
Added the
.name
property to all transpiled classes, soclass.name
will contain the classname as string. -
Changed
class = class or {}
syntax to just beclass = {}
. -
Cleaned up printer output so it produces more human-readable code.
-
Fixed bug with expression statements.
-
Fixed incorrect inline sourcemap format.
-
Fixed bug when merging an interface and module.
-
Fixed a bug with inherited constructor super call ordering.
-
Enabled strict tsconfig.
-
We now support source maps in the standard JS v3 format. You can generate source maps with the
--sourceMap
CLI argument, or by addingsourceMap: true
to your tsconfig. Inline source maps are also supported with--inlineSourceMap
CLI/tsconfig parameter. -
Also added tstl option
--sourceMapTraceback
, which will add an override to Lua'sdebug.traceback()
to each file, so source maps will automatically be applied to Lua stacktraces (i.e. in errors). -
Made watch mode incremental.
-
Added support for
Object.fromEntries
,array.flat
andarray.flatMap
. -
BREAKING CHANGE: Directive
@tupleReturn
should now be specified per overload. -
Fixed a bug where rest parameters would not transpile correctly.
-
Fixed an issue with escaped backticks.
-
Various small fixes function inference and array detection.
-
Changed testing framework to jest.
- BREAKING CHANGE: All functions now take a
self
parameter. This means that without further action calls to declaration functions might be given an extra argument.- To remove the self parameter from a single function add
this: void
to its declaration:declare function foo(this: void, ...)
- To remove the self parameter from all methods or functions in a class/interface/namespace add
/** @noSelf */
:/** @noSelf */ interface Foo {
- To remove the self parameter from all functions in a file, add
/** @noSelfInFile */
at the top.
- To remove the self parameter from a single function add
- BREAKING CHANGE: Directive
/** @luaIterator */
should now be put on types instead of on the functions returning them.
- Fixed a bug breaking named class expressions.
- Fixed inconsistency between the meaning of
>>
and>>>
in JS vs. Lua. - Added
/** @noResolution */
directive to prevent path resolution on declared modules. - It is now possible to put
/** @luaIterator */
on types extendingArray<T>
. - Fixed issue with the moment static fields were initialized.
- Fixed issue where
undefined
as property name was not transpiled correctly. - Various improvements to function/method self parameter inference.
- Tstl options can now be defined in their own
tstl
block in tsconfig.json. For example:
{
"compilerOptions" : {}
"tstl": {
"luaTarget": "JIT"
}
}
- Fixed issue when redeclaring TypeScript libraries/globals.
- Fixed exception resolving function signatures.
- Added support for automatically transpiling several
console
calls to their Lua equivalent:console.log(...)
->print(...)
console.assert(...)
->assert(...)
console.trace(...)
->print(debug.traceback(...))
- Added support for
array.findIndex()
. - Fixed
array.sort()
not working with a compare function. - Added support for several common
Math.
functions and constants. - Added support for several common string instance functions such as
upper()
.
- Several improvements to module path resolution.
- Removed header comment appearing in lualib.
- Several package config improvements.
- Static get/set accessors.
- Fixed array detection for unit and intersection types.
- Support for import without
from
. - Added support for
WeakMap
andWeakSet
. - Added support for
Object.keys
andObject.assign
. - Added support for importing JSON files.
- Fixed bug with where loop variables were not properly scoped.
- Added support for ExportDeclarations
- Now written for TypeScript 3.3.x!
- Removed external CLI parser dependency and wrote our own
CommandLineParser.ts
to read CLI and tsconfig input. - Added support for hoisting, can be disabled with the
noHoisting
option in CLI or tsconfig. - Added support for generator functions.
- Reworked classes into a system more similar to JavaScript with prototype tables.
- Improved support for ObjectBindingPatterns.
- Added support for enums with identifier values.
- Added support for the binary comma operator.
- Added support for
string.concat
,string.slice
andstring.charCodeAt
. - Refactored LuaTranspiler.emitLuaLib to its own method so it can be called from external code.
- Improved function type inference.
- Fixed some bugs in for loops with expressions.
- Fixed a bug forwarding luaIterator functions.
- Reworked internal transpiler structure to be more suited for future extension.
- Reworked module and exports system.
- Added support for custom iterators.
- Improved formatting consistency.
- Errors are now reported with location
(line, column)
instead ofline: line, column: column
. - Added back default lua header:
--[[ Generated with https://github.com/Perryvw/TypescriptToLua ]]
. - Fixed some bugs with switches and breaks.
- Fixed several bugs with functions and context parameters.
- Reworked how functions are transpiled, see https://github.com/TypeScriptToLua/TypescriptToLua/wiki/Differences-Between-Functions-and-Methods
- Improved handling of types extending Array.
- Fixed several bugs with classes.
- Fixed issues with inherited accessors.
- Added detection of types extending Array.
- Added new JSDoc-style compiler directives, deprecated the old
!
decorators, see https://github.com/TypeScriptToLua/TypescriptToLua/wiki/Compiler-Directives - Fixed bug with constructor default values.
- The Lualib is no longer included when not used.
- Fixed bug with unpack in LuaJIT.
- Fixed bug when throwing anything that was not a string. (@tomblind)
- Added support for object literal method declarations. (@tomblind)
- Fixed several issues with assignment operators (@tomblind)
else if
statements are now transpiled to Luaelseif
instead of nested ifs statements. (@tomblind)- Occurrences of const enum values are now directly replaced with their value in the Lua output. (@DoctorGester)
- Rethrowing is now possible from try/catch blocks (@tomblind)
- Destructing statements in LuaJit now use
unpack
instead oftable.unpack
- Removed support for switch statements for versions <= 5.1.
- Refactored
for ... of
translation, it now uses numericfor
loops instead ofipairs
for performance reasons.
- Added support for NonNullExpression (
abc!
transforming the type fromabc | undefined
toabc
) - Added expression position to replacement binary expression to improve error messages.
- Fixed various issues with !TupleReturn (@tomblind)
- Added support for
array.reverse
,array.shift
,array.unshift
,array.sort
. (@andreiradu) - Added translation for
Object.hasOwnProperty()
. (@andreiradu) - Added support for class expressions (@andreiradu)
- Fixed bug in detecting array types (@tomblind)
- Added public API functions and better webpack functionality.
- Fixed an issue where default parameter values were ignored in function declarations.
- Fixed a bug where
self
was undefined in function properties. - Fixed a bug where addition of +1 to indices sometimes caused issues with operation order (thanks @brianhang)
- Fixed super calls having issues with their
self
instance. (thanks @hazzard993) - Methods now also accept custom decorators (thanks @hazzard993)
- Improved support for
toString
calls (thanks @andreiradu) - Added support for block expressions (thanks @andreiradu)
Thanks @tomblind for the following changes:
- Fixed a bug where recursive use of a function expression caused a nil error.
- Fixed syntax error when compiling variable declaration lists.
- Fixed an issue with assignment order in exported namespaces.
- Various fixes to
!TupleReturn
functions. - Fixed an issue with declaration merging.
- Added experimental watch mode, use it with
tstl --watch
- Refactored decorators
- Added
...
spread operator - Added error when a lua keyword is used as variable name
- Added support for shorthand object literals (thanks @gakada)
- Added array.pop (thanks @andreiradu)
- Added
;
after lines to avoid ambiguous syntax (thanks @andreiradu) - Fixed issue with tsconfig being overriden (thanks @Janne252)
- Lualib runtime library is now compiled from TypeScript using the transpiler when building!
- Split up runtime library definition into individual files.
- Added multiple inclusion modes using the tsconfig option
lubLibImport
, options are:require
: Requires the entire library if lualib features are used.always
: Always require the runtime library.inline
: Inline the library code for used features in the file.none
: Do not include the runtime library
- Added support for assigning expressions (
+=
,&=
,++
, etc) in other expressions (i.e.lastIndex = i++
orreturn a += b
) by transpiling them as immediately called anonymous functions. - Unreachable code (after returns) is no longer transpiled, preventing a Lua syntax error.
- Fixed issue with destructing statements in Lua 5.1
- Fixed issue with escaped characters in strings.
- Fixed bug regarding changing an exported variable after its export.
- Reworked part of the class system to solve some issues.
- Reworked class tests from translation to functional.
- Fixed issue with Lua splice implementation.
- Added threaded test runner to use for faster testing (use with
npm run test-threaded
). - Added support for string-valued enums.
- Added tsconfig values to target Lua 5.1 and 5.2.
- Added support for
**
operator. - Added support for
~
operator. - Improved handling of assignment binary operators (
+=
,*=
,&=
, etc). - Rewrote
Map
andSet
to implement the ES6 specification for Map and Set. - Added support for
baseUrl
in tsconfig. - Added
bit32
bit operations for Lua 5.2. - Fixed various little bugs.
- Added tslint rule to enforce use of
/** @override */
decorator. - Improved tests.
- Added support for
typeof
- Added support for
instanceof
- Added support for TypeScript overloads