Skip to content

[TSTL config] TSTL 'extension' config field affects 'require' statements in resulting code #1394

@Neloreck

Description

@Neloreck

Related to: #1229

Problem:

When adding custom extension config, resulting code require statements have *.extension ending. Lua does not know how to handle custom extensions in this case and tries to load *.extension modules instead. Causes runtime exception.

In my case I just used post-build step with file renaming (*.lua -> *.script), but since project compile time started taking more time I wanted to use --watch flag which requires correctly working 'extension' field.

  • I have noted that lualib_bundle file has correct .script extension and imported in a correct way (without .script part)
  • I assume that it may be related to compilerOptions.paths aliasing config in tsconfig.json

Providing alias config part just in case:

{
  "compilerOptions": {
    "paths": {
      "#/*": ["../../cli/*"],
      "@/*": ["../*"]
    }
  }
}

Details

  1. Add extension to the config file (tsconfig.json)
{
  "tstl": {
      "extension": ".script"
    }
}
  1. Write some import statements
import { XR_object_factory } from "xray16";

import { LuaLogger } from "@/mod/scripts/utils/logging";

const logger: LuaLogger = new LuaLogger("register");

register_classes = (object_factory) => {
  logger.info("Register classes:");

  const { registerGameClasses } = require("@/mod/scripts/registering/class_registrator");

  registerGameClasses(object_factory);
};
  1. Build it and get result:
local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____logging = require("scripts.utils.logging.script")

local LuaLogger = ____logging.LuaLogger
local logger = __TS__New(LuaLogger, "register")

register_classes = function(object_factory)
    logger:info("Register classes:")
    local ____require_result_0 = require("scripts.registering.class_registrator.script")
    local registerGameClasses = ____require_result_0.registerGameClasses
    registerGameClasses(object_factory)
end

Expected result / result without extension config field usage:

If I build without extension config, I get following result:

local ____lualib = require("lualib_bundle")
local __TS__New = ____lualib.__TS__New
local ____exports = {}
local ____logging = require("scripts.utils.logging")

local LuaLogger = ____logging.LuaLogger
local logger = __TS__New(LuaLogger, "register")

register_classes = function(object_factory)
    logger:info("Register classes:")
    local ____require_result_0 = require("scripts.registering.class_registrator")
    local registerGameClasses = ____require_result_0.registerGameClasses
    registerGameClasses(object_factory)
end

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugscope: transpileAny transpilation not directly related to code transforms

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions