From 535c6353abf62b1b921cd6973a01a919379fc4bc Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 31 Jul 2026 18:31:04 +0000 Subject: [PATCH 01/10] fix(package): Correct package metadata, license, and target frameworks Target net6.0 and net8.0 instead of the EOL net6.0/net7.0 pair, keeping the floor for existing consumers and adding the current LTS. Replace the bare copyright line in LICENSE.txt with the MIT license matching the other Seam SDKs, and declare it in the package via PackageLicenseExpression. Point PackageProjectUrl and RepositoryUrl at this repository instead of seamapi/seam-connect, refresh the description, authors and copyright, and generate XML documentation so the docstrings added to the generated source reach IntelliSense. Use Version instead of PackageVersion so MSBuild also stamps AssemblyInformationalVersion, and wire src/version.ts to the npm version lifecycle so the regenerated Seam.csproj is part of the tagged release commit. Rename the development manifest to @seamapi/csharp and mark it private like every other SDK repository; the codegen layer is no longer published to a registry. Define the primary development tasks as npm scripts (build, test, lint:csharp, format:csharp) and pin CSharpier as a local dotnet tool in .config/dotnet-tools.json instead of a global install hardcoded in CI. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XDjE2VAZ2meBSF5b3qpUMt --- .config/dotnet-tools.json | 10 ++ .gitignore | 8 +- LICENSE.txt | 21 ++- output/csharp/src/Seam.Test/Seam.Test.csproj | 2 +- output/csharp/src/Seam/Seam.csproj | 26 ++- package-lock.json | 179 ++++++++++++++++++- package.json | 55 ++---- src/generate-csproj.ts | 26 ++- src/postgenerate.ts | 7 + src/version.ts | 40 +++++ 10 files changed, 310 insertions(+), 64 deletions(-) create mode 100644 .config/dotnet-tools.json create mode 100644 src/postgenerate.ts create mode 100644 src/version.ts diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 00000000..decf14ab --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,10 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "csharpier": { + "version": "0.29.2", + "commands": ["dotnet-csharpier"] + } + } +} diff --git a/.gitignore b/.gitignore index d261a548..ae2cf87c 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,12 @@ # Codegen CODEGEN.md +# .NET build output +bin/ +obj/ +pkg/ +*.nupkg + # TypeScript build output *.d.ts *.js @@ -220,5 +226,3 @@ Icon Network Trash Folder Temporary Items .apdisk - -**/*.nupkg diff --git a/LICENSE.txt b/LICENSE.txt index e47ed3f0..ed6631f9 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1 +1,20 @@ -Copyright (c) 2021-2023 Seam Labs, Inc. +The MIT License (MIT) + +Copyright (c) 2021-2026 Seam Labs, Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/output/csharp/src/Seam.Test/Seam.Test.csproj b/output/csharp/src/Seam.Test/Seam.Test.csproj index b9fdce84..7a5dce1b 100644 --- a/output/csharp/src/Seam.Test/Seam.Test.csproj +++ b/output/csharp/src/Seam.Test/Seam.Test.csproj @@ -1,7 +1,7 @@ - net6.0;net7.0 + net6.0;net8.0 enable enable diff --git a/output/csharp/src/Seam/Seam.csproj b/output/csharp/src/Seam/Seam.csproj index 4016620c..9bc3e25a 100644 --- a/output/csharp/src/Seam/Seam.csproj +++ b/output/csharp/src/Seam/Seam.csproj @@ -1,29 +1,39 @@ - net6.0;net7.0 + net6.0;net8.0 enable annotations Seam - 0.99.0 + 0.99.0 - Seam + Seam Labs, Inc. Seam - README.md + SDK for the Seam API written in C#. + + Copyright (c) 2021-2026 Seam Labs, Inc. - http://github.com/seamapi/seam-connect + seam;api;iot + + MIT + + README.md icon.png - Seam API for C# + https://github.com/seamapi/csharp + + https://github.com/seamapi/csharp + + git - Copyright (c) 2021-2023 Seam Labs, Inc. + true - api iot + $(NoWarn);CS1591 diff --git a/package-lock.json b/package-lock.json index 81ddd99c..46f7cfe4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { - "name": "@seamapi/nextlove-sdk-csharp", + "name": "@seamapi/csharp", "version": "0.99.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "@seamapi/nextlove-sdk-csharp", + "name": "@seamapi/csharp", "version": "0.99.0", - "license": "SEE LICENSE IN LICENSE.txt", + "license": "MIT", "devDependencies": { "@seamapi/blueprint": "^1.0.0", "@seamapi/smith": "^1.1.0", @@ -15,6 +15,7 @@ "ava": "^8.0.1", "c8": "^12.0.0", "change-case": "^5.4.4", + "execa": "^10.0.1", "prettier": "^3.0.0" }, "engines": { @@ -978,6 +979,13 @@ "zod": "^3.24.0" } }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "dev": true, + "license": "MIT" + }, "node_modules/@sindresorhus/merge-streams": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", @@ -3270,6 +3278,46 @@ "node": ">=0.10.0" } }, + "node_modules/execa": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-10.0.1.tgz", + "integrity": "sha512-ge98qjkRK4IB7tL7Ju/6qmm5LHoH1eEMt5FNZrz3f4UIYhF28lggX20z3FaX1sgc67msLEn0N0BscOs29iuwyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "figures": "^6.1.0", + "get-stream": "^9.0.1", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.3.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "which-command": "^0.1.0", + "yoctocolors": "^2.1.2" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", @@ -3610,6 +3658,23 @@ "node": ">= 0.4" } }, + "node_modules/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-symbol-description": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", @@ -4007,6 +4072,16 @@ "node": ">= 14" } }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -4428,6 +4503,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", @@ -4493,6 +4581,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-string": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", @@ -5392,6 +5493,36 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6530,6 +6661,19 @@ "node": ">=0.10.0" } }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -7211,6 +7355,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-command": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/which-command/-/which-command-0.1.0.tgz", + "integrity": "sha512-XZyoF5/5hZtXitIwzrU4NKK+Wtbb9aB9CezUEw2Q0wlYK8NUYQxC1rRXgNueYLtBAJwXIb+/tFVk4dozciNJMA==", + "dev": true, + "license": "MIT", + "bin": { + "which-command": "cli.js" + }, + "engines": { + "node": ">=22" + }, + "funding": { + "url": "https://github.com/sindresorhus/which-command?sponsor=1" + } + }, "node_modules/which-typed-array": { "version": "1.1.22", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", @@ -7383,6 +7543,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.2.0.tgz", + "integrity": "sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zod": { "version": "3.25.76", "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", diff --git a/package.json b/package.json index cea03f3d..4eeba5e2 100644 --- a/package.json +++ b/package.json @@ -1,57 +1,29 @@ { - "name": "@seamapi/nextlove-sdk-csharp", + "name": "@seamapi/csharp", "version": "0.99.0", - "description": "CSharp SDK autogenerated from nextlove types.", "type": "module", - "main": "index.js", - "types": "index.d.ts", - "exports": { - ".": { - "import": "./index.js", - "types": "./index.d.ts" - } - }, - "module": "index.js", - "sideEffects": false, - "keywords": [ - "node" - ], - "homepage": "https://github.com/seamapi/nextlove-sdk-csharp", - "bugs": "https://github.com/seamapi/nextlove-sdk-csharp/issues", - "repository": "seamapi/nextlove-sdk-csharp", - "license": "SEE LICENSE IN LICENSE.txt", - "author": { - "name": "Seam Labs, Inc.", - "email": "devops@getseam.com" - }, - "files": [ - "index.js", - "index.js.map", - "index.d.ts", - "lib", - "src", - "!**/*.test.ts" - ], + "private": true, + "license": "MIT", "scripts": { - "build": "npm run generate", - "typecheck": "tsc", + "version": "tsx src/version.ts", + "postversion": "git push --follow-tags", + "generate": "tsx codegen/smith.ts", + "postgenerate": "tsx src/postgenerate.ts", + "generate:csproj": "tsx src/generate-csproj.ts", + "build": "dotnet pack --configuration Release --output pkg ./output/csharp/src/Seam", "test": "dotnet test ./output/csharp", - "pretest": "npm run generate", + "test:node": "c8 ava", "test:update": "ava --update-snapshots", "test:watch": "ava --watch", "test:debug": "ava debug --break", "lint": "eslint .", "postlint": "prettier --check --ignore-path .gitignore --ignore-path .prettierignore .", + "lint:csharp": "dotnet csharpier --check ./output/csharp", "format": "prettier --write --ignore-path .gitignore --ignore-path .prettierignore .", "preformat": "eslint --fix .", - "postversion": "git push --follow-tags", - "example": "tsx examples", - "example:inspect": "tsx --inspect examples", "format:csharp": "dotnet csharpier ./output/csharp", - "report": "c8 report", - "generate": "tsx codegen/smith.ts && npm run generate:csproj && npm run format:csharp", - "generate:csproj": "tsx src/generate-csproj.ts", - "pack": "npm run generate:csproj && dotnet pack ./output/csharp/src/Seam -o ./" + "typecheck": "tsc", + "report": "c8 report" }, "engines": { "node": ">=22.11.0", @@ -74,6 +46,7 @@ "ava": "^8.0.1", "c8": "^12.0.0", "change-case": "^5.4.4", + "execa": "^10.0.1", "prettier": "^3.0.0" } } diff --git a/src/generate-csproj.ts b/src/generate-csproj.ts index 8b7b020d..cb4555b6 100644 --- a/src/generate-csproj.ts +++ b/src/generate-csproj.ts @@ -17,23 +17,33 @@ export const csprojTemplate = (version: string, dotNetVersions: string[]) => Seam - ${version} + ${version} - Seam + Seam Labs, Inc. Seam - README.md + SDK for the Seam API written in C#. + + Copyright (c) 2021-2026 Seam Labs, Inc. - http://github.com/seamapi/seam-connect + seam;api;iot + + MIT + + README.md icon.png - Seam API for C# + https://github.com/seamapi/csharp + + https://github.com/seamapi/csharp + + git - Copyright (c) 2021-2023 Seam Labs, Inc. + true - api iot + $(NoWarn);CS1591 @@ -53,7 +63,7 @@ export const csprojTemplate = (version: string, dotNetVersions: string[]) => const main = async () => { writeFileSync( './output/csharp/src/Seam/Seam.csproj', - csprojTemplate(version, ['6.0', '7.0']), + csprojTemplate(version, ['6.0', '8.0']), ) } diff --git a/src/postgenerate.ts b/src/postgenerate.ts new file mode 100644 index 00000000..f35da16c --- /dev/null +++ b/src/postgenerate.ts @@ -0,0 +1,7 @@ +import { $ } from 'execa' + +const run = $({ stdio: 'inherit' }) + +await run`tsx src/generate-csproj.ts` +await run`dotnet tool restore` +await run`dotnet csharpier ./output/csharp` diff --git a/src/version.ts b/src/version.ts new file mode 100644 index 00000000..714eba75 --- /dev/null +++ b/src/version.ts @@ -0,0 +1,40 @@ +import { readFile } from 'node:fs/promises' +import { fileURLToPath } from 'node:url' + +import { $ } from 'execa' + +const csprojFile = './output/csharp/src/Seam/Seam.csproj' + +const main = async (): Promise => { + const { version } = await readPackageJson() + + if (version == null) { + throw new Error('Missing version in package.json') + } + + await $({ stdio: 'inherit' })`tsx src/generate-csproj.ts` + + const data = await readFile( + fileURLToPath(new URL(`../${csprojFile}`, import.meta.url)), + ) + + if (!data.toString().includes(`${version}`)) { + throw new Error(`Could not find version ${version} in ${csprojFile}`) + } + + // eslint-disable-next-line no-console + console.log(`✓ Version ${version} injected into ${csprojFile}`) + + const { command } = await $`git add ${csprojFile}` + // eslint-disable-next-line no-console + console.log(`✓ Staged with '${command}'`) +} + +const readPackageJson = async (): Promise<{ version?: string }> => { + const pkgBuff = await readFile( + fileURLToPath(new URL('../package.json', import.meta.url)), + ) + return JSON.parse(pkgBuff.toString()) +} + +await main() From a074efde2c12970047cb3e3c0e7f3482574a05d5 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 31 Jul 2026 18:31:20 +0000 Subject: [PATCH 02/10] chore(test): Run AVA test workers in child processes The codegen tests were never run in CI and fail under AVA's default worker threads, where the tsx resolve hooks do not apply and the .js-suffixed import of the handlebars helpers cannot resolve to the TypeScript source. Disable worker threads so npm run test:node works; the Check workflow now runs it. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XDjE2VAZ2meBSF5b3qpUMt --- ava.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/ava.config.js b/ava.config.js index 89d4d668..8bfacc71 100644 --- a/ava.config.js +++ b/ava.config.js @@ -5,6 +5,7 @@ export default () => { ignoreChanges: ['tmp/**/*'], }, extensions: ['ts'], + workerThreads: false, nodeArguments: ['--import=tsx'], } } From a7357b0ed340a905b2900796b57f0508ccc9d323 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 31 Jul 2026 18:31:20 +0000 Subject: [PATCH 03/10] ci: Bring GitHub Actions up to parity with the other SDKs Model the Check workflow on the other SDK repositories: run on pushes to main and on all pull requests instead of every branch push, drop the GH_TOKEN requirement so checks run on forks, test the committed code across both target frameworks instead of regenerating it first, lint the C# sources with CSharpier, and add the install job, which installs the built package into a fresh console project from a local feed and constructs a SeamClient. Repoint _build and _publish at the NuGet artifact: _build packs the library with dotnet pack and uploads the .nupkg, and _publish pushes it to a registry with dotnet nuget push. The Publish workflow attaches the artifact to the GitHub release and publishes to NuGet.org and GitHub Packages; the codegen layer is no longer packed or published to npm. Split the mixed composite action into setup, which installs the .NET SDKs with cached NuGet restore and restores the CSharpier tool from the manifest, and setup-node, copied from seamapi/ruby, which installs dependencies from registry.npmjs.org without an auth token; the lockfile resolves nothing from npm.pkg.github.com. Run the Format workflow on pushes to non-main branches like the other repositories, and format the C# sources in addition to Prettier. Set CODEOWNERS to the sdk team. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XDjE2VAZ2meBSF5b3qpUMt --- .github/CODEOWNERS | 2 +- .github/actions/setup-node/action.yml | 46 +++++++++++ .github/actions/setup/action.yml | 62 +++++---------- .github/workflows/_build.yml | 21 +++-- .github/workflows/_publish.yml | 19 ++--- .github/workflows/check.yml | 106 +++++++++++++++++++++----- .github/workflows/format.yml | 10 ++- .github/workflows/generate.yml | 4 + .github/workflows/publish.yml | 32 ++++---- .github/workflows/version.yml | 6 +- 10 files changed, 194 insertions(+), 114 deletions(-) create mode 100644 .github/actions/setup-node/action.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 19b4470b..c3d9f4b0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @mxsdev +* @seamapi/sdk diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml new file mode 100644 index 00000000..d52103d3 --- /dev/null +++ b/.github/actions/setup-node/action.yml @@ -0,0 +1,46 @@ +--- +name: Setup Node.js +description: Setup Node.js and install dependencies. + +inputs: + node_version: + description: The Node.js version. + required: false + default: '24' + registry_url: + description: The Node.js package registry URL. + required: false + default: https://registry.npmjs.org + install_dependencies: + description: Install dependencies. + required: false + default: 'true' + +runs: + using: composite + steps: + - name: Setup Node.js + uses: actions/setup-node@v7 + if: inputs.install_dependencies == 'true' + with: + node-version: ${{ inputs.node_version }} + registry-url: ${{ inputs.registry_url }} + - name: Setup Node.js without cache + uses: actions/setup-node@v7 + if: inputs.install_dependencies == 'false' + with: + node-version: ${{ inputs.node_version }} + registry-url: ${{ inputs.registry_url }} + - name: Install dependencies + if: inputs.install_dependencies == 'true' + shell: bash + run: npm ci --ignore-scripts + - name: Rebuild Node.js modules + shell: bash + run: npm rebuild + - name: Run postinstall script + shell: bash + run: npm run postinstall --if-present + - name: Run prepare script + shell: bash + run: npm run prepare --if-present diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 99f9371c..767bff3b 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -1,19 +1,14 @@ --- name: Setup -description: Setup Node.js and install dependencies. +description: Setup .NET and install dependencies. inputs: - node_auth_token: - description: The Node.js auth token. - required: true - node_version: - description: The Node.js version. + dotnet_version: + description: The .NET SDK versions to install. required: false - default: '24' - registry_url: - description: The Node.js package registry URL. - required: false - default: https://npm.pkg.github.com + default: | + 6.0.x + 8.0.x install_dependencies: description: Install dependencies. required: false @@ -22,39 +17,22 @@ inputs: runs: using: composite steps: - - name: Setup Node.js - uses: actions/setup-node@v7 - if: inputs.install_dependencies == 'true' - with: - node-version: ${{ inputs.node_version }} - registry-url: ${{ inputs.registry_url }} - - name: Setup Node.js without cache - uses: actions/setup-node@v7 - if: inputs.install_dependencies == 'false' - with: - node-version: ${{ inputs.node_version }} - registry-url: ${{ inputs.registry_url }} - name: Setup .NET - uses: actions/setup-dotnet@v3 + uses: actions/setup-dotnet@v4 with: - dotnet-version: | - 7.0.x - 6.0.x - - name: Setup CSharpier - shell: bash - run: dotnet tool install csharpier -g --version 0.29.2 - - name: Install dependencies + dotnet-version: ${{ inputs.dotnet_version }} + - name: Cache NuGet packages + if: inputs.install_dependencies == 'true' + uses: actions/cache@v4 + with: + path: ~/.nuget/packages + key: nuget-${{ runner.os }}-${{ hashFiles('**/*.csproj', '.config/dotnet-tools.json') }} + restore-keys: nuget-${{ runner.os }}- + - name: Restore tools if: inputs.install_dependencies == 'true' shell: bash - run: npm ci --ignore-scripts - env: - NODE_AUTH_TOKEN: ${{ inputs.node_auth_token }} - - name: Rebuild Node.js modules - shell: bash - run: npm rebuild - - name: Run postinstall script - shell: bash - run: npm run postinstall --if-present - - name: Run prepare script + run: dotnet tool restore + - name: Restore dependencies + if: inputs.install_dependencies == 'true' shell: bash - run: npm run prepare --if-present + run: dotnet restore ./output/csharp diff --git a/.github/workflows/_build.yml b/.github/workflows/_build.yml index 92d5d76f..bbf91b16 100644 --- a/.github/workflows/_build.yml +++ b/.github/workflows/_build.yml @@ -4,15 +4,13 @@ name: _build on: workflow_call: inputs: - node_version: - description: The Node.js version. + dotnet_version: + description: The .NET SDK versions to install. type: string required: false - default: '24' - secrets: - node_auth_token: - description: The Node.js auth token. - required: true + default: | + 6.0.x + 8.0.x outputs: artifact_name: description: The artifact name. @@ -29,15 +27,14 @@ jobs: - name: Setup uses: ./.github/actions/setup with: - node_version: ${{ inputs.node_version }} - node_auth_token: ${{ secrets.node_auth_token }} + dotnet_version: ${{ inputs.dotnet_version }} + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Build run: npm run build - - name: Package - run: npm pack - name: Upload artifact uses: actions/upload-artifact@v7 with: name: build-${{ github.sha }} if-no-files-found: error - path: '*.tgz' + path: pkg/ diff --git a/.github/workflows/_publish.yml b/.github/workflows/_publish.yml index 005b1424..7390c16a 100644 --- a/.github/workflows/_publish.yml +++ b/.github/workflows/_publish.yml @@ -16,9 +16,6 @@ on: registry_token: description: The package registry token. required: true - node_auth_token: - description: The Node.js auth token. - required: true jobs: publish: @@ -32,19 +29,13 @@ jobs: uses: ./.github/actions/setup with: install_dependencies: 'false' - node_auth_token: ${{ secrets.node_auth_token }} - name: Download artifact uses: actions/download-artifact@v8 with: name: ${{ inputs.artifact_name }} - path: . - - name: Get meta - id: meta - run: echo "tgz=$(ls *.tgz | head -n1)" >> $GITHUB_OUTPUT + path: pkg/ - name: Publish - uses: JS-DevTools/npm-publish@v4 - with: - access: restricted - token: ${{ secrets.registry_token }} - registry: ${{ inputs.registry_url }} - package: ${{ steps.meta.outputs.tgz }} + run: dotnet nuget push "pkg/*.nupkg" --api-key "$REGISTRY_TOKEN" --source "$REGISTRY_URL" + env: + REGISTRY_TOKEN: ${{ secrets.registry_token }} + REGISTRY_URL: ${{ inputs.registry_url }} diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 52a28173..c38c2815 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -3,12 +3,15 @@ name: Check on: push: + branches: + - main + pull_request: branches: - '**' jobs: test: - name: Test (Node.js v${{ matrix.node }} on ${{ matrix.os_name }}) + name: Test (.NET ${{ matrix.framework }} on ${{ matrix.os_name }}) runs-on: ${{ matrix.os }} timeout-minutes: 30 strategy: @@ -16,9 +19,9 @@ jobs: matrix: os: - ubuntu-latest - node: - - '22' - - '24' + framework: + - net6.0 + - net8.0 include: - os: ubuntu-latest os_name: Linux @@ -27,13 +30,12 @@ jobs: uses: actions/checkout@v7 - name: Setup uses: ./.github/actions/setup - with: - node_version: ${{ matrix.node }} - node_auth_token: ${{ secrets.GH_TOKEN }} + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Test - run: npm test - lint: - name: Lint (Node.js v${{ matrix.node }}) + run: npm test -- --framework ${{ matrix.framework }} + test-codegen: + name: Test codegen (Node.js v${{ matrix.node }}) runs-on: ubuntu-latest timeout-minutes: 30 strategy: @@ -45,18 +47,27 @@ jobs: steps: - name: Checkout uses: actions/checkout@v7 - - name: Setup - uses: ./.github/actions/setup + - name: Setup Node.js + uses: ./.github/actions/setup-node with: node_version: ${{ matrix.node }} - node_auth_token: ${{ secrets.GH_TOKEN }} + - name: Test + run: npm run test:node + lint: + name: Lint + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout + uses: actions/checkout@v7 + - name: Setup + uses: ./.github/actions/setup + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Lint + run: npm run lint:csharp + - name: Lint with ESLint and Prettier run: npm run lint - build: - name: Build - uses: ./.github/workflows/_build.yml - secrets: - node_auth_token: ${{ secrets.GH_TOKEN }} typecheck: name: Typecheck (Node.js v${{ matrix.node }}) runs-on: ubuntu-latest @@ -70,10 +81,63 @@ jobs: steps: - name: Checkout uses: actions/checkout@v7 - - name: Setup - uses: ./.github/actions/setup + - name: Setup Node.js + uses: ./.github/actions/setup-node with: node_version: ${{ matrix.node }} - node_auth_token: ${{ secrets.GH_TOKEN }} - name: Typecheck run: npm run typecheck + build: + name: Build + uses: ./.github/workflows/_build.yml + install: + name: Install (.NET ${{ matrix.framework }} on ${{ matrix.os_name }}) + runs-on: ${{ matrix.os }} + timeout-minutes: 30 + needs: build + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + framework: + - net6.0 + - net8.0 + include: + - os: ubuntu-latest + os_name: Linux + steps: + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 6.0.x + 8.0.x + - name: Download artifact + uses: actions/download-artifact@v8 + with: + name: ${{ needs.build.outputs.artifact_name }} + path: pkg/ + - name: Get meta + id: meta + run: | + nupkg=$(basename pkg/Seam.*.nupkg .nupkg) + echo "version=${nupkg#Seam.}" >> $GITHUB_OUTPUT + - name: Create project + run: dotnet new console --framework ${{ matrix.framework }} --output smoke + - name: Create Program.cs + uses: DamianReeves/write-file-action@v1.3 + with: + write-mode: overwrite + path: smoke/Program.cs + contents: | + using Seam.Client; + + var seam = new SeamClient(apiToken: "seam_apikey1_token"); + Console.WriteLine($"Constructed {seam.GetType().FullName}"); + - name: Install + run: dotnet add smoke package Seam --version "$VERSION" --source "$GITHUB_WORKSPACE/pkg" + env: + VERSION: ${{ steps.meta.outputs.version }} + - name: Run + run: dotnet run --project smoke diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 6cbf0dae..1c60f3c9 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -2,8 +2,8 @@ name: Format on: - pull_request: - branches: + push: + branches-ignore: - main workflow_dispatch: {} @@ -29,9 +29,11 @@ jobs: passphrase: ${{ secrets.GPG_PASSPHRASE }} - name: Setup uses: ./.github/actions/setup - with: - node_auth_token: ${{ secrets.GH_TOKEN }} + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Format + run: npm run format:csharp + - name: Format with Prettier run: npm run format - name: Commit uses: stefanzweifel/git-auto-commit-action@v7 diff --git a/.github/workflows/generate.yml b/.github/workflows/generate.yml index ab507ff3..255dd128 100644 --- a/.github/workflows/generate.yml +++ b/.github/workflows/generate.yml @@ -31,6 +31,10 @@ jobs: uses: ./.github/actions/setup with: install_dependencies: 'false' + - name: Setup Node.js + uses: ./.github/actions/setup-node + with: + install_dependencies: 'false' - name: Normalize package-lock.json run: npm install - name: Generate code diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 67514f9b..47d88d67 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -12,8 +12,6 @@ jobs: build: name: Build uses: ./.github/workflows/_build.yml - secrets: - node_auth_token: ${{ secrets.GH_TOKEN }} release: name: GitHub Releases runs-on: ubuntu-latest @@ -24,12 +22,11 @@ jobs: uses: actions/checkout@v7 with: fetch-depth: 0 - - name: Install Dependencies - shell: bash - run: npm i tsx -g - - name: Package .NET module - shell: bash - run: npm run pack + - name: Download artifact + uses: actions/download-artifact@v8 + with: + name: ${{ needs.build.outputs.artifact_name }} + path: pkg/ - name: Generate release notes id: changelog run: | @@ -44,13 +41,17 @@ jobs: token: ${{ secrets.GH_TOKEN }} fail_on_unmatched_files: true prerelease: ${{ contains(github.ref_name, '-') }} - files: '*.nupkg' + files: pkg/* body_path: ${{ github.workspace }}/${{ steps.changelog.outputs.outfile }} - - name: Publish .NET module to nuget - shell: bash - run: dotnet nuget push *.nupkg --api-key "$NUGET_API_KEY" --source https://api.nuget.org/v3/index.json - env: - NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} + nuget: + name: NuGet.org + uses: ./.github/workflows/_publish.yml + needs: build + with: + artifact_name: ${{ needs.build.outputs.artifact_name }} + registry_url: https://api.nuget.org/v3/index.json + secrets: + registry_token: ${{ secrets.NUGET_API_KEY }} github: name: GitHub Packages uses: ./.github/workflows/_publish.yml @@ -60,7 +61,6 @@ jobs: needs: build with: artifact_name: ${{ needs.build.outputs.artifact_name }} - registry_url: https://npm.pkg.github.com + registry_url: https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json secrets: registry_token: ${{ secrets.GITHUB_TOKEN }} - node_auth_token: ${{ secrets.GH_TOKEN }} diff --git a/.github/workflows/version.yml b/.github/workflows/version.yml index d84f3b7e..3d9a72f8 100644 --- a/.github/workflows/version.yml +++ b/.github/workflows/version.yml @@ -29,9 +29,7 @@ jobs: git_committer_email: ${{ secrets.GIT_USER_EMAIL }} gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} passphrase: ${{ secrets.GPG_PASSPHRASE }} - - name: Setup - uses: ./.github/actions/setup - with: - node_auth_token: ${{ secrets.GH_TOKEN }} + - name: Setup Node.js + uses: ./.github/actions/setup-node - name: Cut ${{ github.event.inputs.version }} version run: npm version --sign-git-tag=true ${{ github.event.inputs.version }} From e75f4f906a37ab9a2bdd814b2ebf8b5a0ac25763 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 31 Jul 2026 18:31:20 +0000 Subject: [PATCH 04/10] docs: Update README badge and add development and publishing sections Point the workflow badge at seamapi/csharp instead of the old repository name, and document the development tasks, supported target frameworks, release flow, and license following the structure used by the other SDK repositories. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XDjE2VAZ2meBSF5b3qpUMt --- README.md | 112 +++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 85 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 246f4ccd..199c6a69 100644 --- a/README.md +++ b/README.md @@ -1,52 +1,110 @@ # Seam C# -[![GitHub Actions](https://github.com/seamapi/nextlove-sdk-csharp/actions/workflows/check.yml/badge.svg)](https://github.com/seamapi/nextlove-sdk-csharp/actions/workflows/check.yml) +[![GitHub Actions](https://github.com/seamapi/csharp/actions/workflows/check.yml/badge.svg)](https://github.com/seamapi/csharp/actions/workflows/check.yml) -Seam +SDK for the Seam API written in C#. -## Local setup +## Installation -For C# development, you will need to install `dotnet` +Use [NuGet](https://www.nuget.org/packages/Seam) to install. -Download the installer [here](https://learn.microsoft.com/en-us/dotnet/core/install/macos) +## Usage -Then, you may need to create a symlink +```csharp +using Seam.Client; -```bash -ln -s /usr/local/share/dotnet/dotnet /usr/local/bin/ -``` +var seam = new SeamClient(apiToken: "YOUR_API_KEY"); -Finally, install csharpier +var myDevices = seam.Devices.List(); -```bash -# if you don't yet have a .config/dotnet-tools.json file -dotnet new tool-manifest +Console.WriteLine("First Device Name: " + myDevices[0].Properties.Name); -dotnet tool install -g csharpier +var accessCode = seam.AccessCodes.Create(deviceId: myDevices[0].DeviceId, code: "1234"); ``` -## How to update the SDK +## Development and Testing -Once you've completed all the steps in the Local setup section, you can run the following command to update the SDK +### Quickstart -```bash -npm run generate +Install the [.NET SDK](https://dotnet.microsoft.com/download) 8.0 or later +and [Node.js](https://nodejs.org/), then run + +``` +$ git clone git@github.com:seamapi/csharp.git +$ cd csharp +$ npm install +$ dotnet tool restore ``` -## Installation +Primary development tasks are defined as npm scripts in `package.json` +and available via `npm run`. +View them with -Use [nuget](https://www.nuget.org/packages/Seam) to install. +``` +$ npm run +``` -## Usage +| Task | Command | +| ----------------- | -------------------------------------------- | +| Run the tests | `npm test` | +| Lint | `npm run lint:csharp` and `npm run lint` | +| Format | `npm run format:csharp` and `npm run format` | +| Build the package | `npm run build` | +| Generate the SDK | `npm run generate` | -```csharp -using Seam.Client; +C# sources are formatted by [CSharpier](https://csharpier.com/), +pinned as a local dotnet tool in `.config/dotnet-tools.json`. +TypeScript, JSON, YAML and Markdown are formatted by +[Prettier](https://prettier.io/) via `npm run format`. -var seam = new SeamClient(apiToken: "YOUR_API_KEY"); +Run the full suite with -var myDevices = seam.Devices.List(); +``` +$ npm test +``` -Console.WriteLine("First Device Name: " + myDevices[0].Properties.Name); +To run the tests for a single target framework, pass it as an argument -var accessCode = seam.AccessCodes.Create(deviceId: myDevices[0].DeviceId, code: "1234"); ``` +$ npm test -- --framework net8.0 +``` + +### Requirements + +The package targets .NET 6.0 and .NET 8.0. +Continuous integration exercises both target frameworks. + +### Publishing + +#### Automatic + +New versions are released automatically from `main` by the +[Semantic Release](.github/workflows/semantic-release.yml) workflow, +which reads [Conventional Commits](https://www.conventionalcommits.org/) +and dispatches the [Version](.github/workflows/version.yml) workflow. + +#### Manual + +Run the [Version](.github/workflows/version.yml) workflow with the +version to cut. +It runs `npm version`, which bumps the `version` field in `package.json`, +regenerates `Seam.csproj` with that version, creates a signed `v*` git tag +and pushes it. +Pushing the tag triggers the [Publish](.github/workflows/publish.yml) +workflow, which packs the library with `dotnet pack` and pushes the +package to [NuGet](https://www.nuget.org/packages/Seam) and GitHub +Packages. + +> The version lives in `package.json`, the development manifest that +> drives the codegen, and is injected into `Seam.csproj` by +> `src/generate-csproj.ts`. +> The injection runs from `src/version.ts`, wired to the `version` +> lifecycle script, which npm runs after the bump but before the commit, +> so the updated project file is part of the tagged commit and MSBuild +> surfaces the version at runtime through +> `AssemblyInformationalVersionAttribute`. +> Never edit the version in `Seam.csproj` by hand. + +## License + +This C# SDK is licensed under the [MIT license](LICENSE.txt). From 69c008c69597bed381590c63483a02493ecef46e Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 31 Jul 2026 18:38:37 +0000 Subject: [PATCH 05/10] ci: Add the local feed alongside the default sources in the install job Passing --source to dotnet add package replaces the source list instead of extending it, so the transitive dependencies could not be resolved on a runner with a cold NuGet cache. Declare the local feed in a nuget.config next to the smoke project, which inherits nuget.org from the user configuration, mirroring how the PHP install job declares a path repository in composer.json. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XDjE2VAZ2meBSF5b3qpUMt --- .github/workflows/check.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c38c2815..feb26336 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -125,6 +125,18 @@ jobs: echo "version=${nupkg#Seam.}" >> $GITHUB_OUTPUT - name: Create project run: dotnet new console --framework ${{ matrix.framework }} --output smoke + - name: Create nuget.config + uses: DamianReeves/write-file-action@v1.3 + with: + write-mode: overwrite + path: smoke/nuget.config + contents: | + + + + + + - name: Create Program.cs uses: DamianReeves/write-file-action@v1.3 with: @@ -136,7 +148,7 @@ jobs: var seam = new SeamClient(apiToken: "seam_apikey1_token"); Console.WriteLine($"Constructed {seam.GetType().FullName}"); - name: Install - run: dotnet add smoke package Seam --version "$VERSION" --source "$GITHUB_WORKSPACE/pkg" + run: dotnet add smoke package Seam --version "$VERSION" env: VERSION: ${{ steps.meta.outputs.version }} - name: Run From bde7cc2d141003940ca796b698c002357b504a69 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 31 Jul 2026 18:44:57 +0000 Subject: [PATCH 06/10] fix(package)!: Drop EOL target frameworks and target net8.0 and net10.0 Target the supported LTS releases, .NET 8.0 and .NET 10.0, instead of keeping the EOL net6.0 floor. CI installs the matching SDKs and exercises both target frameworks in the test and install jobs. BREAKING CHANGE: The package no longer targets net6.0, so projects on EOL frameworks older than net8.0 cannot restore new versions. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XDjE2VAZ2meBSF5b3qpUMt --- .github/actions/setup/action.yml | 2 +- .github/workflows/_build.yml | 2 +- .github/workflows/check.yml | 6 +++--- README.md | 4 ++-- output/csharp/src/Seam.Test/Seam.Test.csproj | 2 +- output/csharp/src/Seam/Seam.csproj | 2 +- src/generate-csproj.ts | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 767bff3b..c5ec5644 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -7,8 +7,8 @@ inputs: description: The .NET SDK versions to install. required: false default: | - 6.0.x 8.0.x + 10.0.x install_dependencies: description: Install dependencies. required: false diff --git a/.github/workflows/_build.yml b/.github/workflows/_build.yml index bbf91b16..b90e7c54 100644 --- a/.github/workflows/_build.yml +++ b/.github/workflows/_build.yml @@ -9,8 +9,8 @@ on: type: string required: false default: | - 6.0.x 8.0.x + 10.0.x outputs: artifact_name: description: The artifact name. diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index feb26336..b016c69f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -20,8 +20,8 @@ jobs: os: - ubuntu-latest framework: - - net6.0 - net8.0 + - net10.0 include: - os: ubuntu-latest os_name: Linux @@ -101,8 +101,8 @@ jobs: os: - ubuntu-latest framework: - - net6.0 - net8.0 + - net10.0 include: - os: ubuntu-latest os_name: Linux @@ -111,8 +111,8 @@ jobs: uses: actions/setup-dotnet@v4 with: dotnet-version: | - 6.0.x 8.0.x + 10.0.x - name: Download artifact uses: actions/download-artifact@v8 with: diff --git a/README.md b/README.md index 199c6a69..2d0eff12 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ var accessCode = seam.AccessCodes.Create(deviceId: myDevices[0].DeviceId, code: ### Quickstart -Install the [.NET SDK](https://dotnet.microsoft.com/download) 8.0 or later +Install the [.NET SDK](https://dotnet.microsoft.com/download) 10.0 or later and [Node.js](https://nodejs.org/), then run ``` @@ -71,7 +71,7 @@ $ npm test -- --framework net8.0 ### Requirements -The package targets .NET 6.0 and .NET 8.0. +The package targets .NET 8.0 and .NET 10.0, the supported LTS releases. Continuous integration exercises both target frameworks. ### Publishing diff --git a/output/csharp/src/Seam.Test/Seam.Test.csproj b/output/csharp/src/Seam.Test/Seam.Test.csproj index 7a5dce1b..6f275428 100644 --- a/output/csharp/src/Seam.Test/Seam.Test.csproj +++ b/output/csharp/src/Seam.Test/Seam.Test.csproj @@ -1,7 +1,7 @@ - net6.0;net8.0 + net8.0;net10.0 enable enable diff --git a/output/csharp/src/Seam/Seam.csproj b/output/csharp/src/Seam/Seam.csproj index 9bc3e25a..73b0794f 100644 --- a/output/csharp/src/Seam/Seam.csproj +++ b/output/csharp/src/Seam/Seam.csproj @@ -1,7 +1,7 @@ - net6.0;net8.0 + net8.0;net10.0 enable annotations diff --git a/src/generate-csproj.ts b/src/generate-csproj.ts index cb4555b6..f04b8eb1 100644 --- a/src/generate-csproj.ts +++ b/src/generate-csproj.ts @@ -63,7 +63,7 @@ export const csprojTemplate = (version: string, dotNetVersions: string[]) => const main = async () => { writeFileSync( './output/csharp/src/Seam/Seam.csproj', - csprojTemplate(version, ['6.0', '8.0']), + csprojTemplate(version, ['8.0', '10.0']), ) } From cc1058f0cb2c18a084faefabf470c207c32a58cf Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 31 Jul 2026 18:50:50 +0000 Subject: [PATCH 07/10] chore: Define development tasks with just and drop the TypeScript test layer Reduce the npm layer to what it exists for: driving the codegen (generate, lint, format, typecheck for the TypeScript sources) and filling the version-injection hole in the publish flow. The .NET tasks (build, test, lint, format) are defined in a justfile, since .NET has no built-in task runner, and CI runs them via just with the setup action installing it. Remove the AVA test layer: this repository ships no TypeScript, so the codegen helper tests, ava.config.js, .c8rc.json and the ava and c8 dependencies are gone along with the test-codegen job. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XDjE2VAZ2meBSF5b3qpUMt --- .c8rc.json | 10 - .github/actions/setup/action.yml | 2 + .github/workflows/_build.yml | 4 +- .github/workflows/check.yml | 25 +- .github/workflows/format.yml | 2 +- .gitignore | 1 - README.md | 36 +- ava.config.js | 11 - justfile | 15 + package-lock.json | 1667 ++---------------------------- package.json | 15 +- test/basic.test.ts | 25 - 12 files changed, 108 insertions(+), 1705 deletions(-) delete mode 100644 .c8rc.json delete mode 100644 ava.config.js create mode 100644 justfile delete mode 100644 test/basic.test.ts diff --git a/.c8rc.json b/.c8rc.json deleted file mode 100644 index 8734c3d4..00000000 --- a/.c8rc.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "exclude": [ - "**/index.ts", - "package/**/*.ts", - "examples/**/*.ts", - "**/*.test.ts", - "ava.config.js" - ], - "reporter": ["html", "lcov", "text"] -} diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index c5ec5644..023d9c4d 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -21,6 +21,8 @@ runs: uses: actions/setup-dotnet@v4 with: dotnet-version: ${{ inputs.dotnet_version }} + - name: Setup just + uses: extractions/setup-just@v2 - name: Cache NuGet packages if: inputs.install_dependencies == 'true' uses: actions/cache@v4 diff --git a/.github/workflows/_build.yml b/.github/workflows/_build.yml index b90e7c54..0cf4e392 100644 --- a/.github/workflows/_build.yml +++ b/.github/workflows/_build.yml @@ -28,10 +28,8 @@ jobs: uses: ./.github/actions/setup with: dotnet_version: ${{ inputs.dotnet_version }} - - name: Setup Node.js - uses: ./.github/actions/setup-node - name: Build - run: npm run build + run: just build - name: Upload artifact uses: actions/upload-artifact@v7 with: diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index b016c69f..0219377d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -30,29 +30,8 @@ jobs: uses: actions/checkout@v7 - name: Setup uses: ./.github/actions/setup - - name: Setup Node.js - uses: ./.github/actions/setup-node - - name: Test - run: npm test -- --framework ${{ matrix.framework }} - test-codegen: - name: Test codegen (Node.js v${{ matrix.node }}) - runs-on: ubuntu-latest - timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - node: - - '22' - - '24' - steps: - - name: Checkout - uses: actions/checkout@v7 - - name: Setup Node.js - uses: ./.github/actions/setup-node - with: - node_version: ${{ matrix.node }} - name: Test - run: npm run test:node + run: just test ${{ matrix.framework }} lint: name: Lint runs-on: ubuntu-latest @@ -65,7 +44,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node - name: Lint - run: npm run lint:csharp + run: just lint - name: Lint with ESLint and Prettier run: npm run lint typecheck: diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index 1c60f3c9..3e8d2855 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -32,7 +32,7 @@ jobs: - name: Setup Node.js uses: ./.github/actions/setup-node - name: Format - run: npm run format:csharp + run: just format - name: Format with Prettier run: npm run format - name: Commit diff --git a/.gitignore b/.gitignore index ae2cf87c..059c5726 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,6 @@ pkg/ *.js *.js.map !src/**/*.d.ts -!ava.config.js # Build directories package diff --git a/README.md b/README.md index 2d0eff12..3a768436 100644 --- a/README.md +++ b/README.md @@ -26,8 +26,8 @@ var accessCode = seam.AccessCodes.Create(deviceId: myDevices[0].DeviceId, code: ### Quickstart -Install the [.NET SDK](https://dotnet.microsoft.com/download) 10.0 or later -and [Node.js](https://nodejs.org/), then run +Install the [.NET SDK](https://dotnet.microsoft.com/download) 10.0 or later, +[just](https://just.systems/) and [Node.js](https://nodejs.org/), then run ``` $ git clone git@github.com:seamapi/csharp.git @@ -36,37 +36,39 @@ $ npm install $ dotnet tool restore ``` -Primary development tasks are defined as npm scripts in `package.json` -and available via `npm run`. +Primary development tasks are defined in the `justfile` +and available via `just`. View them with ``` -$ npm run +$ just --list ``` -| Task | Command | -| ----------------- | -------------------------------------------- | -| Run the tests | `npm test` | -| Lint | `npm run lint:csharp` and `npm run lint` | -| Format | `npm run format:csharp` and `npm run format` | -| Build the package | `npm run build` | -| Generate the SDK | `npm run generate` | - +| Task | Command | +| ----------------- | ------------------ | +| Run the tests | `just test` | +| Lint | `just lint` | +| Format | `just format` | +| Build the package | `just build` | +| Generate the SDK | `npm run generate` | + +The npm scripts only drive the codegen layer: `npm run generate` +regenerates the SDK, and `npm run lint` and `npm run format` cover the +TypeScript, JSON, YAML and Markdown sources with ESLint and +[Prettier](https://prettier.io/). C# sources are formatted by [CSharpier](https://csharpier.com/), pinned as a local dotnet tool in `.config/dotnet-tools.json`. -TypeScript, JSON, YAML and Markdown are formatted by -[Prettier](https://prettier.io/) via `npm run format`. Run the full suite with ``` -$ npm test +$ just test ``` To run the tests for a single target framework, pass it as an argument ``` -$ npm test -- --framework net8.0 +$ just test net8.0 ``` ### Requirements diff --git a/ava.config.js b/ava.config.js deleted file mode 100644 index 8bfacc71..00000000 --- a/ava.config.js +++ /dev/null @@ -1,11 +0,0 @@ -export default () => { - return { - files: ['**/*.test.ts', '!package/**/*'], - watchMode: { - ignoreChanges: ['tmp/**/*'], - }, - extensions: ['ts'], - workerThreads: false, - nodeArguments: ['--import=tsx'], - } -} diff --git a/justfile b/justfile new file mode 100644 index 00000000..cddb9e88 --- /dev/null +++ b/justfile @@ -0,0 +1,15 @@ +# Build the package +build: + dotnet pack --configuration Release --output pkg ./output/csharp/src/Seam + +# Run the tests +test framework="": + dotnet test ./output/csharp {{ if framework == "" { "" } else { "--framework " + framework } }} + +# Lint +lint: + dotnet csharpier --check ./output/csharp + +# Format +format: + dotnet csharpier ./output/csharp diff --git a/package-lock.json b/package-lock.json index 46f7cfe4..4fcc7f6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,8 +12,6 @@ "@seamapi/blueprint": "^1.0.0", "@seamapi/smith": "^1.1.0", "@seamapi/types": "1.975.0", - "ava": "^8.0.1", - "c8": "^12.0.0", "change-case": "^5.4.4", "execa": "^10.0.1", "prettier": "^3.0.0" @@ -23,26 +21,6 @@ "npm": ">=10.9.4" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", - "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@cto.af/wtf8": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/@cto.af/wtf8/-/wtf8-0.0.5.tgz", - "integrity": "sha512-LfUFi+Vv4eDzj+XAtR89e3wwjXA/NZjUSwU5NhwbBrLecxPaBYFy3exCuc1j+D4UZeOVdqlsl8G7LmOt18V0tg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - } - }, "node_modules/@esbuild/aix-ppc64": { "version": "0.28.1", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.1.tgz", @@ -744,79 +722,6 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha512-+Sg6GCR/wy1oSmQDFq4LQDAhm3ETKnorxN+y5nbLULOR3P0c14f2Wurzj3/xqPXtasLFfHd5iRFQ7AJt4KH2cw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-2.0.3.tgz", - "integrity": "sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "consola": "^3.2.3", - "detect-libc": "^2.0.0", - "https-proxy-agent": "^7.0.5", - "node-fetch": "^2.6.7", - "nopt": "^8.0.0", - "semver": "^7.5.3", - "tar": "^7.4.0" - }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" - }, - "engines": { - "node": ">=18" - } - }, "node_modules/@metalsmith/layouts": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/@metalsmith/layouts/-/layouts-2.7.0.tgz", @@ -842,6 +747,7 @@ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -856,6 +762,7 @@ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 8" } @@ -866,6 +773,7 @@ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -874,42 +782,6 @@ "node": ">= 8" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.4.0.tgz", - "integrity": "sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -1038,14 +910,8 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", - "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -1354,66 +1220,6 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@vercel/nft": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-1.10.2.tgz", - "integrity": "sha512-w+WyX5Ulmj4dtTZrxaulqrjaLZHSbnPzx75SJsTNYmotKsqn1JlLnDJa+lz5hn90HJofhl/2MAtw0mCrgM3qYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@mapbox/node-pre-gyp": "^2.0.0", - "@rollup/pluginutils": "^5.1.3", - "acorn": "^8.6.0", - "acorn-import-attributes": "^1.9.5", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^13.0.0", - "graceful-fs": "^4.2.9", - "node-gyp-build": "^4.2.2", - "picomatch": "^4.0.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@vercel/nft/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@vercel/nft/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/abbrev": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", - "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/acorn": { "version": "8.17.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", @@ -1427,16 +1233,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -1447,29 +1243,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", - "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, "node_modules/ajv": { "version": "6.15.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", @@ -1488,32 +1261,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1539,16 +1286,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-includes": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", @@ -1692,29 +1429,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrgv": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz", - "integrity": "sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/arrify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz", - "integrity": "sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -1733,89 +1447,6 @@ "node": ">= 0.4" } }, - "node_modules/async-sema": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz", - "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", - "dev": true, - "license": "MIT" - }, - "node_modules/ava": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ava/-/ava-8.0.1.tgz", - "integrity": "sha512-YlwwL5HX2EJRE75e2LR8nio8lKAJ702sFbv0QYnhzngAjyo9wB+Xg4JZh5f432khlWfVD5OQ93rrRopEXJptpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vercel/nft": "^1.5.0", - "acorn": "^8.16.0", - "acorn-walk": "^8.3.5", - "ansi-styles": "^6.2.3", - "arrgv": "^1.0.2", - "arrify": "^3.0.0", - "callsites": "^4.2.0", - "cbor2": "^2.3.0", - "chalk": "^5.6.2", - "chunkd": "^2.0.1", - "ci-info": "^4.4.0", - "ci-parallel-vars": "^1.0.1", - "cli-truncate": "^6.0.0", - "code-excerpt": "^4.0.0", - "common-path-prefix": "^3.0.0", - "concordance": "^5.0.4", - "currently-unhandled": "^0.4.1", - "debug": "^4.4.3", - "emittery": "^2.0.0", - "figures": "^6.1.0", - "globby": "^16.2.0", - "ignore-by-default": "^2.1.0", - "indent-string": "^5.0.0", - "is-plain-object": "^5.0.0", - "is-promise": "^4.0.0", - "matcher": "^6.0.0", - "memoize": "^11.0.0", - "ms": "^2.1.3", - "p-map": "^7.0.4", - "package-config": "^5.0.0", - "picomatch": "^4.0.4", - "plur": "^6.0.0", - "pretty-ms": "^9.3.0", - "resolve-cwd": "^3.0.0", - "slash": "^5.1.0", - "stack-utils": "^2.0.6", - "supertap": "^3.0.1", - "temp-dir": "^3.0.0", - "write-file-atomic": "^7.0.1", - "yargs": "^18.0.0" - }, - "bin": { - "ava": "entrypoints/cli.js" - }, - "engines": { - "node": "^22.20 || ^24.12 || >=26" - }, - "peerDependencies": { - "@ava/typescript": "*" - }, - "peerDependenciesMeta": { - "@ava/typescript": { - "optional": true - } - } - }, - "node_modules/ava/node_modules/picomatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", - "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -1839,23 +1470,6 @@ "dev": true, "license": "MIT" }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", - "integrity": "sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w==", - "dev": true, - "license": "MIT" - }, "node_modules/brace-expansion": { "version": "1.1.16", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", @@ -1873,6 +1487,7 @@ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -1880,40 +1495,6 @@ "node": ">=8" } }, - "node_modules/c8": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/c8/-/c8-12.0.0.tgz", - "integrity": "sha512-4zpJvrd1nKWutnnKC2pXkFmb6iM1l+ffN//o1CzlTNwW7GSOs9a1xrLqkC48nU8oEkjmPZLPiwMsIaOvoF4Pqg==", - "dev": true, - "license": "ISC", - "dependencies": { - "@bcoe/v8-coverage": "^1.0.1", - "@istanbuljs/schema": "^0.1.3", - "find-up": "^5.0.0", - "foreground-child": "^3.1.1", - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-report": "^3.0.1", - "istanbul-reports": "^3.1.6", - "test-exclude": "^8.0.0", - "v8-to-istanbul": "^9.0.0", - "yargs": "^18.0.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "c8": "bin/c8.js" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - }, - "peerDependencies": { - "monocart-coverage-reports": "^2" - }, - "peerDependenciesMeta": { - "monocart-coverage-reports": { - "optional": true - } - } - }, "node_modules/call-bind": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", @@ -1964,163 +1545,21 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-4.2.0.tgz", - "integrity": "sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==", + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/cbor2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cbor2/-/cbor2-2.3.0.tgz", - "integrity": "sha512-76WB3hq8BoaGkMkBVJ27fW5LJU+qqDLEpgRNCG/SYKhODWXpVPOTD4UcUto3IEzYLA52nsvbhb0wabhHDn3qXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@cto.af/wtf8": "0.0.5" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/change-case": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/chownr": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/chunkd": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz", - "integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ci-parallel-vars": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz", - "integrity": "sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-truncate": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-6.1.1.tgz", - "integrity": "sha512-06p9vyLahLa4zkGcgsGxU6iEkSOiuI4fhCH6Emhe2lPAcoUv73n72DnODsnHA+5wwXGnV0n9M9/qOQJSjYhFhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^9.0.0", - "string-width": "^8.2.0" - }, - "engines": { - "node": ">=22" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", - "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA==", + "node_modules/co": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", + "integrity": "sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA==", "dev": true, "license": "MIT", "peer": true }, - "node_modules/code-excerpt": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", - "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", - "dev": true, - "license": "MIT", - "dependencies": { - "convert-to-spaces": "^2.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -2154,13 +1593,6 @@ "node": ">=16" } }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", - "dev": true, - "license": "ISC" - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2168,59 +1600,13 @@ "dev": true, "license": "MIT" }, - "node_modules/concordance": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz", - "integrity": "sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==", - "dev": true, - "license": "ISC", - "dependencies": { - "date-time": "^3.1.0", - "esutils": "^2.0.3", - "fast-diff": "^1.2.0", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.15", - "md5-hex": "^3.0.1", - "semver": "^7.3.2", - "well-known-symbols": "^2.0.0" - }, - "engines": { - "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" - } - }, - "node_modules/consola": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", - "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-to-spaces": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", - "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2230,19 +1616,6 @@ "node": ">= 8" } }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -2297,19 +1670,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/date-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz", - "integrity": "sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==", - "dev": true, - "license": "MIT", - "dependencies": { - "time-zone": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/debug": { "version": "4.4.3", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", @@ -2442,16 +1802,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -2480,26 +1830,6 @@ "node": ">= 0.4" } }, - "node_modules/emittery": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-2.0.0.tgz", - "integrity": "sha512-FLtgn/CGBXiX3ZtPAm5q4LWWepHChOt55J9u01WFu3dyap2U7IwptlrqoE1COR/kxwdy/DOxIBALSxIW449I1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=22" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "dev": true, - "license": "MIT" - }, "node_modules/enhanced-resolve": { "version": "5.24.4", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.4.tgz", @@ -2756,16 +2086,6 @@ "@esbuild/win32-x64": "0.28.1" } }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3215,6 +2535,7 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "license": "BSD-2-Clause", + "peer": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -3261,13 +2582,6 @@ "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true, - "license": "MIT" - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3340,19 +2654,13 @@ "license": "MIT", "peer": true }, - "node_modules/fast-diff": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", - "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3386,6 +2694,7 @@ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "reusify": "^1.0.4" } @@ -3420,19 +2729,13 @@ "node": ">=16.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "license": "MIT" - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3446,6 +2749,7 @@ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -3457,19 +2761,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-up-simple": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.1.tgz", - "integrity": "sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -3509,23 +2800,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -3596,29 +2870,6 @@ "node": ">= 0.4" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", - "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -3730,6 +2981,7 @@ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -3807,81 +3059,24 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.2.tgz", - "integrity": "sha512-NLvV9ubZ6NDsJaOpKPy3cQeJpKi9DcWiyCiFUpJPA0YihRqiE6RWaLUmgNNPr8MgPpLZjnBjSmou7uZBRJv9wA==", + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.5", - "is-path-inside": "^4.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.4.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/globby/node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby/node_modules/ignore": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", - "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/globby/node_modules/unicorn-magic": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz", - "integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/graceful-fs": { @@ -3976,6 +3171,7 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -4051,27 +3247,6 @@ "node": ">= 0.4" } }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true, - "license": "MIT" - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/human-signals": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", @@ -4092,16 +3267,6 @@ "node": ">= 4" } }, - "node_modules/ignore-by-default": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", - "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10 <11 || >=12 <13 || >=14" - } - }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -4131,19 +3296,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/inputformat-to-jstransformer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/inputformat-to-jstransformer/-/inputformat-to-jstransformer-1.4.0.tgz", @@ -4173,19 +3325,6 @@ "node": ">= 0.4" } }, - "node_modules/irregular-plurals": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-4.2.0.tgz", - "integrity": "sha512-bW9UXHL7bnUcNtTo+9ccSngbxc+V40H32IgvdVin0Xs8gbo+AVYD5g/72ce/54Kjfhq66vcZr8H8TKEvsifeOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -4374,22 +3513,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-fullwidth-code-point": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", - "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-generator-function": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", @@ -4455,6 +3578,7 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=0.12.0" } @@ -4496,6 +3620,7 @@ "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -4516,23 +3641,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-regex": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", @@ -4724,46 +3832,8 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC", + "peer": true }, "node_modules/iterator.prototype": { "version": "1.1.5", @@ -4794,16 +3864,6 @@ "jiti": "lib/jiti-cli.mjs" } }, - "node_modules/js-string-escape": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", - "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -4959,25 +4019,13 @@ "node": ">= 0.8.0" } }, - "node_modules/load-json-file": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz", - "integrity": "sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -4988,13 +4036,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.clonedeepwith": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeepwith/-/lodash.clonedeepwith-4.5.0.tgz", @@ -5034,51 +4075,6 @@ "node": "20 || >=22" } }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/matcher": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/matcher/-/matcher-6.0.0.tgz", - "integrity": "sha512-TzDerdcNtI79w7Av4GT57bLdElPA/VAkjqdMZv8yhuc8geU2z0ljW9anXbX/55aHEMTpYypZb1lxsA/46r9oOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/matcher/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -5089,41 +4085,13 @@ "node": ">= 0.4" } }, - "node_modules/md5-hex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz", - "integrity": "sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==", - "dev": true, - "license": "MIT", - "dependencies": { - "blueimp-md5": "^2.10.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/memoize": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/memoize/-/memoize-11.0.0.tgz", - "integrity": "sha512-cjsfZaC9b1clqPeIVMbb5dLHSXgdgGWGxdAU3oTUUkHiwWTKTBNnSmcqWJncNjYtBi3S8Rp0c5GIiyGztR8TRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.1" - }, - "engines": { - "node": ">=22" - }, - "funding": { - "url": "https://github.com/sindresorhus/memoize?sponsor=1" - } - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">= 8" } @@ -5191,6 +4159,7 @@ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5199,19 +4168,6 @@ "node": ">=8.6" } }, - "node_modules/mimic-function": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", - "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", @@ -5245,19 +4201,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/minizlib": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.1.2" - }, - "engines": { - "node": ">= 18" - } - }, "node_modules/mkdirp": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", @@ -5444,55 +4387,6 @@ "semver": "bin/semver.js" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", - "dev": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/nopt": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", - "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/npm-run-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", @@ -5690,6 +4584,7 @@ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5706,6 +4601,7 @@ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -5722,6 +4618,7 @@ "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -5729,32 +4626,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-config": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/package-config/-/package-config-5.0.0.tgz", - "integrity": "sha512-GYTTew2slBcYdvRHqjhwaaydVMvn/qrGC323+nKclYioNSLTDUM/lGgtGTgyHVtYcozb+XkE8CNhwcraOmZ9Mg==", + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "find-up-simple": "^1.0.0", - "load-json-file": "^7.0.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "callsites": "^3.0.0" + "callsites": "^3.0.0" }, "engines": { "node": ">=6" @@ -5790,6 +4670,7 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -5800,6 +4681,7 @@ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -5845,6 +4727,7 @@ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8.6" }, @@ -5852,22 +4735,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/plur": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-6.0.0.tgz", - "integrity": "sha512-Y9wXQivjRX0REtwpA9+n0bYYypWESn3cWtW2vazymw711qn+AQXxzZjRqhANYGBLIMC1UzVdpwe/1hHQwHfwng==", - "dev": true, - "license": "MIT", - "dependencies": { - "irregular-plurals": "^4.2.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -5988,7 +4855,8 @@ "url": "https://feross.org/support" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/react-is": { "version": "16.13.1", @@ -6073,29 +4941,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -6123,6 +4968,7 @@ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", + "peer": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -6148,6 +4994,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "queue-microtask": "^1.2.2" } @@ -6235,22 +5082,6 @@ "node": ">=10" } }, - "node_modules/serialize-error": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -6306,6 +5137,7 @@ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6319,6 +5151,7 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -6418,6 +5251,7 @@ "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=14.16" }, @@ -6425,23 +5259,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/slice-ansi": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-9.0.0.tgz", - "integrity": "sha512-SO/3iYL5S3W57LLEniscOGPZgOqZUPCx6d3dB+52B80yJ0XstzsC/eV8gnA4tM3MHDrKz+OCFSLNjswdSC+/bA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.3", - "is-fullwidth-code-point": "^5.1.0" - }, - "engines": { - "node": ">=22" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6458,30 +5275,8 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "BSD-3-Clause", + "peer": true }, "node_modules/stat-mode": { "version": "1.0.0", @@ -6508,23 +5303,6 @@ "node": ">= 0.4" } }, - "node_modules/string-width": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz", - "integrity": "sha512-GaPUh5gfdrYzqeVNZvUfT23vYYxXzKYidUcnMtJg/3rxRV63EFZy3k6xfKlmfeJD0176lnUV/Usr3XcwSvFzpg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.5.0", - "strip-ansi": "^7.1.2" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/string.prototype.matchall": { "version": "4.0.12", "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", @@ -6624,22 +5402,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -6688,52 +5450,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supertap": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", - "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^5.0.0", - "js-yaml": "^3.14.1", - "serialize-error": "^7.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/supertap/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/supertap/node_modules/js-yaml": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.15.0.tgz", - "integrity": "sha512-ttBQIIQPDeLjpPOohtUdXuXUVoA2uIB6fEH9HyJ7234s5mBJ5wTx20njxplLZQgLaOfpmPQA7X2t5AX6tIPbog==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6768,97 +5491,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/tar": { - "version": "7.5.22", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", - "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/test-exclude": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-8.0.0.tgz", - "integrity": "sha512-ZOffsNrXYggvU1mDGHk54I96r26P8SyMjO5slMKSc7+IWmtB/MQKnEC2fP51imB3/pT6YK5cT5E8f+Dd9KdyOQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^13.0.6", - "minimatch": "^10.2.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/test-exclude/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz", - "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "10.2.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", - "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.8" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/time-zone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz", - "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", @@ -6913,6 +5545,7 @@ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6920,13 +5553,6 @@ "node": ">=8.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, - "license": "MIT" - }, "node_modules/ts-api-utils": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", @@ -7023,19 +5649,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -7218,21 +5831,6 @@ "punycode": "^2.1.0" } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/ware": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/ware/-/ware-1.3.0.tgz", @@ -7244,40 +5842,13 @@ "wrap-fn": "^0.1.0" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/well-known-symbols": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz", - "integrity": "sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=6" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -7412,42 +5983,6 @@ "license": "MIT", "peer": true }, - "node_modules/wrap-ansi": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", - "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/wrap-fn": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/wrap-fn/-/wrap-fn-0.1.5.tgz", @@ -7459,83 +5994,13 @@ "co": "3.1.0" } }, - "node_modules/write-file-atomic": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz", - "integrity": "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==", - "dev": true, - "license": "ISC", - "dependencies": { - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^20.17.0 || >=22.9.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/yargs": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.1.0.tgz", - "integrity": "sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^9.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "string-width": "^8.2.1", - "y18n": "^5.0.5", - "yargs-parser": "^22.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", - "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^20.19.0 || ^22.12.0 || >=23" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index 4eeba5e2..161bc8ec 100644 --- a/package.json +++ b/package.json @@ -10,20 +10,11 @@ "generate": "tsx codegen/smith.ts", "postgenerate": "tsx src/postgenerate.ts", "generate:csproj": "tsx src/generate-csproj.ts", - "build": "dotnet pack --configuration Release --output pkg ./output/csharp/src/Seam", - "test": "dotnet test ./output/csharp", - "test:node": "c8 ava", - "test:update": "ava --update-snapshots", - "test:watch": "ava --watch", - "test:debug": "ava debug --break", + "typecheck": "tsc", "lint": "eslint .", "postlint": "prettier --check --ignore-path .gitignore --ignore-path .prettierignore .", - "lint:csharp": "dotnet csharpier --check ./output/csharp", "format": "prettier --write --ignore-path .gitignore --ignore-path .prettierignore .", - "preformat": "eslint --fix .", - "format:csharp": "dotnet csharpier ./output/csharp", - "typecheck": "tsc", - "report": "c8 report" + "preformat": "eslint --fix ." }, "engines": { "node": ">=22.11.0", @@ -43,8 +34,6 @@ "@seamapi/blueprint": "^1.0.0", "@seamapi/smith": "^1.1.0", "@seamapi/types": "1.975.0", - "ava": "^8.0.1", - "c8": "^12.0.0", "change-case": "^5.4.4", "execa": "^10.0.1", "prettier": "^3.0.0" diff --git a/test/basic.test.ts b/test/basic.test.ts deleted file mode 100644 index 9276326b..00000000 --- a/test/basic.test.ts +++ /dev/null @@ -1,25 +0,0 @@ -import test from 'ava' - -import { csDoc, csString } from '../codegen/lib/handlebars-helpers.js' - -test('basic test', (t) => { - t.pass() -}) - -test('csDoc emits escaped C# XML documentation for multiline prose', (t) => { - t.is( - csDoc('Use & "account".\nSecond line.'), - [ - '/// ', - '/// Use <device> & "account".', - '/// Second line.', - '/// ', - ].join('\n'), - ) - t.is(csDoc(' '), '') -}) - -test('csString escapes schema deprecation messages', (t) => { - t.is(csString('Use "new" at C:\\sdk'), 'Use \\"new\\" at C:\\\\sdk') - t.is(csString(), 'Deprecated.') -}) From 3a44e192152e8a3b5a8fd07c5c242d62b021b61a Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Fri, 31 Jul 2026 11:57:54 -0700 Subject: [PATCH 08/10] Enhance .gitignore for modern .NET projects Added a comprehensive .gitignore for .NET projects, including entries for build results, temporary files, and files generated by popular .NET tools. --- .gitignore | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/.gitignore b/.gitignore index 059c5726..d5ce8719 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,64 @@ obj/ pkg/ *.nupkg +## A streamlined .gitignore for modern .NET projects +## including temporary files, build results, and +## files generated by popular .NET tools. If you are +## developing with Visual Studio, the VS .gitignore +## https://github.com/github/gitignore/blob/main/VisualStudio.gitignore +## has more thorough IDE-specific entries. +## +## Get latest from https://github.com/github/gitignore/blob/main/Dotnet.gitignore + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg + +# dotenv environment variables file +.env + +# Others +~$* +*~ +CodeCoverage/ + +# MSBuild Binary and Structured Log +*.binlog + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + # TypeScript build output *.d.ts *.js From ec358f0f4b1ce88c427da5c5ee46f58362348f0f Mon Sep 17 00:00:00 2001 From: Evan Sosenko Date: Fri, 31 Jul 2026 12:03:08 -0700 Subject: [PATCH 09/10] Simplify typecheck workflow in check.yml Removed Node.js version matrix and simplified typecheck step. --- .github/workflows/check.yml | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0219377d..fdddac5c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -48,22 +48,14 @@ jobs: - name: Lint with ESLint and Prettier run: npm run lint typecheck: - name: Typecheck (Node.js v${{ matrix.node }}) + name: Typecheck runs-on: ubuntu-latest timeout-minutes: 30 - strategy: - fail-fast: false - matrix: - node: - - '22' - - '24' steps: - name: Checkout uses: actions/checkout@v7 - name: Setup Node.js uses: ./.github/actions/setup-node - with: - node_version: ${{ matrix.node }} - name: Typecheck run: npm run typecheck build: From e166486f18388b22f7fd4294636a89e4c34d636c Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 31 Jul 2026 19:06:27 +0000 Subject: [PATCH 10/10] ci: Update setup-dotnet to v6 and setup-just to v4 Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XDjE2VAZ2meBSF5b3qpUMt --- .github/actions/setup/action.yml | 4 ++-- .github/workflows/check.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 023d9c4d..a1a7a5d3 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -18,11 +18,11 @@ runs: using: composite steps: - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: ${{ inputs.dotnet_version }} - name: Setup just - uses: extractions/setup-just@v2 + uses: extractions/setup-just@v4 - name: Cache NuGet packages if: inputs.install_dependencies == 'true' uses: actions/cache@v4 diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index fdddac5c..505a1425 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -79,7 +79,7 @@ jobs: os_name: Linux steps: - name: Setup .NET - uses: actions/setup-dotnet@v4 + uses: actions/setup-dotnet@v6 with: dotnet-version: | 8.0.x