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 1.7.1 to 1.7.2

6

dist/transformation/visitors/call.js

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

const parameters = transformArguments(context, node.arguments, signature, ts.factory.createThis());
return lua.createCallExpression(context.transformExpression(node.expression), parameters);
return lua.createCallExpression(context.transformExpression(node.expression), parameters, node);
}

@@ -144,3 +144,3 @@ const signatureDeclaration = signature === null || signature === void 0 ? void 0 : signature.getDeclaration();

const [expression, parameters] = transformCallAndArguments(context, node.expression, node.arguments, signature);
return lua.createCallExpression(expression, parameters);
return lua.createCallExpression(expression, parameters, node);
}

@@ -180,3 +180,3 @@ }

const parameters = transformArguments(context, node.arguments, signature, ts.factory.createThis());
return lua.createCallExpression(lua.createTableIndexExpression(context.transformExpression(ts.factory.createSuper()), lua.createStringLiteral("____constructor")), parameters);
return lua.createCallExpression(lua.createTableIndexExpression(context.transformExpression(ts.factory.createSuper()), lua.createStringLiteral("____constructor")), parameters, node);
}

@@ -183,0 +183,0 @@ let callPath;

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

function transformForOfMultiIterableStatement(context, statement, block, luaIterator, invalidMultiUseDiagnostic) {
context.pushPrecedingStatements();
let identifiers = [];

@@ -40,2 +41,3 @@ if (ts.isVariableDeclarationList(statement.initializer)) {

}
block.statements.unshift(...context.popPrecedingStatements());
return lua.createForInStatement(block, identifiers, [luaIterator], statement);

@@ -42,0 +44,0 @@ }

@@ -120,6 +120,6 @@ "use strict";

(0, lualib_1.importLuaLibFeature)(context, lualib_1.LuaLibFeature.Promise);
const importPath = node.arguments.map(a => context.transformExpression(a));
return lua.createCallExpression((0, promise_1.createStaticPromiseFunctionAccessor)("resolve", node), importPath, node);
const moduleRequire = node.arguments.length > 0 ? createModuleRequire(context, node.arguments[0], node) : lua.createNilLiteral();
return lua.createCallExpression((0, promise_1.createStaticPromiseFunctionAccessor)("resolve", node), [moduleRequire], node);
};
exports.transformImportExpression = transformImportExpression;
//# sourceMappingURL=import.js.map

@@ -107,2 +107,10 @@ "use strict";

}
const requiredFromLuaFile = requiringFile.fileName.endsWith(".lua");
const dependencyPath = requiredFromLuaFile ? luaRequireToPath(dependency) : dependency;
if (requiredFromLuaFile && isNodeModulesFile(requiringFile.fileName)) {
// If requiring file is in lua module, try to resolve sibling in that file first
const resolvedNodeModulesFile = this.resolveLuaDependencyPathFromNodeModules(requiringFile, dependencyPath);
if (resolvedNodeModulesFile)
return resolvedNodeModulesFile;
}
// Check if the import is relative

@@ -114,16 +122,15 @@ const isRelative = ["/", "./", "../"].some(p => dependency.startsWith(p));

// Check if file is a file in the project
const resolvedPath = path.join(relativeTo, dependency);
const resolvedPath = path.join(relativeTo, dependencyPath);
const fileFromPath = this.getFileFromPath(resolvedPath);
if (fileFromPath)
return fileFromPath;
// Check if this is a sibling of a required lua file
if (requiringFile.fileName.endsWith(".lua")) {
const luaFilePath = resolveLuaPath(fileDirectory, dependency, this.emitHost);
if (luaFilePath) {
return luaFilePath;
}
if (this.options.paths && this.options.baseUrl) {
// If no file found yet and paths are present, try to find project file via paths mappings
const fileFromPaths = this.tryGetModuleNameFromPaths(dependencyPath, this.options.paths, this.options.baseUrl);
if (fileFromPaths)
return fileFromPaths;
}
// Not a TS file in our project sources, use resolver to check if we can find dependency
try {
const resolveResult = resolver.resolveSync({}, fileDirectory, dependency);
const resolveResult = resolver.resolveSync({}, fileDirectory, dependencyPath);
if (resolveResult)

@@ -137,2 +144,21 @@ return resolveResult;

}
resolveLuaDependencyPathFromNodeModules(requiringFile, dependency) {
// We don't know for sure where the lua root is, so guess it is at package root
const splitPath = path.normalize(requiringFile.fileName).split(path.sep);
let packageRootIndex = splitPath.lastIndexOf("node_modules") + 2;
let packageRoot = splitPath.slice(0, packageRootIndex).join(path.sep);
while (packageRootIndex < splitPath.length) {
// Try to find lua file relative to currently guessed Lua root
const resolvedPath = path.join(packageRoot, dependency);
const fileFromPath = this.getFileFromPath(resolvedPath);
if (fileFromPath) {
return fileFromPath;
}
else {
// Did not find file at current root, try again one directory deeper
packageRoot = path.join(packageRoot, splitPath[packageRootIndex++]);
}
}
return undefined;
}
getFileFromPath(resolvedPath) {

@@ -173,2 +199,36 @@ const existingFile = this.pathToFile.get(resolvedPath);

}
// Taken from TS and modified: https://github.com/microsoft/TypeScript/blob/88a1e3a1dd8d2d86e844ff1c16d5f041cebcfdb9/src/compiler/moduleSpecifiers.ts#L562
tryGetModuleNameFromPaths(relativeToBaseUrl, paths, baseUrl) {
const relativeImport = removeTrailingDirectorySeparator((0, utils_1.normalizeSlashes)(relativeToBaseUrl));
for (const [importPattern, targetPatterns] of Object.entries(paths)) {
const pattern = removeFileExtension((0, utils_1.normalizeSlashes)(importPattern));
const indexOfStar = pattern.indexOf("*");
if (indexOfStar !== -1) {
// Try to match <prefix>*<suffix> to relativeImport
const prefix = pattern.substring(0, indexOfStar);
const suffix = pattern.substring(indexOfStar + 1);
if ((relativeImport.length >= prefix.length + suffix.length &&
relativeImport.startsWith(prefix) &&
relativeImport.endsWith(suffix)) ||
(!suffix && relativeImport === removeTrailingDirectorySeparator(prefix))) {
// If import matches <prefix>*<suffix>, extract the matched * path
const matchedStar = relativeImport.substring(prefix.length, relativeImport.length - suffix.length);
// Try to resolve to the target patterns with filled in * pattern
for (const target of targetPatterns) {
const file = this.getFileFromPath(path.join(baseUrl, target.replace("*", matchedStar)));
if (file)
return file;
}
}
}
else if (pattern === relativeImport) {
// If there is no * pattern, check for exact matches and try those targets
for (const target of targetPatterns) {
const file = this.getFileFromPath(path.join(baseUrl, target));
if (file)
return file;
}
}
}
}
}

@@ -188,30 +248,2 @@ function resolveDependencies(program, files, emitHost) {

exports.resolveDependencies = resolveDependencies;
function resolveLuaPath(fromPath, dependency, emitHost) {
const splitDependency = dependency.split(".");
if (splitDependency.length === 1) {
// If dependency has just one part (the file), look for a lua file with that name
const fileDirectory = walkUpFileTreeUntil(fromPath, dir => emitHost.fileExists(path.join(dir, dependency) + ".lua"));
if (fileDirectory) {
return path.join(fileDirectory, dependency) + ".lua";
}
}
else {
// If dependency has multiple parts, look for the first directory of the require path, which must be in the lua root
const luaRoot = walkUpFileTreeUntil(fromPath, dir => emitHost.directoryExists(path.join(dir, splitDependency[0])));
if (luaRoot) {
return path.join(luaRoot, dependency.replace(/\./g, path.sep)) + ".lua";
}
}
}
function walkUpFileTreeUntil(fromDirectory, predicate) {
const currentDir = path.normalize(fromDirectory).split(path.sep);
while (currentDir.length > 0) {
const dir = currentDir.join(path.sep);
if (predicate(dir)) {
return dir;
}
currentDir.pop();
}
return undefined;
}
function shouldRewriteRequires(resolvedDependency, program) {

@@ -236,3 +268,3 @@ return !isBuildModeLibrary(program) || !isNodeModulesFile(resolvedDependency);

const paths = [];
const pattern = /(^|\s|;|=)require\("(.+?)"\)/g;
const pattern = /(^|\s|;|=|\()require\("(.+?)"\)/g;
// eslint-disable-next-line @typescript-eslint/ban-types

@@ -249,3 +281,3 @@ let match;

const escapedRequire = originalRequire.replace(/[-/\\^$*+?.()|[\]{}]/g, "\\$&");
file.code = file.code.replace(new RegExp(`(^|\\s|;|=)require\\("${escapedRequire}"\\)`), `$1require("${requirePath}")`);
file.code = file.code.replace(new RegExp(`(^|\\s|;|=|\\()require\\("${escapedRequire}"\\)`), `$1require("${requirePath}")`);
}

@@ -295,2 +327,11 @@ function replaceRequireInSourceMap(file, originalRequire, newRequire) {

}
function luaRequireToPath(requirePath) {
return requirePath.replace(/\./g, path.sep);
}
function removeFileExtension(path) {
return path.includes(".") ? (0, utils_1.trimExtension)(path) : path;
}
function removeTrailingDirectorySeparator(path) {
return path.endsWith("/") || path.endsWith("\\") ? path.substring(0, -1) : path;
}
//# sourceMappingURL=resolve.js.map
{
"name": "typescript-to-lua",
"version": "1.7.1",
"version": "1.7.2",
"description": "A generic TypeScript to Lua transpiler. Write your code in TypeScript and publish Lua!",

@@ -5,0 +5,0 @@ "repository": "https://github.com/TypeScriptToLua/TypeScriptToLua",

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