Socket
Socket
Sign inDemoInstall

typescript-to-lua

Package Overview
Dependencies
Maintainers
2
Versions
157
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

typescript-to-lua - npm Package Compare versions

Comparing version 0.41.2 to 0.42.0

16

CHANGELOG.md
# Changelog
## 0.42.0
- **[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](https://typescripttolua.github.io/docs/advanced/language-extensions#luamultireturn-type).
- Added support for TSX, see [documentation](https://typescripttolua.github.io/docs/tsx) 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()` or `my_custom_require()`.
- Fixed lualib bundle not being included in the output if external packages use it, but the client code does not.
## 0.41.0

@@ -4,0 +20,0 @@

15

dist/LuaLib.js

@@ -100,5 +100,6 @@ "use strict";

ArrayFlatMap: [LuaLibFeature.ArrayConcat, LuaLibFeature.ArrayIsArray],
Decorate: [LuaLibFeature.CloneDescriptor],
Decorate: [LuaLibFeature.ObjectGetOwnPropertyDescriptor, LuaLibFeature.SetDescriptor, LuaLibFeature.ObjectAssign],
DelegatedYield: [LuaLibFeature.StringAccess],
Delete: [LuaLibFeature.ObjectGetOwnPropertyDescriptors],
Error: [LuaLibFeature.New, LuaLibFeature.Class],
Error: [LuaLibFeature.Class, LuaLibFeature.ClassExtends, LuaLibFeature.New],
FunctionBind: [LuaLibFeature.Unpack],

@@ -108,4 +109,10 @@ Generator: [LuaLibFeature.Symbol],

Iterator: [LuaLibFeature.Symbol],
NumberToString: [LuaLibFeature.StringAccess],
ObjectDefineProperty: [LuaLibFeature.CloneDescriptor, LuaLibFeature.SetDescriptor],
ObjectFromEntries: [LuaLibFeature.Iterator, LuaLibFeature.Symbol],
ParseFloat: [LuaLibFeature.StringAccess],
ParseInt: [LuaLibFeature.StringSubstr, LuaLibFeature.StringSubstring],
SetDescriptor: [LuaLibFeature.CloneDescriptor],
StringSplit: [LuaLibFeature.StringSubstring, LuaLibFeature.StringAccess],
SymbolRegistry: [LuaLibFeature.Symbol],
Map: [LuaLibFeature.InstanceOf, LuaLibFeature.Iterator, LuaLibFeature.Symbol, LuaLibFeature.Class],

@@ -115,5 +122,3 @@ Set: [LuaLibFeature.InstanceOf, LuaLibFeature.Iterator, LuaLibFeature.Symbol, LuaLibFeature.Class],

WeakSet: [LuaLibFeature.InstanceOf, LuaLibFeature.Iterator, LuaLibFeature.Symbol, LuaLibFeature.Class],
Spread: [LuaLibFeature.Iterator, LuaLibFeature.Unpack],
StringSplit: [LuaLibFeature.StringSubstring, LuaLibFeature.StringAccess],
SymbolRegistry: [LuaLibFeature.Symbol],
Spread: [LuaLibFeature.Iterator, LuaLibFeature.StringAccess, LuaLibFeature.Unpack],
};

@@ -120,0 +125,0 @@ /* eslint-enable @typescript-eslint/naming-convention */

@@ -5,2 +5,3 @@ "use strict";

const ts = require("typescript");
const diagnostics_1 = require("./diagnostics");
const typescript_1 = require("./typescript");

@@ -107,2 +108,3 @@ var AnnotationKind;

if (getSignatureAnnotations(context, signature).has(AnnotationKind.TupleReturn)) {
context.diagnostics.push(diagnostics_1.annotationDeprecated(node, AnnotationKind.TupleReturn));
return true;

@@ -120,3 +122,7 @@ }

const type = context.checker.getTypeAtLocation(node.expression);
return getTypeAnnotations(type).has(AnnotationKind.TupleReturn);
const result = getTypeAnnotations(type).has(AnnotationKind.TupleReturn);
if (result) {
context.diagnostics.push(diagnostics_1.annotationDeprecated(node, AnnotationKind.TupleReturn));
}
return result;
}

@@ -123,0 +129,0 @@ exports.isTupleReturnCall = isTupleReturnCall;

@@ -37,3 +37,3 @@ "use strict";

const accessExpression = transformElementAccessArgument(context, node);
if (ts.isCallExpression(node.expression) && multi_1.returnsMultiType(context, node.expression)) {
if (multi_1.isMultiReturnCall(context, node.expression)) {
const accessType = context.checker.getTypeAtLocation(node.argumentExpression);

@@ -43,5 +43,11 @@ if (!typescript_1.isNumberType(context, accessType)) {

}
const selectIdentifier = lua.createIdentifier("select");
const selectCall = lua.createCallExpression(selectIdentifier, [accessExpression, table]);
return selectCall;
// When selecting the first element, we can shortcut
if (ts.isNumericLiteral(node.argumentExpression) && node.argumentExpression.text === "0") {
return table;
}
else {
const selectIdentifier = lua.createIdentifier("select");
const selectCall = lua.createCallExpression(selectIdentifier, [accessExpression, table]);
return selectCall;
}
}

@@ -48,0 +54,0 @@ if (ts.isOptionalChain(node)) {

@@ -7,3 +7,2 @@ "use strict";

const utils_1 = require("../../../utils");
const annotations_1 = require("../../utils/annotations");
const assignment_validation_1 = require("../../utils/assignment-validation");

@@ -58,3 +57,3 @@ const export_1 = require("../../utils/export");

let right = context.transformExpression(expression.right);
if (annotations_1.isTupleReturnCall(context, expression.right) || multi_1.isMultiReturnCall(context, expression.right)) {
if (multi_1.isMultiReturnCall(context, expression.right)) {
right = lua_ast_1.wrapInTable(right);

@@ -148,4 +147,6 @@ }

let right = context.transformExpression(expression.right);
if (!(annotations_1.isTupleReturnCall(context, expression.right) || multi_1.isMultiReturnCall(context, expression.right)) &&
typescript_1.isArrayType(context, rightType)) {
if (ts.isArrayLiteralExpression(expression.right)) {
right = expression.right.elements.map(e => context.transformExpression(e));
}
else if (!multi_1.isMultiReturnCall(context, expression.right) && typescript_1.isArrayType(context, rightType)) {
right = lua_ast_1.createUnpackCall(context, right, expression.right);

@@ -157,3 +158,3 @@ }

let right = context.transformExpression(expression.right);
if (annotations_1.isTupleReturnCall(context, expression.right) || multi_1.isMultiReturnCall(context, expression.right)) {
if (multi_1.isMultiReturnCall(context, expression.right)) {
right = lua_ast_1.wrapInTable(right);

@@ -160,0 +161,0 @@ }

@@ -46,5 +46,7 @@ "use strict";

const typeRight = context.checker.getTypeAtLocation(node.right);
if (typescript_1.isStringType(context, typeLeft) || typescript_1.isStringType(context, typeRight)) {
left = lua_ast_1.wrapInToStringForConcat(left);
right = lua_ast_1.wrapInToStringForConcat(right);
const isLeftString = typescript_1.isStringType(context, typeLeft);
const isRightString = typescript_1.isStringType(context, typeRight);
if (isLeftString || isRightString) {
left = isLeftString ? left : lua_ast_1.wrapInToStringForConcat(left);
right = isRightString ? right : lua_ast_1.wrapInToStringForConcat(right);
luaOperator = lua.SyntaxKind.ConcatOperator;

@@ -51,0 +53,0 @@ }

@@ -174,8 +174,3 @@ "use strict";

const transformCallExpression = (node, context) => {
const isTupleReturn = annotations_1.isTupleReturnCall(context, node);
const isTupleReturnForward = node.parent && ts.isReturnStatement(node.parent) && annotations_1.isInTupleReturnFunction(context, node);
const isInSpread = node.parent && ts.isSpreadElement(node.parent);
const returnValueIsUsed = node.parent && !ts.isExpressionStatement(node.parent);
const wrapTupleReturn = isTupleReturn && !isTupleReturnForward && !typescript_1.isInDestructingAssignment(node) && !isInSpread && returnValueIsUsed;
const wrapResultInTable = wrapTupleReturn || multi_1.shouldMultiReturnCallBeWrapped(context, node);
const wrapResultInTable = multi_1.isMultiReturnCall(context, node) && multi_1.shouldMultiReturnCallBeWrapped(context, node);
const wrapResultInOptional = ts.isOptionalChain(node);

@@ -182,0 +177,0 @@ const builtinResult = builtins_1.transformBuiltinCallExpression(context, node);

import * as ts from "typescript";
import { TransformationContext } from "../../context";
export declare function isMultiReturnType(type: ts.Type): boolean;
export declare function canBeMultiReturnType(type: ts.Type): boolean;
export declare function isMultiFunctionCall(context: TransformationContext, expression: ts.CallExpression): boolean;

@@ -5,0 +6,0 @@ export declare function returnsMultiType(context: TransformationContext, node: ts.CallExpression): boolean;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.findMultiAssignmentViolations = exports.shouldMultiReturnCallBeWrapped = exports.isInMultiReturnFunction = exports.isMultiFunctionNode = exports.isMultiReturnCall = exports.returnsMultiType = exports.isMultiFunctionCall = exports.isMultiReturnType = void 0;
exports.findMultiAssignmentViolations = exports.shouldMultiReturnCallBeWrapped = exports.isInMultiReturnFunction = exports.isMultiFunctionNode = exports.isMultiReturnCall = exports.returnsMultiType = exports.isMultiFunctionCall = exports.canBeMultiReturnType = exports.isMultiReturnType = void 0;
const ts = require("typescript");

@@ -9,2 +9,3 @@ const extensions = require("../../utils/language-extensions");

const diagnostics_1 = require("../../utils/diagnostics");
const annotations_1 = require("../../utils/annotations");
function isMultiReturnType(type) {

@@ -14,2 +15,6 @@ return extensions.isExtensionType(type, extensions.ExtensionKind.MultiType);

exports.isMultiReturnType = isMultiReturnType;
function canBeMultiReturnType(type) {
return isMultiReturnType(type) || (type.isUnion() && type.types.some(canBeMultiReturnType));
}
exports.canBeMultiReturnType = canBeMultiReturnType;
function isMultiFunctionCall(context, expression) {

@@ -26,3 +31,4 @@ return isMultiFunctionNode(context, expression.expression);

function isMultiReturnCall(context, expression) {
return ts.isCallExpression(expression) && returnsMultiType(context, expression);
return ((ts.isCallExpression(expression) && returnsMultiType(context, expression)) ||
annotations_1.isTupleReturnCall(context, expression));
}

@@ -46,3 +52,3 @@ exports.isMultiReturnCall = isMultiReturnCall;

function shouldMultiReturnCallBeWrapped(context, node) {
if (!returnsMultiType(context, node)) {
if (!returnsMultiType(context, node) && !annotations_1.isTupleReturnCall(context, node)) {
return false;

@@ -49,0 +55,0 @@ }

@@ -21,3 +21,3 @@ "use strict";

const type = context.checker.getContextualType(node);
if (type && !multi_1.isMultiReturnType(type)) {
if (type && !multi_1.canBeMultiReturnType(type)) {
context.diagnostics.push(diagnostics_1.invalidMultiFunctionReturnType(node));

@@ -49,3 +49,3 @@ }

}
else if (!annotations_1.isTupleReturnCall(context, node) && typescript_1.isArrayType(context, expressionType)) {
else if (!multi_1.isMultiReturnCall(context, node) && typescript_1.isArrayType(context, expressionType)) {
// If return expression is an array-type and not another TupleReturn call, unpack it

@@ -52,0 +52,0 @@ results = [lua_ast_1.createUnpackCall(context, context.transformExpression(node), node)];

@@ -59,6 +59,4 @@ "use strict";

const innerExpression = context.transformExpression(node.expression);
if (annotations_1.isTupleReturnCall(context, node.expression))
if (multi_1.isMultiReturnCall(context, node.expression))
return innerExpression;
if (ts.isCallExpression(node.expression) && multi_1.returnsMultiType(context, node.expression))
return innerExpression;
const type = context.checker.getTypeAtLocation(node.expression);

@@ -65,0 +63,0 @@ if (typescript_1.isArrayType(context, type)) {

@@ -7,3 +7,2 @@ "use strict";

const utils_1 = require("../../utils");
const annotations_1 = require("../utils/annotations");
const assignment_validation_1 = require("../utils/assignment-validation");

@@ -118,3 +117,3 @@ const diagnostics_1 = require("../utils/diagnostics");

let expression = context.transformExpression(initializer);
if (annotations_1.isTupleReturnCall(context, initializer) || multi_1.isMultiReturnCall(context, initializer)) {
if (multi_1.isMultiReturnCall(context, initializer)) {
expression = lua_ast_1.wrapInTable(expression);

@@ -132,4 +131,4 @@ }

if (initializer) {
if (annotations_1.isTupleReturnCall(context, initializer) || multi_1.isMultiReturnCall(context, initializer)) {
// Don't unpack @tupleReturn or LuaMultiReturn functions
if (multi_1.isMultiReturnCall(context, initializer)) {
// Don't unpack LuaMultiReturn functions
statements.push(...lua_ast_1.createLocalOrExportedOrGlobalDeclaration(context, vars, context.transformExpression(initializer), initializer));

@@ -136,0 +135,0 @@ }

@@ -112,2 +112,3 @@ "use strict";

if (required === "lualib_bundle") {
dependencies.push({ fileName: "lualib_bundle", code: "" });
continue;

@@ -114,0 +115,0 @@ }

@@ -46,4 +46,9 @@ "use strict";

}
const lualibRequired = files.some(f => f.code.includes('require("lualib_bundle")'));
// Resolve imported modules and modify output Lua requires
const resolutionResult = resolve_1.resolveDependencies(program, files, this.emitHost);
diagnostics.push(...resolutionResult.diagnostics);
const lualibRequired = resolutionResult.resolvedFiles.some(f => f.fileName === "lualib_bundle");
if (lualibRequired) {
// Remove lualib placeholders from resolution result
resolutionResult.resolvedFiles = resolutionResult.resolvedFiles.filter(f => f.fileName !== "lualib_bundle");
if (options.tstlVerbose) {

@@ -54,7 +59,4 @@ console.log("Including lualib bundle");

const fileName = utils_1.normalizeSlashes(path.resolve(getSourceDir(program), "lualib_bundle.lua"));
files.unshift({ fileName, code: LuaLib_1.getLuaLibBundle(this.emitHost) });
resolutionResult.resolvedFiles.unshift({ fileName, code: LuaLib_1.getLuaLibBundle(this.emitHost) });
}
// Resolve imported modules and modify output Lua requires
const resolutionResult = resolve_1.resolveDependencies(program, files, this.emitHost);
diagnostics.push(...resolutionResult.diagnostics);
let emitPlan;

@@ -61,0 +63,0 @@ if (CompilerOptions_1.isBundleEnabled(options)) {

@@ -90,3 +90,3 @@ #!/usr/bin/env node

diagnostics.forEach(reportDiagnostic);
const exitCode = diagnostics.length === 0
const exitCode = diagnostics.filter(d => d.category === ts.DiagnosticCategory.Error).length === 0
? ts.ExitStatus.Success

@@ -93,0 +93,0 @@ : emitSkipped

{
"name": "typescript-to-lua",
"version": "0.41.2",
"version": "0.42.0",
"description": "A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!",

@@ -65,3 +65,3 @@ "repository": "https://github.com/TypeScriptToLua/TypeScriptToLua",

"jest-circus": "^25.1.0",
"lua-types": "^2.8.0",
"lua-types": "2.10.1",
"lua-wasm-bindings": "^0.2.2",

@@ -68,0 +68,0 @@ "prettier": "^2.3.2",

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc