lune/CHANGELOG.md

9.9 KiB

Changelog

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.

Unreleased

Added

  • Setting cwd in the options for process.spawn to a path starting with a tilde (~) will now use a path relative to the platform-specific home / user directory.

Changed

  • NetRequest query parameters value has been changed to be a table of key-value pairs similar to process.env. If any query parameter is specified more than once in the request url, the value chosen will be the last one that was specified.

Fixed

  • Fixed process.spawn blocking all lua threads if the spawned child process yields.

0.3.0 - February 6th, 2023

Added

  • Added a new global stdio which replaces console

  • Added stdio.write which writes a string directly to stdout, without any newlines

  • Added stdio.ewrite which writes a string directly to stderr, without any newlines

  • Added stdio.prompt which will prompt the user for different kinds of input

    Example usage:

    local text = stdio.prompt()
    
    local text2 = stdio.prompt("text", "Please write some text")
    
    local didConfirm = stdio.prompt("confirm", "Please confirm this action")
    
    local optionIndex = stdio.prompt("select", "Please select an option", { "one", "two", "three" })
    
    local optionIndices = stdio.prompt(
        "multiselect",
        "Please select one or more options",
        { "one", "two", "three", "four", "five" }
    )
    

Changed

  • Migrated console.setColor/resetColor and console.setStyle/resetStyle to stdio.color and stdio.style to allow for more flexibility in custom printing using ANSI color codes. Check the documentation for new usage and behavior.
  • Migrated the pretty-printing and formatting behavior of console.log/info/warn/error to the standard Luau printing functions.

Removed

  • Removed printing functions console.log/info/warn/error in favor of regular global functions for printing.

Fixed

  • Fixed scripts hanging indefinitely on error

0.2.2 - February 5th, 2023

Added

  • Added global types for networking & child process APIs
    • net.request gets NetFetchParams and NetFetchResponse for its argument and return value
    • net.serve gets NetRequest and NetResponse for the handler function argument and return value
    • process.spawn gets ProcessSpawnOptions for its third and optional parameter

Changed

  • Reorganize repository structure to take advantage of cargo workspaces, improves compile times

0.2.1 - February 3rd, 2023

Added

  • Added support for string interpolation syntax (update to Luau 0.561)

  • Added network server functionality using net.serve

    Example usage:

    net.serve(8080, function(request)
        print(`Got a {request.method} request at {request.path}!`)
    
        local data = net.jsonDecode(request.body)
    
        -- For simple text responses with a 200 status
        return "OK"
    
        -- For anything else
        return {
            status = 203,
            headers = { ["Content-Type"] = "application/json" },
            body = net.jsonEncode({
                message = "echo",
                data = data,
            })
        }
    end)
    

Changed

  • Improved type definitions file for Selene, now including constants like process.env + tags such as readonly and mustuse wherever applicable

Fixed

  • Fixed type definitions file for Selene not including all API members and parameters
  • Fixed process.exit exiting at the first yield instead of exiting instantly as it should

0.2.0 - January 28th, 2023

Added

  • Added full documentation for all global APIs provided by Lune! This includes over 200 lines of pure documentation about behavior & error cases for all of the current 35 constants & functions. Check the README to find out how to enable documentation in your editor.

  • Added a third argument options for process.spawn:

    • cwd - The current working directory for the process
    • env - Extra environment variables to give to the process
    • shell - Whether to run in a shell or not - set to true to run using the default shell, or a string to run using a specific shell
    • stdio - How to treat output and error streams from the child process - set to "inherit" to pass output and error streams to the current process
  • Added process.cwd, the path to the current working directory in which the Lune script is running

0.1.3 - January 25th, 2023

Added

  • Added a --list subcommand to list scripts found in the lune or .lune directory.

0.1.2 - January 24th, 2023

Added

  • Added automatic publishing of the Lune library to crates.io

Fixed

  • Fixed scripts that terminate instantly sometimes hanging

0.1.1 - January 24th, 2023

Fixed

  • Fixed errors containing ./ and / or ../ in the middle of file paths
  • Potential fix for spawned processes that yield erroring with "attempt to yield across metamethod/c-call boundary"

0.1.0 - January 24th, 2023

Added

  • task now supports passing arguments in task.spawn / task.delay / task.defer
  • require now uses paths relative to the file instead of being relative to the current directory, which is consistent with almost all other languages but not original Lua / Luau - this is a breaking change but will allow for proper packaging of third-party modules and more in the future.
    • NOTE: If you still want to use the default Lua behavior instead of relative paths, set the environment variable LUAU_PWD_REQUIRE to true

Changed

  • Improved error message when an invalid file path is passed to require
  • Much improved error formatting and stack traces

Fixed

  • Fixed downloading of type definitions making json files instead of the proper format
  • Process termination will now always make sure all lua state is cleaned up before exiting, in all cases

0.0.6 - January 23rd, 2023

Added

  • Initial implementation of Roblox's task library, with some caveats:

    • Minimum wait / delay time is currently set to 10ms, subject to change
    • It is not yet possible to pass arguments to tasks created using task.spawn / task.delay / task.defer
    • Timings for task.defer are flaky and deferred tasks are not (yet) guaranteed to run after spawned tasks

    With all that said, everything else should be stable!

    • Mixing and matching the coroutine library with task works in all cases
    • process.exit() will stop all spawned / delayed / deferred threads and exit the process
    • Lune is guaranteed to keep running until there are no longer any waiting threads

    If any of the abovementioned things do not work as expected, it is a bug, please file an issue!

Fixed

  • Potential fix for spawned processes that yield erroring with "attempt to yield across metamethod/c-call boundary"

0.0.5 - January 22nd, 2023

Added

  • Added full test suites for all Lune globals to ensure correct behavior
  • Added library version of Lune that can be used from other Rust projects

Changed

  • Large internal changes to allow for implementing the task library.
  • Improved general formatting of errors to make them more readable & glanceable
  • Improved output formatting of non-primitive types
  • Improved output formatting of empty tables

Fixed

  • Fixed double stack trace for certain kinds of errors

0.0.4 - January 21st, 2023

Added

  • Added process.args for inspecting values given to Lune when running (read only)
  • Added process.env which is a plain table where you can get & set environment variables

Changed

  • Improved error formatting & added proper file name to stack traces

Removed

  • Removed ... for process arguments, use process.args instead
  • Removed individual functions for getting & setting environment variables, use process.env instead

0.0.3 - January 20th, 2023

Added

  • Added networking functions under net

    Example usage:

    local apiResult = net.request({
    	url = "https://jsonplaceholder.typicode.com/posts/1",
    	method = "PATCH",
    	headers = {
    		["Content-Type"] = "application/json",
    	},
    	body = net.jsonEncode({
    		title = "foo",
    		body = "bar",
    	}),
    })
    
    local apiResponse = net.jsonDecode(apiResult.body)
    assert(apiResponse.title == "foo", "Invalid json response")
    assert(apiResponse.body == "bar", "Invalid json response")
    
  • Added console logging & coloring functions under console

    This piece of code:

    local tab = { Integer = 1234, Hello = { "World" } }
    console.log(tab)
    

    Will print the following formatted text to the console, with syntax highlighting:

    {
        Integer = 1234,
        Hello = {
            "World",
        }
    }
    

    Additional utility functions exist with the same behavior but that also print out a colored tag together with any data given to them: console.info, console.warn, console.error - These print out prefix tags [INFO], [WARN], [ERROR] in blue, orange, and red, respectively.

Changed

  • The json api is now part of net
    • json.encode becomes net.jsonEncode
    • json.decode become net.jsonDecode

Fixed

  • Fixed JSON decode not working properly

0.0.2 - January 19th, 2023

Added

  • Added support for command-line parameters to scripts

    These can be accessed as a vararg in the root of a script:

    local firstArg: string, secondArg: string = ...
    print(firstArg, secondArg)
    
  • Added CLI parameters for downloading type definitions:

    • lune --download-selene-types to download Selene types to the current directory
    • lune --download-luau-types to download Luau types to the current directory

    These files will be downloaded as lune.yml and luneTypes.d.luau respectively and are also available in each release on GitHub.

0.0.1 - January 18th, 2023

Initial Release