From 8ee1569d6f2f2dad9067a9aaaf758b8901faa86a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 May 2026 17:56:55 +0000 Subject: [PATCH 01/15] Update external test cases (#1113) --- tests/inputs-luau-full_moon/const_function.lua | 4 ++++ tests/inputs-luau-full_moon/const_variable.lua | 10 ++++++++++ .../types_leading_union_generic.lua | 15 +++++++++++++++ .../types_leading_union_return.lua | 10 ++++++++++ .../tests__luau_full_moon@const_function.lua.snap | 9 +++++++++ .../tests__luau_full_moon@const_variable.lua.snap | 15 +++++++++++++++ ...full_moon@types_leading_union_generic.lua.snap | 14 ++++++++++++++ ..._full_moon@types_leading_union_return.lua.snap | 15 +++++++++++++++ 8 files changed, 92 insertions(+) create mode 100644 tests/inputs-luau-full_moon/const_function.lua create mode 100644 tests/inputs-luau-full_moon/const_variable.lua create mode 100644 tests/inputs-luau-full_moon/types_leading_union_generic.lua create mode 100644 tests/inputs-luau-full_moon/types_leading_union_return.lua create mode 100644 tests/snapshots/tests__luau_full_moon@const_function.lua.snap create mode 100644 tests/snapshots/tests__luau_full_moon@const_variable.lua.snap create mode 100644 tests/snapshots/tests__luau_full_moon@types_leading_union_generic.lua.snap create mode 100644 tests/snapshots/tests__luau_full_moon@types_leading_union_return.lua.snap diff --git a/tests/inputs-luau-full_moon/const_function.lua b/tests/inputs-luau-full_moon/const_function.lua new file mode 100644 index 000000000..4cd402f35 --- /dev/null +++ b/tests/inputs-luau-full_moon/const_function.lua @@ -0,0 +1,4 @@ +const function f() end +const function greet(name: string): string + return "Hello, " .. name +end diff --git a/tests/inputs-luau-full_moon/const_variable.lua b/tests/inputs-luau-full_moon/const_variable.lua new file mode 100644 index 000000000..ebdc72ec3 --- /dev/null +++ b/tests/inputs-luau-full_moon/const_variable.lua @@ -0,0 +1,10 @@ +const x = 5 +const f = function() end +const t = { a = 1 } +const x: number = 5 +const a, b = 1, 2 +const x: number, y: string = 1, "hello" +local const = 4 +const a, b = returns_two() +const a, b, c = 1, unpack(t) +const a, b = ... diff --git a/tests/inputs-luau-full_moon/types_leading_union_generic.lua b/tests/inputs-luau-full_moon/types_leading_union_generic.lua new file mode 100644 index 000000000..40ccd7c34 --- /dev/null +++ b/tests/inputs-luau-full_moon/types_leading_union_generic.lua @@ -0,0 +1,15 @@ +-- Issue #350: leading | in generic type arguments +type Test = Box< + | string + | number +> + +type Test2 = Box<| string | number> + +-- Issue #311 comment: leading & in generic type arguments +type Test3 = Generic<& boolean & string> + +type Test4 = Map< + & string & number, + | boolean | nil +> diff --git a/tests/inputs-luau-full_moon/types_leading_union_return.lua b/tests/inputs-luau-full_moon/types_leading_union_return.lua new file mode 100644 index 000000000..db9ad2032 --- /dev/null +++ b/tests/inputs-luau-full_moon/types_leading_union_return.lua @@ -0,0 +1,10 @@ +-- Issue #311 comment: leading | and & in function return types +type UnionReturn = () -> | string | number + +type IntersectionReturn = () -> & string & number + +type NestedReturn = (string) -> | boolean | nil + +-- Also valid in function type annotations +local f: () -> | string | number = nil +local g: (number) -> & string & number = nil diff --git a/tests/snapshots/tests__luau_full_moon@const_function.lua.snap b/tests/snapshots/tests__luau_full_moon@const_function.lua.snap new file mode 100644 index 000000000..0b953ad73 --- /dev/null +++ b/tests/snapshots/tests__luau_full_moon@const_function.lua.snap @@ -0,0 +1,9 @@ +--- +source: tests/tests.rs +expression: "format(&contents, LuaVersion::Luau)" +input_file: tests/inputs-luau-full_moon/const_function.lua +--- +const function f() end +const function greet(name: string): string + return "Hello, " .. name +end diff --git a/tests/snapshots/tests__luau_full_moon@const_variable.lua.snap b/tests/snapshots/tests__luau_full_moon@const_variable.lua.snap new file mode 100644 index 000000000..f2374c6f5 --- /dev/null +++ b/tests/snapshots/tests__luau_full_moon@const_variable.lua.snap @@ -0,0 +1,15 @@ +--- +source: tests/tests.rs +expression: "format(&contents, LuaVersion::Luau)" +input_file: tests/inputs-luau-full_moon/const_variable.lua +--- +const x = 5 +const f = function() end +const t = { a = 1 } +const x: number = 5 +const a, b = 1, 2 +const x: number, y: string = 1, "hello" +local const = 4 +const a, b = returns_two() +const a, b, c = 1, unpack(t) +const a, b = ... diff --git a/tests/snapshots/tests__luau_full_moon@types_leading_union_generic.lua.snap b/tests/snapshots/tests__luau_full_moon@types_leading_union_generic.lua.snap new file mode 100644 index 000000000..c26d0b850 --- /dev/null +++ b/tests/snapshots/tests__luau_full_moon@types_leading_union_generic.lua.snap @@ -0,0 +1,14 @@ +--- +source: tests/tests.rs +expression: "format(&contents, LuaVersion::Luau)" +input_file: tests/inputs-luau-full_moon/types_leading_union_generic.lua +--- +-- Issue #350: leading | in generic type arguments +type Test = Box<| string | number> + +type Test2 = Box<| string | number> + +-- Issue #311 comment: leading & in generic type arguments +type Test3 = Generic<& boolean & string> + +type Test4 = Map<& string & number, | boolean | nil> diff --git a/tests/snapshots/tests__luau_full_moon@types_leading_union_return.lua.snap b/tests/snapshots/tests__luau_full_moon@types_leading_union_return.lua.snap new file mode 100644 index 000000000..e096cab50 --- /dev/null +++ b/tests/snapshots/tests__luau_full_moon@types_leading_union_return.lua.snap @@ -0,0 +1,15 @@ +--- +source: tests/tests.rs +expression: "format(&contents, LuaVersion::Luau)" +input_file: tests/inputs-luau-full_moon/types_leading_union_return.lua +--- +-- Issue #311 comment: leading | and & in function return types +type UnionReturn = () -> | string | number + +type IntersectionReturn = () -> & string & number + +type NestedReturn = (string) -> | boolean | nil + +-- Also valid in function type annotations +local f: () -> | string | number = nil +local g: (number) -> & string & number = nil From 4df5c84cc6c97fb3bc8f5b67e364df15659bf277 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 10:44:22 +0200 Subject: [PATCH 02/15] VSCode: prevent bogus update prompt when GitHub API returns non-OK response (#1114) * fix(vscode): prevent bogus update prompt when GitHub API returns non-OK response When the GitHub API rate-limits or otherwise returns a non-2xx response, fetchJson was silently parsing the error body JSON. releaseFromJson would then produce a release with an empty tagName, causing ensureStyluaExists to always show the "update available" status bar item (since any installed version != ""). When the user clicked Update, downloadStyLuaVisual("") was called, which produced the confusing error "No release version matches v." Fix by throwing in fetchJson on non-OK HTTP responses so the existing try/catch in ensureStyluaExists handles it gracefully. Also add a tagName guard in getRelease for defense in depth against other malformed payloads. --- stylua-vscode/CHANGELOG.md | 4 ++++ stylua-vscode/src/github.ts | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/stylua-vscode/CHANGELOG.md b/stylua-vscode/CHANGELOG.md index aaf8ada99..766e2fcf9 100644 --- a/stylua-vscode/CHANGELOG.md +++ b/stylua-vscode/CHANGELOG.md @@ -11,6 +11,10 @@ To view the changelog of the StyLua binary, see [here](https://github.com/Johnny ## [Unreleased] +### Fixed + +- Fixed spurious "No release version matches v." error when GitHub API returns a non-OK response (e.g. rate limiting). The extension no longer shows a bogus update prompt in this case + ## [1.7.1] - 2024-11-17 ### Fixed diff --git a/stylua-vscode/src/github.ts b/stylua-vscode/src/github.ts index c6e4d958e..c1fd7db5f 100644 --- a/stylua-vscode/src/github.ts +++ b/stylua-vscode/src/github.ts @@ -30,6 +30,11 @@ async function fetchJson( headers.set("Authorization", `token ${token}`); } const response = await fetch(url, { headers: headers }); + if (!response.ok) { + throw new Error( + `GitHub API request failed: ${response.status} ${response.statusText}` + ); + } return response.json(); } @@ -140,7 +145,17 @@ export class GitHub implements Disposable { public async getRelease(version: string): Promise { if (version === "latest") { const json = await fetchJson(RELEASES_URL_LATEST, this.credential.token); - return releaseFromJson(json); + const release = releaseFromJson(json); + if (!release.tagName) { + throw new Error( + "Failed to retrieve latest release information from GitHub" + ); + } + return release; + } + + if (!version) { + throw new Error("No release version specified"); } version = version.startsWith("v") ? version : "v" + version; From ee31dd3d13b1764bf34f4046c4539358ae93dd41 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 10:56:42 +0200 Subject: [PATCH 03/15] Remove badges from README header (#1117) The badges were retired --- stylua-vscode/README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/stylua-vscode/README.md b/stylua-vscode/README.md index 16e00e2fd..5d5212598 100644 --- a/stylua-vscode/README.md +++ b/stylua-vscode/README.md @@ -1,8 +1,5 @@ # StyLua VSCode Extension -[![](https://img.shields.io/visual-studio-marketplace/v/JohnnyMorganz.stylua?color=374151&label=Visual%20Studio%20Marketplace&labelColor=000&logo=visual-studio-code&logoColor=0098FF)](https://marketplace.visualstudio.com/items?itemName=JohnnyMorganz.stylua) -[![](https://img.shields.io/visual-studio-marketplace/v/JohnnyMorganz.stylua?color=374151&label=Open%20VSX%20Registry&labelColor=000&logo=data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPHN2ZyB2aWV3Qm94PSI0LjYgNSA5Ni4yIDEyMi43IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogIDxwYXRoIGQ9Ik0zMCA0NC4yTDUyLjYgNUg3LjN6TTQuNiA4OC41aDQ1LjNMMjcuMiA0OS40em01MSAwbDIyLjYgMzkuMiAyMi42LTM5LjJ6IiBmaWxsPSIjYzE2MGVmIi8+CiAgPHBhdGggZD0iTTUyLjYgNUwzMCA0NC4yaDQ1LjJ6TTI3LjIgNDkuNGwyMi43IDM5LjEgMjIuNi0zOS4xem01MSAwTDU1LjYgODguNWg0NS4yeiIgZmlsbD0iI2E2MGVlNSIvPgo8L3N2Zz4=&logoColor=0098FF)](https://open-vsx.org/extension/JohnnyMorganz/stylua) - StyLua is a deterministic code formatter for Lua 5.1, 5.2, 5.3, 5.4, LuaJIT and [Luau](https://luau.org/), built using [full-moon](https://github.com/Kampfkarren/full-moon). StyLua is inspired by the likes of [prettier](https://github.com/prettier/prettier), it parses your Lua codebase, and prints it back out from scratch, enforcing a consistent code style. From 194cc99b054303ae0538b545757035c8705229b4 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 10:59:47 +0200 Subject: [PATCH 04/15] VSCode: Fix ENOENT causing file to be emptied when StyLua binary is missing (#1116) * Fix ENOENT causing file to be emptied when StyLua binary is missing The child process error event was registered as "err" instead of the correct "error", so spawn failures (e.g. ENOENT when the binary does not exist) were never caught. The stdout close handler would then resolve the Promise with an empty string, causing the extension to replace the entire document with empty content. * Add regression test for ENOENT causing file to be emptied Verifies that formatCode rejects (rather than resolves with an empty string) when the StyLua binary path does not exist. * Update VS Code extension changelog for ENOENT file-deletion fix * Move ENOENT changelog entry below existing unreleased entry --- stylua-vscode/CHANGELOG.md | 1 + stylua-vscode/src/stylua.ts | 9 ++++++-- stylua-vscode/src/test/suite/stylua.test.ts | 24 +++++++++++++++++++++ 3 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 stylua-vscode/src/test/suite/stylua.test.ts diff --git a/stylua-vscode/CHANGELOG.md b/stylua-vscode/CHANGELOG.md index 766e2fcf9..6a575761f 100644 --- a/stylua-vscode/CHANGELOG.md +++ b/stylua-vscode/CHANGELOG.md @@ -14,6 +14,7 @@ To view the changelog of the StyLua binary, see [here](https://github.com/Johnny ### Fixed - Fixed spurious "No release version matches v." error when GitHub API returns a non-OK response (e.g. rate limiting). The extension no longer shows a bogus update prompt in this case +- Fixed file being emptied when StyLua binary is missing (ENOENT). The child process error event was registered under the wrong name, causing spawn failures to be silently swallowed and the document to be replaced with empty content (#1001) ## [1.7.1] - 2024-11-17 diff --git a/stylua-vscode/src/stylua.ts b/stylua-vscode/src/stylua.ts index 47068ab7f..133ed4369 100644 --- a/stylua-vscode/src/stylua.ts +++ b/stylua-vscode/src/stylua.ts @@ -59,9 +59,13 @@ export function formatCode( resolve(output); }); child.stderr.on("data", (data) => reject(data.toString())); - child.on("err", (err) => reject("Failed to start StyLua")); + child.on("error", (err) => + reject(`Failed to start StyLua: ${err.message}`) + ); + child.stdin.on("error", () => { + // Suppress EPIPE when the process failed to spawn and stdin is already closed + }); - // Write our code to stdin child.stdin.write(code); child.stdin.end(); }); @@ -81,6 +85,7 @@ export function executeStylua( (err, stdout) => { if (err) { reject(err); + return; } resolve(stdout); } diff --git a/stylua-vscode/src/test/suite/stylua.test.ts b/stylua-vscode/src/test/suite/stylua.test.ts new file mode 100644 index 000000000..0f2195de3 --- /dev/null +++ b/stylua-vscode/src/test/suite/stylua.test.ts @@ -0,0 +1,24 @@ +import * as assert from "assert"; +import * as vscode from "vscode"; +import { formatCode } from "../../stylua"; + +suite("formatCode", () => { + let outputChannel: vscode.LogOutputChannel; + + setup(() => { + outputChannel = vscode.window.createOutputChannel("StyLua Test", { + log: true, + }); + }); + + teardown(() => { + outputChannel.dispose(); + }); + + // Regression test for https://github.com/JohnnyMorganz/StyLua/issues/1001 + test("rejects when the binary path does not exist", async () => { + await assert.rejects( + formatCode(outputChannel, "/nonexistent/path/to/stylua", "local x = 1\n") + ); + }); +}); From dfc5d9e49edf0246d5fd8163a7b7645e19f64ab0 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 11:43:17 +0200 Subject: [PATCH 05/15] Fix union/intersection types not hanging when " = " pushes line over column width (#1118) * Add snapshot test reproducing issue #1104 Both export type lines exceed the 120-column limit by 1-2 chars, but StyLua leaves them on a single line instead of hanging. The snapshot captures the current (buggy) output to be updated once the fix lands. * Fix type hanging not respecting column limit near the equal token (#1104) attempt_assigned_type_tactics was calling test_over_budget with `shape` (the column position before " = ") instead of `shape + EQUAL_TOKEN_LENGTH` (after " = "). This made the budget check 3 chars too generous, so a union/intersection type that fit without the equal sign but overflowed with it was left on one line. Fixed all three test_over_budget call sites in the function to use shape + EQUAL_TOKEN_LENGTH so the equal sign is included in the check. * Update changelog for issue #1104 fix --- CHANGELOG.md | 1 + src/formatters/luau.rs | 7 +++--- tests/inputs-luau/type-hanging-issue-1104.lua | 5 ++++ ...sts__luau@type-hanging-issue-1104.lua.snap | 23 +++++++++++++++++++ 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 tests/inputs-luau/type-hanging-issue-1104.lua create mode 100644 tests/snapshots/tests__luau@type-hanging-issue-1104.lua.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c3333057..251b7fb86 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed npm publishing by bumping Node.js from 16 to 22 in CI workflows to support npm trusted publishing +- Luau: Fixed union/intersection type definitions not being hung when the type alone fits within the column width but the full line (including ` = `) exceeds it ([#1104](https://github.com/JohnnyMorganz/StyLua/issues/1104)) ## [2.4.1] - 2026-04-06 diff --git a/src/formatters/luau.rs b/src/formatters/luau.rs index ddf1da8ba..60b7ab4a5 100644 --- a/src/formatters/luau.rs +++ b/src/formatters/luau.rs @@ -1152,14 +1152,15 @@ fn attempt_assigned_type_tactics( // If we can hang the type definition, and its over width, then lets try doing so if can_hang_type(type_info) && (must_hang - || shape.test_over_budget(&strip_trailing_trivia(&singleline_type_definition)) + || (shape + EQUAL_TOKEN_LENGTH) + .test_over_budget(&strip_trailing_trivia(&singleline_type_definition)) || spans_multiple_lines(&singleline_type_definition)) { // If we should hug the type, then lets check out the proper definition and see if it fits if !must_hang && should_hug_type(type_info) && !is_union_of_tables(type_info) - && !shape.test_over_budget(&proper_type_definition) + && !(shape + EQUAL_TOKEN_LENGTH).test_over_budget(&proper_type_definition) { type_definition = proper_type_definition; } else { @@ -1173,7 +1174,7 @@ fn attempt_assigned_type_tactics( } else { // Test whether the proper formatting goes over the column width // If so, hang at the equals token and reformat - if shape.test_over_budget(&proper_type_definition) { + if (shape + EQUAL_TOKEN_LENGTH).test_over_budget(&proper_type_definition) { // Hang at the equal token equal_token = hang_equal_token(ctx, &equal_token, shape, true); diff --git a/tests/inputs-luau/type-hanging-issue-1104.lua b/tests/inputs-luau/type-hanging-issue-1104.lua new file mode 100644 index 000000000..2887e396d --- /dev/null +++ b/tests/inputs-luau/type-hanging-issue-1104.lua @@ -0,0 +1,5 @@ +type MonsterMembers = { string } +type MonsterClass = { string } +export type MonsterObject = typeof(setmetatable({} :: MonsterMembers, {} :: MonsterClass)) & HeroObject & AnotherComponent + +export type CameraState = "Basic" | "OctulusBeam" | "OctulusFlight" | "LockCFrame" | "Aim" | "Default" | "Flying" | "Run" diff --git a/tests/snapshots/tests__luau@type-hanging-issue-1104.lua.snap b/tests/snapshots/tests__luau@type-hanging-issue-1104.lua.snap new file mode 100644 index 000000000..dee92008a --- /dev/null +++ b/tests/snapshots/tests__luau@type-hanging-issue-1104.lua.snap @@ -0,0 +1,23 @@ +--- +source: tests/tests.rs +assertion_line: 36 +expression: "format(&contents, LuaVersion::Luau)" +input_file: tests/inputs-luau/type-hanging-issue-1104.lua +--- +type MonsterMembers = { string } +type MonsterClass = { string } +export type MonsterObject = + typeof(setmetatable({} :: MonsterMembers, {} :: MonsterClass)) + & HeroObject + & AnotherComponent + +export type CameraState = + "Basic" + | "OctulusBeam" + | "OctulusFlight" + | "LockCFrame" + | "Aim" + | "Default" + | "Flying" + | "Run" + From 8b22575e14724e951f3c052815a5d549071e2518 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 13:14:06 +0200 Subject: [PATCH 06/15] Target first attribute at_sign in stmt_remove_leading_newlines for LocalFunction/ConstFunction (#1115) * fix: target first attribute at_sign in stmt_remove_leading_newlines for LocalFunction/ConstFunction When a LocalFunction or ConstFunction has a leading Luau attribute (e.g. @native), the actual first token of the statement is the attribute's at_sign, not the local/const keyword. stmt_remove_leading_newlines was targeting the wrong token, leaving stray newlines before the attribute at the start of a block. Fixes #1109 * simplify: extract strip_attribute_leading_newlines helper, avoid allocation on no-attribute path - Deduplicate the identical 6-line attribute-stripping logic from LocalFunction and ConstFunction arms into a single helper function - Use peekable iterator so no Vec is allocated when the function has no attributes (the common case) - Make both arms use a consistent if-let pattern instead of early-return vs if/else - Remove redundant comment from test input file * refactor: use next() to own first attribute, eliminating index and clone Replace peek()+collect()+[0]+clone() with cloned().next()? which takes the first element as an owned value so with_at_sign can consume it directly. * style: rustfmt * docs: add changelog entry for #1109 --- CHANGELOG.md | 1 + src/formatters/block.rs | 54 ++++++++++++++----- tests/inputs-luau/attributes-4.lua | 13 +++++ .../tests__luau@attributes-4.lua.snap | 15 ++++++ 4 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 tests/inputs-luau/attributes-4.lua create mode 100644 tests/snapshots/tests__luau@attributes-4.lua.snap diff --git a/CHANGELOG.md b/CHANGELOG.md index 251b7fb86..3e88d4fa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed npm publishing by bumping Node.js from 16 to 22 in CI workflows to support npm trusted publishing - Luau: Fixed union/intersection type definitions not being hung when the type alone fits within the column width but the full line (including ` = `) exceeds it ([#1104](https://github.com/JohnnyMorganz/StyLua/issues/1104)) +- Luau: Fixed stray leading newlines not being removed from `local function` and `const function` declarations that have attributes (e.g. `@native`) at the start of a block ([#1109](https://github.com/JohnnyMorganz/StyLua/issues/1109)) ## [2.4.1] - 2026-04-06 diff --git a/src/formatters/block.rs b/src/formatters/block.rs index f813f913a..a8aa564c4 100644 --- a/src/formatters/block.rs +++ b/src/formatters/block.rs @@ -18,6 +18,8 @@ use crate::{ }, shape::Shape, }; +#[cfg(feature = "luau")] +use full_moon::ast::luau::LuauAttribute; use full_moon::ast::{ punctuated::Punctuated, Block, Expression, LastStmt, Prefix, Return, Stmt, Var, }; @@ -317,6 +319,20 @@ fn var_remove_leading_newline(var: Var) -> Var { } } +#[cfg(feature = "luau")] +fn strip_attribute_leading_newlines<'a>( + attributes: impl Iterator, +) -> Option> { + let mut cloned = attributes.cloned(); + let first = cloned.next()?; + let at_sign = first.at_sign(); + let leading_trivia = trivia_remove_leading_newlines(at_sign.leading_trivia().collect()); + let new_at_sign = at_sign.update_leading_trivia(FormatTriviaType::Replace(leading_trivia)); + let mut result = vec![first.with_at_sign(new_at_sign)]; + result.extend(cloned); + Some(result) +} + fn stmt_remove_leading_newlines(stmt: Stmt) -> Stmt { match stmt { Stmt::Assignment(assignment) => { @@ -363,12 +379,19 @@ fn stmt_remove_leading_newlines(stmt: Stmt) -> Stmt { local_assignment.local_token(), with_local_token ), - Stmt::LocalFunction(local_function) => update_first_token!( - LocalFunction, - local_function, - local_function.local_token(), - with_local_token - ), + Stmt::LocalFunction(local_function) => { + #[cfg(feature = "luau")] + if let Some(attributes) = strip_attribute_leading_newlines(local_function.attributes()) + { + return Stmt::LocalFunction(local_function.with_attributes(attributes)); + } + update_first_token!( + LocalFunction, + local_function, + local_function.local_token(), + with_local_token + ) + } Stmt::NumericFor(numeric_for) => update_first_token!( NumericFor, numeric_for, @@ -404,12 +427,19 @@ fn stmt_remove_leading_newlines(stmt: Stmt) -> Stmt { with_const_token ), #[cfg(feature = "luau")] - Stmt::ConstFunction(const_function) => update_first_token!( - ConstFunction, - const_function, - const_function.const_token(), - with_const_token - ), + Stmt::ConstFunction(const_function) => { + if let Some(attributes) = strip_attribute_leading_newlines(const_function.attributes()) + { + Stmt::ConstFunction(const_function.with_attributes(attributes)) + } else { + update_first_token!( + ConstFunction, + const_function, + const_function.const_token(), + with_const_token + ) + } + } #[cfg(feature = "luau")] Stmt::ExportedTypeDeclaration(exported_type_declaration) => update_first_token!( diff --git a/tests/inputs-luau/attributes-4.lua b/tests/inputs-luau/attributes-4.lua new file mode 100644 index 000000000..3abfdfb85 --- /dev/null +++ b/tests/inputs-luau/attributes-4.lua @@ -0,0 +1,13 @@ +do + +@native +local function foo() +end +end + +do + +@native +const function bar() +end +end diff --git a/tests/snapshots/tests__luau@attributes-4.lua.snap b/tests/snapshots/tests__luau@attributes-4.lua.snap new file mode 100644 index 000000000..a7c553ea1 --- /dev/null +++ b/tests/snapshots/tests__luau@attributes-4.lua.snap @@ -0,0 +1,15 @@ +--- +source: tests/tests.rs +assertion_line: 36 +expression: "format(&contents, LuaVersion::Luau)" +input_file: tests/inputs-luau/attributes-4.lua +--- +do + @native + local function foo() end +end + +do + @native + const function bar() end +end From f8ad1f421dba42aebd317c8a8c416a10db3270c7 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 16:27:22 +0200 Subject: [PATCH 07/15] npm: replace postinstall download with platform-specific optional packages (#1119) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(npm): replace postinstall download with platform-specific optional packages Eliminates all 5 npm dependencies (92 transitive packages) and the recurring dependabot noise they generate. npm now installs only the pre-built binary for the current platform via optionalDependencies, matching the pattern used by esbuild, Biome, and Prettier. - Add five platform packages under stylua-npm-bin/platforms/ - Simplify run.js to resolve the binary from the installed platform package - Remove binary.js / install.js / uninstall.js and their postinstall hooks - Update release workflow to wait for all binaries, then publish each platform package before publishing the main package - Update CI smoke test to download the released binary, pack the platform package locally, and install it via file: reference for testing * chore(npm): add minimal package-lock.json Replaces the 1,691-line lockfile for 92 packages with a 26-line lockfile reflecting the zero-dependency main package. * fix(npm-bin): drop redundant cwd, guard against null exit status spawnSync defaults cwd to process.cwd() so the explicit arg was noise. result.status is null when the child is signal-killed; process.exit(null) coerces to 0, hiding the failure — use ?? 1 as fallback. * fix(npm-bin): align with upstream esbuild/biome patterns - Add publishConfig (access:public, provenance:true) to all packages, replacing --access public CLI flags and enabling SLSA provenance - Add files:["run.js"] to main package to prevent platforms/ directories (with extracted binaries) from landing in the published tarball - Add preferUnplugged:true to platform packages for Yarn PnP compatibility - Use process.exitCode instead of process.exit() for the final exit, allowing cleanup handlers to run (matches Biome pattern) - Remove package-lock.json from git (no deps to lock; esbuild/biome don't commit one either); add stylua-npm-bin/.gitignore - Update release.py: drop npm install step and lock file from git add, add platform package.json files to version bump and git add - Update CHANGELOG.md - Rewrite smoketest to install both packages into a fresh test-install/ directory, mirroring how a real user install looks (sibling packages in node_modules/), and test via the npm bin symlink * chore: polish based on review feedback - Consolidate five per-platform .gitignore files into one stylua-npm-bin/.gitignore - Simplify smoketest download to a single bash step (Windows runners support bash) - Use npx to invoke stylua in smoketest instead of reaching into node_modules/.bin - Tighten CHANGELOG wording * fix(ci): install platform and main packages in single npm install Running two separate npm install commands caused npm 7+ to prune the platform package during the second install: when building the ideal tree for the main package with --no-optional, the already-installed platform package appeared extraneous and was removed. Installing both packages together in one command keeps both in the ideal tree so npm doesn't prune the platform binary. * fix(ci): drop --no-optional from smoketest npm install The os/cpu fields on the platform packages already prevent npm from installing mismatched platform packages; on a macOS arm64 runner, only @johnnymorganz/stylua-bin-darwin-arm64 matches. The explicitly provided $PLATFORM_TGZ satisfies that optional dependency locally, so no registry lookup is needed. optionalDependencies failures are non-fatal anyway. Removing --no-optional also clears the deprecation warning (replaced by --omit=optional in npm 7+). --- .github/release.py | 28 +- .github/workflows/npm-build.yml | 54 +- .github/workflows/release.yml | 47 +- CHANGELOG.md | 4 + stylua-npm-bin/.gitignore | 5 +- stylua-npm-bin/binary.js | 147 -- stylua-npm-bin/install.js | 4 - stylua-npm-bin/package-lock.json | 1691 ----------------- stylua-npm-bin/package.json | 21 +- .../platforms/darwin-arm64/package.json | 24 + .../platforms/darwin-x64/package.json | 24 + .../platforms/linux-arm64/package.json | 24 + .../platforms/linux-x64/package.json | 24 + .../platforms/win32-x64/package.json | 24 + stylua-npm-bin/run.js | 41 +- stylua-npm-bin/uninstall.js | 4 - 16 files changed, 291 insertions(+), 1875 deletions(-) delete mode 100644 stylua-npm-bin/binary.js delete mode 100644 stylua-npm-bin/install.js delete mode 100644 stylua-npm-bin/package-lock.json create mode 100644 stylua-npm-bin/platforms/darwin-arm64/package.json create mode 100644 stylua-npm-bin/platforms/darwin-x64/package.json create mode 100644 stylua-npm-bin/platforms/linux-arm64/package.json create mode 100644 stylua-npm-bin/platforms/linux-x64/package.json create mode 100644 stylua-npm-bin/platforms/win32-x64/package.json delete mode 100644 stylua-npm-bin/uninstall.js diff --git a/.github/release.py b/.github/release.py index c7c055fb5..611f2b009 100755 --- a/.github/release.py +++ b/.github/release.py @@ -12,8 +12,11 @@ CARGO_FILE = "Cargo.toml" CARGO_LOCK_FILE = "Cargo.lock" PACKAGE_JSON_FILE = "stylua-npm-bin/package.json" -PACKAGE_LOCK_JSON_FILE = "stylua-npm-bin/package-lock.json" WASM_PACKAGE_JSON_FILE = "wasm/package.json" +PLATFORM_PACKAGE_JSON_FILES = [ + f"stylua-npm-bin/platforms/{p}/package.json" + for p in ["linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64", "win32-x64"] +] assert len(sys.argv) == 2, "Usage: .github/release.py " VERSION = sys.argv[1] @@ -83,15 +86,23 @@ with open(README_FILE, "w") as file: file.write(new_readme_text) -# Update version in package.json -package_json_data = None +# Update version in package.json and its optionalDependencies with open(PACKAGE_JSON_FILE, "r") as t: package_json_data = json.load(t) - package_json_data["version"] = VERSION - +package_json_data["version"] = VERSION +for dep in package_json_data.get("optionalDependencies", {}): + package_json_data["optionalDependencies"][dep] = VERSION with open(PACKAGE_JSON_FILE, "w") as t: json.dump(package_json_data, t) +# Update version in platform package.json files +for platform_pkg in PLATFORM_PACKAGE_JSON_FILES: + with open(platform_pkg, "r") as t: + data = json.load(t) + data["version"] = VERSION + with open(platform_pkg, "w") as t: + json.dump(data, t) + # Update version in wasm package.json package_json_data = None with open(WASM_PACKAGE_JSON_FILE, "r") as t: @@ -101,10 +112,8 @@ with open(WASM_PACKAGE_JSON_FILE, "w") as t: json.dump(package_json_data, t) -# Update lockfiles +# Update Cargo lockfile subprocess.run(["cargo", "check"], check=True) -# we expect this command to fail: -subprocess.run(["npm", "install"], cwd="stylua-npm-bin", check=False) # Run prettier subprocess.run( @@ -116,6 +125,7 @@ CHANGELOG_FILE, PACKAGE_JSON_FILE, WASM_PACKAGE_JSON_FILE, + *PLATFORM_PACKAGE_JSON_FILES, ], check=True, ) @@ -128,10 +138,10 @@ CHANGELOG_FILE, README_FILE, PACKAGE_JSON_FILE, - PACKAGE_LOCK_JSON_FILE, WASM_PACKAGE_JSON_FILE, CARGO_FILE, CARGO_LOCK_FILE, + *PLATFORM_PACKAGE_JSON_FILES, ], check=True, ) diff --git a/.github/workflows/npm-build.yml b/.github/workflows/npm-build.yml index b9f0e1e4c..68538d6bd 100644 --- a/.github/workflows/npm-build.yml +++ b/.github/workflows/npm-build.yml @@ -11,17 +11,57 @@ jobs: smoketest: strategy: matrix: - os: [macos-latest, ubuntu-latest, windows-latest] + include: + - os: ubuntu-latest + platform-dir: linux-x64 + gh-artifact: stylua-linux-x86_64 + - os: macos-latest + platform-dir: darwin-arm64 + gh-artifact: stylua-macos-aarch64 + - os: windows-latest + platform-dir: win32-x64 + gh-artifact: stylua-windows-x86_64 runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 + - name: Setup node uses: actions/setup-node@v4 with: node-version: 22.x - - name: Attempt install - run: npm install --package-locked - working-directory: stylua-npm-bin - - name: Attempt run - run: npx . --version - working-directory: stylua-npm-bin + + - name: Get release version + id: version + shell: bash + run: echo "tag=v$(node -p "require('./stylua-npm-bin/package.json').version")" >> $GITHUB_OUTPUT + + - name: Download and extract release binary + shell: bash + run: | + curl -fsSL \ + "https://github.com/johnnymorganz/stylua/releases/download/${{ steps.version.outputs.tag }}/${{ matrix.gh-artifact }}.zip" \ + -o release.zip + unzip release.zip -d "stylua-npm-bin/platforms/${{ matrix.platform-dir }}/" + rm release.zip + + - name: Pack platform and main packages + shell: bash + run: | + cd "$GITHUB_WORKSPACE/stylua-npm-bin/platforms/${{ matrix.platform-dir }}" + npm pack + echo "PLATFORM_TGZ=$(pwd)/$(ls *.tgz)" >> $GITHUB_ENV + + cd "$GITHUB_WORKSPACE/stylua-npm-bin" + npm pack + echo "MAIN_TGZ=$(pwd)/$(ls *.tgz)" >> $GITHUB_ENV + + - name: Install in fresh test project + shell: bash + run: | + mkdir -p "$GITHUB_WORKSPACE/test-install" + cd "$GITHUB_WORKSPACE/test-install" + npm install --no-save "$PLATFORM_TGZ" "$MAIN_TGZ" + + - name: Test via npx + working-directory: ${{ github.workspace }}/test-install + run: npx stylua --version diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 25d1b97b1..10e17b0de 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -138,6 +138,7 @@ jobs: release_npm_bin: name: Publish binary to npm + needs: [release] runs-on: ubuntu-latest permissions: contents: read @@ -156,7 +157,51 @@ jobs: cp README.md stylua-npm-bin/ cp LICENSE.md stylua-npm-bin/ - - name: Publish to npm + - name: Download Linux x64 binary + uses: actions/download-artifact@v4 + with: + name: stylua-linux-x86_64 + path: /tmp/artifacts/linux-x64 + + - name: Download Linux arm64 binary + uses: actions/download-artifact@v4 + with: + name: stylua-linux-aarch64 + path: /tmp/artifacts/linux-arm64 + + - name: Download macOS x64 binary + uses: actions/download-artifact@v4 + with: + name: stylua-macos-x86_64 + path: /tmp/artifacts/darwin-x64 + + - name: Download macOS arm64 binary + uses: actions/download-artifact@v4 + with: + name: stylua-macos-aarch64 + path: /tmp/artifacts/darwin-arm64 + + - name: Download Windows x64 binary + uses: actions/download-artifact@v4 + with: + name: stylua-windows-x86_64 + path: /tmp/artifacts/win32-x64 + + - name: Extract binaries into platform packages + run: | + for PLATFORM in linux-x64 linux-arm64 darwin-x64 darwin-arm64 win32-x64; do + unzip -o /tmp/artifacts/$PLATFORM/release.zip \ + -d "$GITHUB_WORKSPACE/stylua-npm-bin/platforms/$PLATFORM/" + done + + - name: Publish platform packages to npm + run: | + for PLATFORM in linux-x64 linux-arm64 darwin-x64 darwin-arm64 win32-x64; do + cd "$GITHUB_WORKSPACE/stylua-npm-bin/platforms/$PLATFORM" + npm publish + done + + - name: Publish main package to npm working-directory: stylua-npm-bin run: npm publish diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e88d4fa7..071f58953 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Luau: Added support for `const` variable assignments (`const x = 1`) and `const function` declarations ([#1102](https://github.com/JohnnyMorganz/StyLua/issues/1102)) +### Changed + +- The npm package `@johnnymorganz/stylua-bin` now ships pre-built binaries via platform-specific optional packages (`@johnnymorganz/stylua-bin-linux-x64`, `-linux-arm64`, `-darwin-x64`, `-darwin-arm64`, `-win32-x64`) instead of downloading the binary at install time. This makes the packages self-contained with no extra dependencies. + ### Fixed - Fixed npm publishing by bumping Node.js from 16 to 22 in CI workflows to support npm trusted publishing diff --git a/stylua-npm-bin/.gitignore b/stylua-npm-bin/.gitignore index 204ade558..2928b155b 100644 --- a/stylua-npm-bin/.gitignore +++ b/stylua-npm-bin/.gitignore @@ -1,2 +1,5 @@ node_modules/ -bin/ +package-lock.json +*.tgz +platforms/*/stylua +platforms/*/stylua.exe diff --git a/stylua-npm-bin/binary.js b/stylua-npm-bin/binary.js deleted file mode 100644 index c7cd5e148..000000000 --- a/stylua-npm-bin/binary.js +++ /dev/null @@ -1,147 +0,0 @@ -// Based off https://github.com/cloudflare/binary-install -// Licensed under MIT -const os = require("os"); -const axios = require("axios"); -const unzip = require("unzipper"); -const rimraf = require("rimraf"); -const { ProxyAgent } = require('proxy-agent'); -const { join } = require("path"); -const { existsSync, mkdirSync, createWriteStream } = require("fs"); -const { spawnSync } = require("child_process"); - -const { version: VERSION, repository: REPOSITORY } = require("./package.json"); - -const SUPPORTED_PLATFORMS = [ - { - platform: "win32", - arch: "x64", - name: "stylua-windows-x86_64", - }, - { - platform: "darwin", - arch: "x64", - name: "stylua-macos-x86_64", - }, - { - platform: "darwin", - arch: "arm64", - name: "stylua-macos-aarch64", - }, - { - platform: "linux", - arch: "x64", - name: "stylua-linux-x86_64", - }, - { - platform: "linux", - arch: "arm64", - name: "stylua-linux-aarch64", - }, -]; - -const error = (msg) => { - console.error(msg); - process.exit(1); -}; - -const downloadArtifact = (url, location) => { - const agent = new ProxyAgent(); - return new Promise((resolve, reject) => { - axios - // proxy: false is needed, otherwise axios is trying to overwrite the agent - // See https://github.com/axios/axios/issues/4531 - .create({ proxy: false, httpAgent: agent, httpsAgent: agent }) - .get(url, { responseType: "stream" }) - .then((res) => res.data.pipe(unzip.Parse())) - .then((stream) => { - stream.on("entry", (entry) => { - // if (entry.path !== outputFilename) { - // entry.autodrain(); - // return; - // } - - entry.pipe(location).on("finish", resolve).on("error", reject); - }); - }) - .catch(reject); - }); -}; - -const getDownloadUrl = () => { - const platform = os.platform(); - const arch = os.arch(); - const supportedInfo = SUPPORTED_PLATFORMS.find( - (info) => info.platform === platform && info.arch === arch - ); - - if (!supportedInfo) { - error(`Your platform [${platform} ${arch}] is currently unsupported.`); - } - - return `${REPOSITORY.url}/releases/download/v${VERSION}/${supportedInfo.name}.zip`; -}; - -const getInstallDirectory = () => { - const path = join(__dirname, "bin"); - if (!existsSync(path)) { - mkdirSync(path, { recursive: true }); - } - return path; -}; - -const getBinaryPath = () => { - const dir = getInstallDirectory(); - - if (os.platform() === "win32") { - return join(dir, "stylua.exe"); - } else { - return join(dir, "stylua"); - } -}; - -const install = () => { - const url = getDownloadUrl(); - console.log(`Downloading release from ${url}`); - - if (existsSync(getBinaryPath())) { - rimraf.sync(getBinaryPath()); - } - - const location = createWriteStream(getBinaryPath(), { - mode: 0o755, - }); - - return downloadArtifact(url, location) - .then(() => console.log("StyLua has been installed!")) - .catch((e) => { - error(`Error fetching release: ${e.message}`); - }); -}; - -const uninstall = () => { - if (existsSync(getInstallDirectory())) { - rimraf.sync(getInstallDirectory()); - } - console.log("StyLua has been uninstalled"); -}; - -const run = () => { - const binaryPath = getBinaryPath(); - - const [, , ...args] = process.argv; - const options = { cwd: process.cwd(), stdio: "inherit" }; - - const result = spawnSync(binaryPath, args, options); - - if (result.error) { - error(result.error); - } - - process.exit(result.status); -}; - -module.exports = { - install, - uninstall, - run, -}; diff --git a/stylua-npm-bin/install.js b/stylua-npm-bin/install.js deleted file mode 100644 index 9b5bba1ba..000000000 --- a/stylua-npm-bin/install.js +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env node - -const { install } = require("./binary"); -install(); diff --git a/stylua-npm-bin/package-lock.json b/stylua-npm-bin/package-lock.json deleted file mode 100644 index 5dd61257b..000000000 --- a/stylua-npm-bin/package-lock.json +++ /dev/null @@ -1,1691 +0,0 @@ -{ - "name": "@johnnymorganz/stylua-bin", - "version": "2.4.1", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@johnnymorganz/stylua-bin", - "version": "2.4.1", - "hasInstallScript": true, - "license": "MPL-2.0", - "dependencies": { - "axios": "^1.6.0", - "node-fetch": "^3.2.10", - "proxy-agent": "^6.4.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" - }, - "bin": { - "stylua": "run.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/axios": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", - "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", - "dependencies": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/basic-ftp": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.2.tgz", - "integrity": "sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" - }, - "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "dependencies": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20 || >= 14.13" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": { - "fetch-blob": "^3.1.2" - }, - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", - "dependencies": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/get-uri/node_modules/data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" - }, - "node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", - "dependencies": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "dependencies": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "dependencies": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "engines": { - "node": "*" - } - }, - "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unzipper": { - "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - }, - "dependencies": { - "@tootallnate/quickjs-emscripten": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", - "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" - }, - "agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "requires": { - "debug": "^4.3.4" - } - }, - "ast-types": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", - "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", - "requires": { - "tslib": "^2.0.1" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "axios": { - "version": "1.13.5", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", - "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", - "requires": { - "follow-redirects": "^1.15.11", - "form-data": "^4.0.5", - "proxy-from-env": "^1.1.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "basic-ftp": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.2.2.tgz", - "integrity": "sha512-1tDrzKsdCg70WGvbFss/ulVAxupNauGnOlgpyjKzeQxzyllBLS0CGLV7tjIXTK3ZQA9/FBEm9qyFFN1bciA6pw==" - }, - "big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==" - }, - "brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==" - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" - }, - "call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - } - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "data-uri-to-buffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", - "integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA==" - }, - "debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "requires": { - "ms": "^2.1.3" - } - }, - "degenerator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", - "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", - "requires": { - "ast-types": "^0.13.4", - "escodegen": "^2.1.0", - "esprima": "^4.0.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" - }, - "dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "requires": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - } - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "requires": { - "readable-stream": "^2.0.2" - } - }, - "es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "requires": { - "es-errors": "^1.3.0" - } - }, - "es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "requires": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - } - }, - "escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "requires": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "fetch-blob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "requires": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - } - }, - "follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==" - }, - "form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - } - }, - "formdata-polyfill": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "requires": { - "fetch-blob": "^3.1.2" - } - }, - "fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "requires": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - } - }, - "get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "requires": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - } - }, - "get-uri": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", - "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", - "requires": { - "basic-ftp": "^5.0.2", - "data-uri-to-buffer": "^6.0.2", - "debug": "^4.3.4", - "fs-extra": "^11.2.0" - }, - "dependencies": { - "data-uri-to-buffer": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", - "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==" - } - } - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" - }, - "has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "requires": { - "has-symbols": "^1.0.3" - } - }, - "hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "requires": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - } - }, - "https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", - "requires": { - "agent-base": "^7.0.2", - "debug": "4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ip-address": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", - "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", - "requires": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==" - }, - "lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" - }, - "math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "netmask": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", - "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" - }, - "node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" - }, - "node-fetch": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "requires": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "pac-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", - "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", - "requires": { - "@tootallnate/quickjs-emscripten": "^0.23.0", - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "get-uri": "^6.0.1", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.5", - "pac-resolver": "^7.0.1", - "socks-proxy-agent": "^8.0.4" - } - }, - "pac-resolver": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", - "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", - "requires": { - "degenerator": "^5.0.0", - "netmask": "^2.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "proxy-agent": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", - "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", - "requires": { - "agent-base": "^7.0.2", - "debug": "^4.3.4", - "http-proxy-agent": "^7.0.1", - "https-proxy-agent": "^7.0.3", - "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.1", - "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.2" - } - }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" - }, - "socks": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", - "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", - "requires": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", - "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", - "requires": { - "agent-base": "^7.1.1", - "debug": "^4.3.4", - "socks": "^2.8.3" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - }, - "sprintf-js": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", - "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" - }, - "tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" - }, - "universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" - }, - "unzipper": { - "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", - "requires": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "web-streams-polyfill": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - } -} diff --git a/stylua-npm-bin/package.json b/stylua-npm-bin/package.json index feab3774b..b98a09193 100644 --- a/stylua-npm-bin/package.json +++ b/stylua-npm-bin/package.json @@ -8,9 +8,12 @@ "engines": { "node": ">=10" }, - "scripts": { - "postinstall": "node ./install.js", - "preuninstall": "node ./uninstall.js" + "files": [ + "run.js" + ], + "publishConfig": { + "access": "public", + "provenance": true }, "repository": { "type": "git", @@ -29,11 +32,11 @@ "url": "https://github.com/johnnymorganz/stylua/issues" }, "homepage": "https://github.com/johnnymorganz/stylua#readme", - "dependencies": { - "axios": "^1.6.0", - "node-fetch": "^3.2.10", - "proxy-agent": "^6.4.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" + "optionalDependencies": { + "@johnnymorganz/stylua-bin-linux-x64": "2.4.1", + "@johnnymorganz/stylua-bin-linux-arm64": "2.4.1", + "@johnnymorganz/stylua-bin-darwin-x64": "2.4.1", + "@johnnymorganz/stylua-bin-darwin-arm64": "2.4.1", + "@johnnymorganz/stylua-bin-win32-x64": "2.4.1" } } diff --git a/stylua-npm-bin/platforms/darwin-arm64/package.json b/stylua-npm-bin/platforms/darwin-arm64/package.json new file mode 100644 index 000000000..187c659c2 --- /dev/null +++ b/stylua-npm-bin/platforms/darwin-arm64/package.json @@ -0,0 +1,24 @@ +{ + "name": "@johnnymorganz/stylua-bin-darwin-arm64", + "version": "2.4.1", + "description": "StyLua binary for macOS arm64", + "os": [ + "darwin" + ], + "cpu": [ + "arm64" + ], + "files": [ + "stylua" + ], + "license": "MPL-2.0", + "repository": { + "type": "git", + "url": "https://github.com/johnnymorganz/stylua" + }, + "preferUnplugged": true, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/stylua-npm-bin/platforms/darwin-x64/package.json b/stylua-npm-bin/platforms/darwin-x64/package.json new file mode 100644 index 000000000..33070671f --- /dev/null +++ b/stylua-npm-bin/platforms/darwin-x64/package.json @@ -0,0 +1,24 @@ +{ + "name": "@johnnymorganz/stylua-bin-darwin-x64", + "version": "2.4.1", + "description": "StyLua binary for macOS x64", + "os": [ + "darwin" + ], + "cpu": [ + "x64" + ], + "files": [ + "stylua" + ], + "license": "MPL-2.0", + "repository": { + "type": "git", + "url": "https://github.com/johnnymorganz/stylua" + }, + "preferUnplugged": true, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/stylua-npm-bin/platforms/linux-arm64/package.json b/stylua-npm-bin/platforms/linux-arm64/package.json new file mode 100644 index 000000000..ca61aed8d --- /dev/null +++ b/stylua-npm-bin/platforms/linux-arm64/package.json @@ -0,0 +1,24 @@ +{ + "name": "@johnnymorganz/stylua-bin-linux-arm64", + "version": "2.4.1", + "description": "StyLua binary for Linux arm64", + "os": [ + "linux" + ], + "cpu": [ + "arm64" + ], + "files": [ + "stylua" + ], + "license": "MPL-2.0", + "repository": { + "type": "git", + "url": "https://github.com/johnnymorganz/stylua" + }, + "preferUnplugged": true, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/stylua-npm-bin/platforms/linux-x64/package.json b/stylua-npm-bin/platforms/linux-x64/package.json new file mode 100644 index 000000000..d57db7b75 --- /dev/null +++ b/stylua-npm-bin/platforms/linux-x64/package.json @@ -0,0 +1,24 @@ +{ + "name": "@johnnymorganz/stylua-bin-linux-x64", + "version": "2.4.1", + "description": "StyLua binary for Linux x64", + "os": [ + "linux" + ], + "cpu": [ + "x64" + ], + "files": [ + "stylua" + ], + "license": "MPL-2.0", + "repository": { + "type": "git", + "url": "https://github.com/johnnymorganz/stylua" + }, + "preferUnplugged": true, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/stylua-npm-bin/platforms/win32-x64/package.json b/stylua-npm-bin/platforms/win32-x64/package.json new file mode 100644 index 000000000..84449b1de --- /dev/null +++ b/stylua-npm-bin/platforms/win32-x64/package.json @@ -0,0 +1,24 @@ +{ + "name": "@johnnymorganz/stylua-bin-win32-x64", + "version": "2.4.1", + "description": "StyLua binary for Windows x64", + "os": [ + "win32" + ], + "cpu": [ + "x64" + ], + "files": [ + "stylua.exe" + ], + "license": "MPL-2.0", + "repository": { + "type": "git", + "url": "https://github.com/johnnymorganz/stylua" + }, + "preferUnplugged": true, + "publishConfig": { + "access": "public", + "provenance": true + } +} diff --git a/stylua-npm-bin/run.js b/stylua-npm-bin/run.js index 847da530e..76473b918 100644 --- a/stylua-npm-bin/run.js +++ b/stylua-npm-bin/run.js @@ -1,4 +1,41 @@ #!/usr/bin/env node +"use strict"; -const { run } = require("./binary"); -run(); +const { spawnSync } = require("child_process"); +const path = require("path"); + +const PLATFORMS = { + "linux-x64": { pkg: "@johnnymorganz/stylua-bin-linux-x64", bin: "stylua" }, + "linux-arm64": { pkg: "@johnnymorganz/stylua-bin-linux-arm64", bin: "stylua" }, + "darwin-x64": { pkg: "@johnnymorganz/stylua-bin-darwin-x64", bin: "stylua" }, + "darwin-arm64": { pkg: "@johnnymorganz/stylua-bin-darwin-arm64", bin: "stylua" }, + "win32-x64": { pkg: "@johnnymorganz/stylua-bin-win32-x64", bin: "stylua.exe" }, +}; + +const key = `${process.platform}-${process.arch}`; +const platform = PLATFORMS[key]; + +if (!platform) { + console.error(`Unsupported platform: ${key}`); + process.exit(1); +} + +let binPath; +try { + const pkgDir = path.dirname(require.resolve(`${platform.pkg}/package.json`)); + binPath = path.join(pkgDir, platform.bin); +} catch { + console.error( + `Could not find the StyLua binary for your platform (${key}).\n` + + `Try reinstalling @johnnymorganz/stylua-bin.` + ); + process.exit(1); +} + +const result = spawnSync(binPath, process.argv.slice(2), { stdio: "inherit" }); + +if (result.error) { + console.error(result.error); +} + +process.exitCode = result.error ? 1 : (result.status ?? 1); diff --git a/stylua-npm-bin/uninstall.js b/stylua-npm-bin/uninstall.js deleted file mode 100644 index 56088adbf..000000000 --- a/stylua-npm-bin/uninstall.js +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env node - -const { uninstall } = require("./binary"); -uninstall(); From 031e454edc624c9b0f2283e2b82f426853e86d54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 16 May 2026 16:39:25 +0200 Subject: [PATCH 08/15] Bump brace-expansion from 2.0.2 to 2.1.0 in /stylua-vscode (#1120) Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 2.0.2 to 2.1.0. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/v2.0.2...v2.1.0) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 2.1.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- stylua-vscode/package-lock.json | 48 ++++++++++++++++----------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/stylua-vscode/package-lock.json b/stylua-vscode/package-lock.json index 00e7e232f..85a7b3a3f 100644 --- a/stylua-vscode/package-lock.json +++ b/stylua-vscode/package-lock.json @@ -578,9 +578,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" @@ -674,9 +674,9 @@ "dev": true }, "node_modules/@vscode/test-cli/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" @@ -1181,9 +1181,9 @@ "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2928,9 +2928,9 @@ } }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "dependencies": { "balanced-match": "^1.0.0" @@ -4872,9 +4872,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -4944,9 +4944,9 @@ "dev": true }, "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -5352,9 +5352,9 @@ "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" }, "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6616,9 +6616,9 @@ }, "dependencies": { "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "requires": { "balanced-match": "^1.0.0" From acf62e7304646458b1367db35ad8ed362ee6dd60 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 16:58:01 +0200 Subject: [PATCH 09/15] fix clippy lint on no-default-features --- src/formatters/assignment.rs | 4 +++- src/formatters/functions.rs | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/formatters/assignment.rs b/src/formatters/assignment.rs index 51c581572..18435ef5f 100644 --- a/src/formatters/assignment.rs +++ b/src/formatters/assignment.rs @@ -11,6 +11,8 @@ use full_moon::{ tokenizer::TokenType, }; +#[cfg(feature = "luau")] +use crate::formatters::general::format_symbol; #[cfg(feature = "lua54")] use crate::formatters::lua54::format_attribute; #[cfg(feature = "luau")] @@ -21,7 +23,7 @@ use crate::{ formatters::{ expression::{format_expression, format_var, hang_expression}, general::{ - format_punctuated, format_punctuated_multiline, format_symbol, format_token_reference, + format_punctuated, format_punctuated_multiline, format_token_reference, try_format_punctuated, }, trivia::{ diff --git a/src/formatters/functions.rs b/src/formatters/functions.rs index c74f4b26c..bbe3fceb0 100644 --- a/src/formatters/functions.rs +++ b/src/formatters/functions.rs @@ -9,6 +9,8 @@ use full_moon::ast::{ }; use full_moon::tokenizer::{Token, TokenKind, TokenReference, TokenType}; +#[cfg(feature = "luau")] +use crate::formatters::general::format_symbol; #[cfg(feature = "luau")] use crate::formatters::luau::{ const_keyword_token_ref, format_generic_declaration, format_luau_attribute, @@ -25,7 +27,7 @@ use crate::{ expression::{format_expression, format_prefix, format_suffix, hang_expression}, general::{ format_contained_punctuated_multiline, format_contained_span, format_end_token, - format_punctuated, format_symbol, format_token_reference, EndTokenType, + format_punctuated, format_token_reference, EndTokenType, }, stmt::format_stmt_no_trivia, table::format_table_constructor, From 0578f353c1a4bf86b9ec9b622a5106826088a4ef Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 17:02:36 +0200 Subject: [PATCH 10/15] v2.5.0 --- CHANGELOG.md | 7 +++++-- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 6 +++--- stylua-npm-bin/package.json | 12 ++++++------ stylua-npm-bin/platforms/darwin-arm64/package.json | 2 +- stylua-npm-bin/platforms/darwin-x64/package.json | 2 +- stylua-npm-bin/platforms/linux-arm64/package.json | 2 +- stylua-npm-bin/platforms/linux-x64/package.json | 2 +- stylua-npm-bin/platforms/win32-x64/package.json | 2 +- wasm/package.json | 2 +- 11 files changed, 22 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 071f58953..63dc23b2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.5.0] - 2026-05-16 + ### Added - Luau: Added support for `const` variable assignments (`const x = 1`) and `const function` declarations ([#1102](https://github.com/JohnnyMorganz/StyLua/issues/1102)) @@ -18,7 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fixed npm publishing by bumping Node.js from 16 to 22 in CI workflows to support npm trusted publishing -- Luau: Fixed union/intersection type definitions not being hung when the type alone fits within the column width but the full line (including ` = `) exceeds it ([#1104](https://github.com/JohnnyMorganz/StyLua/issues/1104)) +- Luau: Fixed union/intersection type definitions not being hung when the type alone fits within the column width but the full line (including `=`) exceeds it ([#1104](https://github.com/JohnnyMorganz/StyLua/issues/1104)) - Luau: Fixed stray leading newlines not being removed from `local function` and `const function` declarations that have attributes (e.g. `@native`) at the start of a block ([#1109](https://github.com/JohnnyMorganz/StyLua/issues/1109)) ## [2.4.1] - 2026-04-06 @@ -905,7 +907,8 @@ This feature is enabled by default, it can be disabled using `--no-editorconfig` Initial alpha release -[unreleased]: https://github.com/JohnnyMorganz/StyLua/compare/v2.4.1...HEAD +[unreleased]: https://github.com/JohnnyMorganz/StyLua/compare/v2.5.0...HEAD +[2.5.0]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.5.0 [2.4.1]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.4.1 [2.4.0]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.4.0 [2.3.1]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.3.1 diff --git a/Cargo.lock b/Cargo.lock index 99d9056f6..23362dd6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -967,7 +967,7 @@ dependencies = [ [[package]] name = "stylua" -version = "2.4.1" +version = "2.5.0" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index 808c51997..f92e55b8e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stylua" -version = "2.4.1" +version = "2.5.0" authors = ["JohnnyMorganz "] description = "A code formatter for Lua" license = "MPL-2.0" diff --git a/README.md b/README.md index 0d29f0385..871802ee5 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Add the following to your `.pre-commit-config.yaml` file: ```yaml - repo: https://github.com/JohnnyMorganz/StyLua - rev: v2.4.1 + rev: v2.5.0 hooks: - id: stylua # or stylua-system / stylua-github ``` @@ -84,7 +84,7 @@ StyLua is available on the [Docker Hub](https://hub.docker.com/r/johnnymorganz/s If you are using Docker, the easiest way to install StyLua is: ```dockerfile -COPY --from=JohnnyMorganz/StyLua:2.4.1 /stylua /usr/bin/stylua +COPY --from=JohnnyMorganz/StyLua:2.5.0 /stylua /usr/bin/stylua ``` ### Homebrew @@ -110,7 +110,7 @@ uv tool install git+https://github.com/johnnymorganz/stylua - [Aftman](https://github.com/LPGhatguy/aftman) ```sh -aftman add johnnymorganz/stylua@2.4.1 +aftman add johnnymorganz/stylua@2.5.0 ``` - A community maintained package repository. Please note, these packages are maintained by third-parties and we do not control their packaging manifests. diff --git a/stylua-npm-bin/package.json b/stylua-npm-bin/package.json index b98a09193..d7a63c6ba 100644 --- a/stylua-npm-bin/package.json +++ b/stylua-npm-bin/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin", - "version": "2.4.1", + "version": "2.5.0", "description": "A code formatter for Lua", "bin": { "stylua": "./run.js" @@ -33,10 +33,10 @@ }, "homepage": "https://github.com/johnnymorganz/stylua#readme", "optionalDependencies": { - "@johnnymorganz/stylua-bin-linux-x64": "2.4.1", - "@johnnymorganz/stylua-bin-linux-arm64": "2.4.1", - "@johnnymorganz/stylua-bin-darwin-x64": "2.4.1", - "@johnnymorganz/stylua-bin-darwin-arm64": "2.4.1", - "@johnnymorganz/stylua-bin-win32-x64": "2.4.1" + "@johnnymorganz/stylua-bin-linux-x64": "2.5.0", + "@johnnymorganz/stylua-bin-linux-arm64": "2.5.0", + "@johnnymorganz/stylua-bin-darwin-x64": "2.5.0", + "@johnnymorganz/stylua-bin-darwin-arm64": "2.5.0", + "@johnnymorganz/stylua-bin-win32-x64": "2.5.0" } } diff --git a/stylua-npm-bin/platforms/darwin-arm64/package.json b/stylua-npm-bin/platforms/darwin-arm64/package.json index 187c659c2..11a338d8a 100644 --- a/stylua-npm-bin/platforms/darwin-arm64/package.json +++ b/stylua-npm-bin/platforms/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-darwin-arm64", - "version": "2.4.1", + "version": "2.5.0", "description": "StyLua binary for macOS arm64", "os": [ "darwin" diff --git a/stylua-npm-bin/platforms/darwin-x64/package.json b/stylua-npm-bin/platforms/darwin-x64/package.json index 33070671f..a863fdd74 100644 --- a/stylua-npm-bin/platforms/darwin-x64/package.json +++ b/stylua-npm-bin/platforms/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-darwin-x64", - "version": "2.4.1", + "version": "2.5.0", "description": "StyLua binary for macOS x64", "os": [ "darwin" diff --git a/stylua-npm-bin/platforms/linux-arm64/package.json b/stylua-npm-bin/platforms/linux-arm64/package.json index ca61aed8d..c4e2cd831 100644 --- a/stylua-npm-bin/platforms/linux-arm64/package.json +++ b/stylua-npm-bin/platforms/linux-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-linux-arm64", - "version": "2.4.1", + "version": "2.5.0", "description": "StyLua binary for Linux arm64", "os": [ "linux" diff --git a/stylua-npm-bin/platforms/linux-x64/package.json b/stylua-npm-bin/platforms/linux-x64/package.json index d57db7b75..daee148f6 100644 --- a/stylua-npm-bin/platforms/linux-x64/package.json +++ b/stylua-npm-bin/platforms/linux-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-linux-x64", - "version": "2.4.1", + "version": "2.5.0", "description": "StyLua binary for Linux x64", "os": [ "linux" diff --git a/stylua-npm-bin/platforms/win32-x64/package.json b/stylua-npm-bin/platforms/win32-x64/package.json index 84449b1de..e7f974b4e 100644 --- a/stylua-npm-bin/platforms/win32-x64/package.json +++ b/stylua-npm-bin/platforms/win32-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-win32-x64", - "version": "2.4.1", + "version": "2.5.0", "description": "StyLua binary for Windows x64", "os": [ "win32" diff --git a/wasm/package.json b/wasm/package.json index 9778bf0a3..938a8bb77 100644 --- a/wasm/package.json +++ b/wasm/package.json @@ -4,7 +4,7 @@ "JohnnyMorganz " ], "description": "A code formatter for Lua", - "version": "2.4.1", + "version": "2.5.0", "license": "MPL-2.0", "readme": "README.md", "repository": { From 3c290bbe053285890cc69bee3ee389041d6a8476 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 17:06:36 +0200 Subject: [PATCH 11/15] extension: v1.7.2 --- stylua-vscode/CHANGELOG.md | 2 ++ stylua-vscode/package-lock.json | 4 ++-- stylua-vscode/package.json | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/stylua-vscode/CHANGELOG.md b/stylua-vscode/CHANGELOG.md index 6a575761f..586561d7d 100644 --- a/stylua-vscode/CHANGELOG.md +++ b/stylua-vscode/CHANGELOG.md @@ -11,6 +11,8 @@ To view the changelog of the StyLua binary, see [here](https://github.com/Johnny ## [Unreleased] +## [1.7.2] - 2026-05-16 + ### Fixed - Fixed spurious "No release version matches v." error when GitHub API returns a non-OK response (e.g. rate limiting). The extension no longer shows a bogus update prompt in this case diff --git a/stylua-vscode/package-lock.json b/stylua-vscode/package-lock.json index 85a7b3a3f..b81e9ead1 100644 --- a/stylua-vscode/package-lock.json +++ b/stylua-vscode/package-lock.json @@ -1,12 +1,12 @@ { "name": "stylua", - "version": "1.7.1", + "version": "1.7.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "stylua", - "version": "1.7.1", + "version": "1.7.2", "license": "MPL-2.0", "dependencies": { "node-fetch": "^2.6.1", diff --git a/stylua-vscode/package.json b/stylua-vscode/package.json index 204fcf025..4478ee7dd 100644 --- a/stylua-vscode/package.json +++ b/stylua-vscode/package.json @@ -13,7 +13,7 @@ }, "license": "MPL-2.0", "icon": "assets/icon.png", - "version": "1.7.1", + "version": "1.7.2", "engines": { "vscode": "^1.85.0" }, From 28c00a4662364229cd431cca31e479d0a11e19a7 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 17:16:38 +0200 Subject: [PATCH 12/15] Bump Node.js from 22 to 24 in release workflows to fix npm publishing Node 22 ships with npm 10.x, but npm trusted publishing requires npm 11.5.1+. This caused npm publish to fail with 404 errors for v2.5.0 (and previously v2.4.0 / v2.4.1 before the earlier Node 16->22 bump). Node 24 ships with npm 11.x, satisfying the requirement. --- .github/workflows/release.yml | 4 ++-- CHANGELOG.md | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 10e17b0de..50026885f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -124,7 +124,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: "22.x" + node-version: "24.x" registry-url: "https://registry.npmjs.org" - name: Build WASM @@ -149,7 +149,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: "22.x" + node-version: "24.x" registry-url: "https://registry.npmjs.org" - name: Setup README and LICENSE diff --git a/CHANGELOG.md b/CHANGELOG.md index 63dc23b2e..f8c45416e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Fixed npm publishing by bumping Node.js from 22 to 24 in CI workflows to support npm trusted publishing + ## [2.5.0] - 2026-05-16 ### Added @@ -197,11 +201,13 @@ failing tests ([#824](https://github.com/JohnnyMorganz/StyLua/issues/824)) ### Changed - Updated parser crate with following changes: + - Support Luau floor division (`//`) - Fix Luau string interpolation parsing - Fix Luau `\z` escape parsing - Simplified access and modification patterns for StyLua configuration. You can now access the properties directly + - **Deprecated:** the old access patterns of `.property()` and `.with_property()` are now deprecated - **Breaking Change (WASM):** due to JS/TS lack of differentiation between `.property` / `.property()` implementation, the `.property()` functions were removed from WASM output. From cfceae63641c805411aeb7ec7ec60b336138f9da Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 17:22:10 +0200 Subject: [PATCH 13/15] v2.5.1 --- CHANGELOG.md | 7 ++++--- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 6 +++--- stylua-npm-bin/package.json | 12 ++++++------ stylua-npm-bin/platforms/darwin-arm64/package.json | 2 +- stylua-npm-bin/platforms/darwin-x64/package.json | 2 +- stylua-npm-bin/platforms/linux-arm64/package.json | 2 +- stylua-npm-bin/platforms/linux-x64/package.json | 2 +- stylua-npm-bin/platforms/win32-x64/package.json | 2 +- wasm/package.json | 2 +- 11 files changed, 21 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8c45416e..f9bec9f64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.5.1] - 2026-05-16 + ### Fixed - Fixed npm publishing by bumping Node.js from 22 to 24 in CI workflows to support npm trusted publishing @@ -201,13 +203,11 @@ failing tests ([#824](https://github.com/JohnnyMorganz/StyLua/issues/824)) ### Changed - Updated parser crate with following changes: - - Support Luau floor division (`//`) - Fix Luau string interpolation parsing - Fix Luau `\z` escape parsing - Simplified access and modification patterns for StyLua configuration. You can now access the properties directly - - **Deprecated:** the old access patterns of `.property()` and `.with_property()` are now deprecated - **Breaking Change (WASM):** due to JS/TS lack of differentiation between `.property` / `.property()` implementation, the `.property()` functions were removed from WASM output. @@ -913,7 +913,8 @@ This feature is enabled by default, it can be disabled using `--no-editorconfig` Initial alpha release -[unreleased]: https://github.com/JohnnyMorganz/StyLua/compare/v2.5.0...HEAD +[unreleased]: https://github.com/JohnnyMorganz/StyLua/compare/v2.5.1...HEAD +[2.5.1]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.5.1 [2.5.0]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.5.0 [2.4.1]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.4.1 [2.4.0]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.4.0 diff --git a/Cargo.lock b/Cargo.lock index 23362dd6a..fedd920aa 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -967,7 +967,7 @@ dependencies = [ [[package]] name = "stylua" -version = "2.5.0" +version = "2.5.1" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index f92e55b8e..6b1967e14 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stylua" -version = "2.5.0" +version = "2.5.1" authors = ["JohnnyMorganz "] description = "A code formatter for Lua" license = "MPL-2.0" diff --git a/README.md b/README.md index 871802ee5..4c7540071 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Add the following to your `.pre-commit-config.yaml` file: ```yaml - repo: https://github.com/JohnnyMorganz/StyLua - rev: v2.5.0 + rev: v2.5.1 hooks: - id: stylua # or stylua-system / stylua-github ``` @@ -84,7 +84,7 @@ StyLua is available on the [Docker Hub](https://hub.docker.com/r/johnnymorganz/s If you are using Docker, the easiest way to install StyLua is: ```dockerfile -COPY --from=JohnnyMorganz/StyLua:2.5.0 /stylua /usr/bin/stylua +COPY --from=JohnnyMorganz/StyLua:2.5.1 /stylua /usr/bin/stylua ``` ### Homebrew @@ -110,7 +110,7 @@ uv tool install git+https://github.com/johnnymorganz/stylua - [Aftman](https://github.com/LPGhatguy/aftman) ```sh -aftman add johnnymorganz/stylua@2.5.0 +aftman add johnnymorganz/stylua@2.5.1 ``` - A community maintained package repository. Please note, these packages are maintained by third-parties and we do not control their packaging manifests. diff --git a/stylua-npm-bin/package.json b/stylua-npm-bin/package.json index d7a63c6ba..01223437d 100644 --- a/stylua-npm-bin/package.json +++ b/stylua-npm-bin/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin", - "version": "2.5.0", + "version": "2.5.1", "description": "A code formatter for Lua", "bin": { "stylua": "./run.js" @@ -33,10 +33,10 @@ }, "homepage": "https://github.com/johnnymorganz/stylua#readme", "optionalDependencies": { - "@johnnymorganz/stylua-bin-linux-x64": "2.5.0", - "@johnnymorganz/stylua-bin-linux-arm64": "2.5.0", - "@johnnymorganz/stylua-bin-darwin-x64": "2.5.0", - "@johnnymorganz/stylua-bin-darwin-arm64": "2.5.0", - "@johnnymorganz/stylua-bin-win32-x64": "2.5.0" + "@johnnymorganz/stylua-bin-linux-x64": "2.5.1", + "@johnnymorganz/stylua-bin-linux-arm64": "2.5.1", + "@johnnymorganz/stylua-bin-darwin-x64": "2.5.1", + "@johnnymorganz/stylua-bin-darwin-arm64": "2.5.1", + "@johnnymorganz/stylua-bin-win32-x64": "2.5.1" } } diff --git a/stylua-npm-bin/platforms/darwin-arm64/package.json b/stylua-npm-bin/platforms/darwin-arm64/package.json index 11a338d8a..a9e71c25b 100644 --- a/stylua-npm-bin/platforms/darwin-arm64/package.json +++ b/stylua-npm-bin/platforms/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-darwin-arm64", - "version": "2.5.0", + "version": "2.5.1", "description": "StyLua binary for macOS arm64", "os": [ "darwin" diff --git a/stylua-npm-bin/platforms/darwin-x64/package.json b/stylua-npm-bin/platforms/darwin-x64/package.json index a863fdd74..f316a865e 100644 --- a/stylua-npm-bin/platforms/darwin-x64/package.json +++ b/stylua-npm-bin/platforms/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-darwin-x64", - "version": "2.5.0", + "version": "2.5.1", "description": "StyLua binary for macOS x64", "os": [ "darwin" diff --git a/stylua-npm-bin/platforms/linux-arm64/package.json b/stylua-npm-bin/platforms/linux-arm64/package.json index c4e2cd831..d3c6dd988 100644 --- a/stylua-npm-bin/platforms/linux-arm64/package.json +++ b/stylua-npm-bin/platforms/linux-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-linux-arm64", - "version": "2.5.0", + "version": "2.5.1", "description": "StyLua binary for Linux arm64", "os": [ "linux" diff --git a/stylua-npm-bin/platforms/linux-x64/package.json b/stylua-npm-bin/platforms/linux-x64/package.json index daee148f6..60fdc9470 100644 --- a/stylua-npm-bin/platforms/linux-x64/package.json +++ b/stylua-npm-bin/platforms/linux-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-linux-x64", - "version": "2.5.0", + "version": "2.5.1", "description": "StyLua binary for Linux x64", "os": [ "linux" diff --git a/stylua-npm-bin/platforms/win32-x64/package.json b/stylua-npm-bin/platforms/win32-x64/package.json index e7f974b4e..ddd8efc49 100644 --- a/stylua-npm-bin/platforms/win32-x64/package.json +++ b/stylua-npm-bin/platforms/win32-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-win32-x64", - "version": "2.5.0", + "version": "2.5.1", "description": "StyLua binary for Windows x64", "os": [ "win32" diff --git a/wasm/package.json b/wasm/package.json index 938a8bb77..624d95673 100644 --- a/wasm/package.json +++ b/wasm/package.json @@ -4,7 +4,7 @@ "JohnnyMorganz " ], "description": "A code formatter for Lua", - "version": "2.5.0", + "version": "2.5.1", "license": "MPL-2.0", "readme": "README.md", "repository": { From 51a4507fef241427f5a01ff5c45dcc8dfbb6f97f Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 17:33:49 +0200 Subject: [PATCH 14/15] Fix repository.url casing in npm packages for provenance validation OIDC trusted publishing failed with E422 because npm's provenance verifier compares the package.json repository.url against the actual GitHub repo URL from the workflow context. The lowercase "johnnymorganz/stylua" did not match "JohnnyMorganz/StyLua". Use the canonical "git+...git" URL form so npm does not emit a normalization warning during publish. Also normalize the bin.stylua path in stylua-npm-bin (./run.js -> run.js) as suggested by `npm pkg fix`. --- CHANGELOG.md | 6 ++++++ stylua-npm-bin/package.json | 4 ++-- stylua-npm-bin/platforms/darwin-arm64/package.json | 2 +- stylua-npm-bin/platforms/darwin-x64/package.json | 2 +- stylua-npm-bin/platforms/linux-arm64/package.json | 2 +- stylua-npm-bin/platforms/linux-x64/package.json | 2 +- stylua-npm-bin/platforms/win32-x64/package.json | 2 +- wasm/package.json | 2 +- 8 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f9bec9f64..bc1f6a536 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Fixed + +- Fixed npm publishing failing provenance validation due to normalization of repository URL + ## [2.5.1] - 2026-05-16 ### Fixed @@ -203,11 +207,13 @@ failing tests ([#824](https://github.com/JohnnyMorganz/StyLua/issues/824)) ### Changed - Updated parser crate with following changes: + - Support Luau floor division (`//`) - Fix Luau string interpolation parsing - Fix Luau `\z` escape parsing - Simplified access and modification patterns for StyLua configuration. You can now access the properties directly + - **Deprecated:** the old access patterns of `.property()` and `.with_property()` are now deprecated - **Breaking Change (WASM):** due to JS/TS lack of differentiation between `.property` / `.property()` implementation, the `.property()` functions were removed from WASM output. diff --git a/stylua-npm-bin/package.json b/stylua-npm-bin/package.json index 01223437d..80b9fdb79 100644 --- a/stylua-npm-bin/package.json +++ b/stylua-npm-bin/package.json @@ -3,7 +3,7 @@ "version": "2.5.1", "description": "A code formatter for Lua", "bin": { - "stylua": "./run.js" + "stylua": "run.js" }, "engines": { "node": ">=10" @@ -17,7 +17,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/johnnymorganz/stylua" + "url": "git+https://github.com/JohnnyMorganz/StyLua.git" }, "keywords": [ "cli", diff --git a/stylua-npm-bin/platforms/darwin-arm64/package.json b/stylua-npm-bin/platforms/darwin-arm64/package.json index a9e71c25b..5fbd663e3 100644 --- a/stylua-npm-bin/platforms/darwin-arm64/package.json +++ b/stylua-npm-bin/platforms/darwin-arm64/package.json @@ -14,7 +14,7 @@ "license": "MPL-2.0", "repository": { "type": "git", - "url": "https://github.com/johnnymorganz/stylua" + "url": "git+https://github.com/JohnnyMorganz/StyLua.git" }, "preferUnplugged": true, "publishConfig": { diff --git a/stylua-npm-bin/platforms/darwin-x64/package.json b/stylua-npm-bin/platforms/darwin-x64/package.json index f316a865e..b1bf4cf5c 100644 --- a/stylua-npm-bin/platforms/darwin-x64/package.json +++ b/stylua-npm-bin/platforms/darwin-x64/package.json @@ -14,7 +14,7 @@ "license": "MPL-2.0", "repository": { "type": "git", - "url": "https://github.com/johnnymorganz/stylua" + "url": "git+https://github.com/JohnnyMorganz/StyLua.git" }, "preferUnplugged": true, "publishConfig": { diff --git a/stylua-npm-bin/platforms/linux-arm64/package.json b/stylua-npm-bin/platforms/linux-arm64/package.json index d3c6dd988..546ad00a3 100644 --- a/stylua-npm-bin/platforms/linux-arm64/package.json +++ b/stylua-npm-bin/platforms/linux-arm64/package.json @@ -14,7 +14,7 @@ "license": "MPL-2.0", "repository": { "type": "git", - "url": "https://github.com/johnnymorganz/stylua" + "url": "git+https://github.com/JohnnyMorganz/StyLua.git" }, "preferUnplugged": true, "publishConfig": { diff --git a/stylua-npm-bin/platforms/linux-x64/package.json b/stylua-npm-bin/platforms/linux-x64/package.json index 60fdc9470..5c455e6e1 100644 --- a/stylua-npm-bin/platforms/linux-x64/package.json +++ b/stylua-npm-bin/platforms/linux-x64/package.json @@ -14,7 +14,7 @@ "license": "MPL-2.0", "repository": { "type": "git", - "url": "https://github.com/johnnymorganz/stylua" + "url": "git+https://github.com/JohnnyMorganz/StyLua.git" }, "preferUnplugged": true, "publishConfig": { diff --git a/stylua-npm-bin/platforms/win32-x64/package.json b/stylua-npm-bin/platforms/win32-x64/package.json index ddd8efc49..070218594 100644 --- a/stylua-npm-bin/platforms/win32-x64/package.json +++ b/stylua-npm-bin/platforms/win32-x64/package.json @@ -14,7 +14,7 @@ "license": "MPL-2.0", "repository": { "type": "git", - "url": "https://github.com/johnnymorganz/stylua" + "url": "git+https://github.com/JohnnyMorganz/StyLua.git" }, "preferUnplugged": true, "publishConfig": { diff --git a/wasm/package.json b/wasm/package.json index 624d95673..dd80728fd 100644 --- a/wasm/package.json +++ b/wasm/package.json @@ -9,7 +9,7 @@ "readme": "README.md", "repository": { "type": "git", - "url": "https://github.com/johnnymorganz/stylua" + "url": "git+https://github.com/JohnnyMorganz/StyLua.git" }, "scripts": { "test": "node --test tests/smoke.test.mjs tests/smoke.test.cjs" From 5ae6e7a55748414b4be30a832afd895014c65352 Mon Sep 17 00:00:00 2001 From: JohnnyMorganz Date: Sat, 16 May 2026 17:45:05 +0200 Subject: [PATCH 15/15] v2.5.2 --- CHANGELOG.md | 7 ++++--- Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 6 +++--- stylua-npm-bin/package.json | 12 ++++++------ stylua-npm-bin/platforms/darwin-arm64/package.json | 2 +- stylua-npm-bin/platforms/darwin-x64/package.json | 2 +- stylua-npm-bin/platforms/linux-arm64/package.json | 2 +- stylua-npm-bin/platforms/linux-x64/package.json | 2 +- stylua-npm-bin/platforms/win32-x64/package.json | 2 +- wasm/package.json | 2 +- 11 files changed, 21 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc1f6a536..a10b07c97 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [2.5.2] - 2026-05-16 + ### Fixed - Fixed npm publishing failing provenance validation due to normalization of repository URL @@ -207,13 +209,11 @@ failing tests ([#824](https://github.com/JohnnyMorganz/StyLua/issues/824)) ### Changed - Updated parser crate with following changes: - - Support Luau floor division (`//`) - Fix Luau string interpolation parsing - Fix Luau `\z` escape parsing - Simplified access and modification patterns for StyLua configuration. You can now access the properties directly - - **Deprecated:** the old access patterns of `.property()` and `.with_property()` are now deprecated - **Breaking Change (WASM):** due to JS/TS lack of differentiation between `.property` / `.property()` implementation, the `.property()` functions were removed from WASM output. @@ -919,7 +919,8 @@ This feature is enabled by default, it can be disabled using `--no-editorconfig` Initial alpha release -[unreleased]: https://github.com/JohnnyMorganz/StyLua/compare/v2.5.1...HEAD +[unreleased]: https://github.com/JohnnyMorganz/StyLua/compare/v2.5.2...HEAD +[2.5.2]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.5.2 [2.5.1]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.5.1 [2.5.0]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.5.0 [2.4.1]: https://github.com/JohnnyMorganz/StyLua/releases/tag/v2.4.1 diff --git a/Cargo.lock b/Cargo.lock index fedd920aa..577c86c0a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -967,7 +967,7 @@ dependencies = [ [[package]] name = "stylua" -version = "2.5.1" +version = "2.5.2" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index 6b1967e14..a0e549eee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "stylua" -version = "2.5.1" +version = "2.5.2" authors = ["JohnnyMorganz "] description = "A code formatter for Lua" license = "MPL-2.0" diff --git a/README.md b/README.md index 4c7540071..5af9d615e 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Add the following to your `.pre-commit-config.yaml` file: ```yaml - repo: https://github.com/JohnnyMorganz/StyLua - rev: v2.5.1 + rev: v2.5.2 hooks: - id: stylua # or stylua-system / stylua-github ``` @@ -84,7 +84,7 @@ StyLua is available on the [Docker Hub](https://hub.docker.com/r/johnnymorganz/s If you are using Docker, the easiest way to install StyLua is: ```dockerfile -COPY --from=JohnnyMorganz/StyLua:2.5.1 /stylua /usr/bin/stylua +COPY --from=JohnnyMorganz/StyLua:2.5.2 /stylua /usr/bin/stylua ``` ### Homebrew @@ -110,7 +110,7 @@ uv tool install git+https://github.com/johnnymorganz/stylua - [Aftman](https://github.com/LPGhatguy/aftman) ```sh -aftman add johnnymorganz/stylua@2.5.1 +aftman add johnnymorganz/stylua@2.5.2 ``` - A community maintained package repository. Please note, these packages are maintained by third-parties and we do not control their packaging manifests. diff --git a/stylua-npm-bin/package.json b/stylua-npm-bin/package.json index 80b9fdb79..270a25e21 100644 --- a/stylua-npm-bin/package.json +++ b/stylua-npm-bin/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin", - "version": "2.5.1", + "version": "2.5.2", "description": "A code formatter for Lua", "bin": { "stylua": "run.js" @@ -33,10 +33,10 @@ }, "homepage": "https://github.com/johnnymorganz/stylua#readme", "optionalDependencies": { - "@johnnymorganz/stylua-bin-linux-x64": "2.5.1", - "@johnnymorganz/stylua-bin-linux-arm64": "2.5.1", - "@johnnymorganz/stylua-bin-darwin-x64": "2.5.1", - "@johnnymorganz/stylua-bin-darwin-arm64": "2.5.1", - "@johnnymorganz/stylua-bin-win32-x64": "2.5.1" + "@johnnymorganz/stylua-bin-linux-x64": "2.5.2", + "@johnnymorganz/stylua-bin-linux-arm64": "2.5.2", + "@johnnymorganz/stylua-bin-darwin-x64": "2.5.2", + "@johnnymorganz/stylua-bin-darwin-arm64": "2.5.2", + "@johnnymorganz/stylua-bin-win32-x64": "2.5.2" } } diff --git a/stylua-npm-bin/platforms/darwin-arm64/package.json b/stylua-npm-bin/platforms/darwin-arm64/package.json index 5fbd663e3..39583b729 100644 --- a/stylua-npm-bin/platforms/darwin-arm64/package.json +++ b/stylua-npm-bin/platforms/darwin-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-darwin-arm64", - "version": "2.5.1", + "version": "2.5.2", "description": "StyLua binary for macOS arm64", "os": [ "darwin" diff --git a/stylua-npm-bin/platforms/darwin-x64/package.json b/stylua-npm-bin/platforms/darwin-x64/package.json index b1bf4cf5c..954a18cfa 100644 --- a/stylua-npm-bin/platforms/darwin-x64/package.json +++ b/stylua-npm-bin/platforms/darwin-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-darwin-x64", - "version": "2.5.1", + "version": "2.5.2", "description": "StyLua binary for macOS x64", "os": [ "darwin" diff --git a/stylua-npm-bin/platforms/linux-arm64/package.json b/stylua-npm-bin/platforms/linux-arm64/package.json index 546ad00a3..9c524329e 100644 --- a/stylua-npm-bin/platforms/linux-arm64/package.json +++ b/stylua-npm-bin/platforms/linux-arm64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-linux-arm64", - "version": "2.5.1", + "version": "2.5.2", "description": "StyLua binary for Linux arm64", "os": [ "linux" diff --git a/stylua-npm-bin/platforms/linux-x64/package.json b/stylua-npm-bin/platforms/linux-x64/package.json index 5c455e6e1..748e9509d 100644 --- a/stylua-npm-bin/platforms/linux-x64/package.json +++ b/stylua-npm-bin/platforms/linux-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-linux-x64", - "version": "2.5.1", + "version": "2.5.2", "description": "StyLua binary for Linux x64", "os": [ "linux" diff --git a/stylua-npm-bin/platforms/win32-x64/package.json b/stylua-npm-bin/platforms/win32-x64/package.json index 070218594..bc11a4dc1 100644 --- a/stylua-npm-bin/platforms/win32-x64/package.json +++ b/stylua-npm-bin/platforms/win32-x64/package.json @@ -1,6 +1,6 @@ { "name": "@johnnymorganz/stylua-bin-win32-x64", - "version": "2.5.1", + "version": "2.5.2", "description": "StyLua binary for Windows x64", "os": [ "win32" diff --git a/wasm/package.json b/wasm/package.json index dd80728fd..58eaea3e9 100644 --- a/wasm/package.json +++ b/wasm/package.json @@ -4,7 +4,7 @@ "JohnnyMorganz " ], "description": "A code formatter for Lua", - "version": "2.5.1", + "version": "2.5.2", "license": "MPL-2.0", "readme": "README.md", "repository": {