diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 95dd600be..a1d251b66 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -13,7 +13,6 @@
- Hosting integrations: extension methods in `Aspire.Hosting` namespace.
- Client integrations: extension methods in `Microsoft.Extensions.Hosting` namespace.
- Use file-scoped namespaces.
-- **Installer resources:** For Node.js, package installers (npm/yarn/pnpm) are modeled as `ExecutableResource` instances, providing dashboard visibility and proper process management. See `src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/REFACTORING_NOTES.md` for rationale and migration.
### Coding Style
@@ -56,12 +55,13 @@ public static class SomeProgramExtensions
- Integrations must add `Aspire.Hosting` as a dependency; see `Directory.Build.props` for shared MSBuild config.
- Use the [create-integration guide](../docs/create-integration.md) for new integrations.
- For Azure/Dapr integrations, see `src/Shared/DaprAzureExtensions/README.md` for shared resource patterns.
-- Don't update files under */api/*.cs (e.g. src/CommunityToolkit.Aspire.Hosting.Ollama/api/CommunityToolkit.Aspire.Hosting.Ollama.cs) as they are generated.
+- Don't update files under _/api/_.cs (e.g. src/CommunityToolkit.Aspire.Hosting.Ollama/api/CommunityToolkit.Aspire.Hosting.Ollama.cs) as they are generated.
+
### External Dependencies & Integration
- Many integrations wrap external services (e.g., Dapr, MinIO, k6, Node.js, Python, Rust, Java, etc.).
- Each integration's README in `src/` or `examples/` details usage, supported versions, and special setup.
-- For Node.js, package manager flags can be customized via extension methods (see `src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/README.md`).
+- For Node.js, package manager flags can be customized via extension methods (see `src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/README.md`).
### Documentation & Contribution
@@ -72,3 +72,4 @@ public static class SomeProgramExtensions
---
If you find any unclear or incomplete sections, please provide feedback to improve these instructions.
+
diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml
index f1d6e4792..fd02b0b9e 100644
--- a/.github/workflows/code-coverage.yml
+++ b/.github/workflows/code-coverage.yml
@@ -25,7 +25,7 @@ jobs:
tag: "${{ github.run_number }}_${{ github.run_id }}"
customSettings: ""
toolpath: "reportgeneratortool"
- assemblyfilters: "-*.AppHost;-CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.BlazorApp;-*.ServiceDefaults;-CommunityToolkit.Aspire.Testing;-Aspire.Hosting;-Aspire.Hosting.NodeJs;-Aspire.Hosting.SqlServer;-Aspire.Hosting.Python;-Aspire.Hosting.RabbitMQ;-Aspire.Hosting.Redis;-Aspire.Hosting.PostgreSQL;-Aspire.Hosting.MongoDB"
+ assemblyfilters: "-*.AppHost;-CommunityToolkit.Aspire.Hosting.Azure.DataApiBuilder.BlazorApp;-*.ServiceDefaults;-CommunityToolkit.Aspire.Testing;-Aspire.Hosting;-Aspire.Hosting.JavaScript;-Aspire.Hosting.SqlServer;-Aspire.Hosting.Python;-Aspire.Hosting.RabbitMQ;-Aspire.Hosting.Redis;-Aspire.Hosting.PostgreSQL;-Aspire.Hosting.MongoDB"
- name: Upload combined coverage XML
uses: actions/upload-artifact@v5
@@ -64,4 +64,3 @@ jobs:
- name: Coverage on step summary
if: always()
run: cat "${{ github.workspace }}/report/SummaryGithub.md" >> $GITHUB_STEP_SUMMARY
-
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index 4347ec797..971427344 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -44,7 +44,7 @@ jobs:
Hosting.MongoDB.Extensions.Tests,
Hosting.MySql.Extensions.Tests,
Hosting.Ngrok.Tests,
- Hosting.NodeJS.Extensions.Tests,
+ Hosting.JavaScript.Extensions.Tests,
Hosting.Ollama.Tests,
Hosting.OpenTelemetryCollector.Tests,
Hosting.PapercutSmtp.Tests,
diff --git a/CommunityToolkit.Aspire.slnx b/CommunityToolkit.Aspire.slnx
index c37a57002..a66c47b9a 100644
--- a/CommunityToolkit.Aspire.slnx
+++ b/CommunityToolkit.Aspire.slnx
@@ -106,8 +106,8 @@
-
-
+
+
@@ -184,7 +184,7 @@
-
+
@@ -237,7 +237,7 @@
-
+
diff --git a/Directory.Build.props b/Directory.Build.props
index 974adbf17..2d9a32bc6 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -12,15 +12,15 @@
enable
13
- $(AspireMajorVersion).0.0-preview.1.25531.6
+ $(AspireMajorVersion).0.0
$(AspireVersion)
- preview.1.25522.3
+ preview.1.25560.3
9.0.0
- 9.0.10
+ 10.0.0
1.12.0
4.7.0
9.9.0
- 10.0.0-preview.1.25520.3
+ 10.0.0
false
4.20.72
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 9cf56162a..40df54c28 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -11,9 +11,9 @@
-
-
-
+
+
+
@@ -44,7 +44,7 @@
-
+
@@ -113,8 +113,5 @@
-
-
-
-
+
\ No newline at end of file
diff --git a/README.md b/README.md
index 87f440261..daaaf5960 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@ This repository contains the source code for the .NET Aspire Community Toolkit,
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| - **Learn More**: [`Hosting.Golang`][golang-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.Golang][golang-shields]][golang-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Golang][golang-shields-preview]][golang-nuget-preview] | A hosting integration Golang apps. |
| - **Learn More**: [`Hosting.Java`][java-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.Java][java-shields]][java-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Java][java-shields-preview]][java-nuget-preview] | An integration for running Java code in .NET Aspire either using the local JDK or using a container. |
-| - **Learn More**: [`Hosting.NodeJS.Extensions`][nodejs-ext-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.NodeJS.Extensions][nodejs-ext-shields]][nodejs-ext-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.NodeJS.Extensions][nodejs-ext-shields-preview]][nodejs-ext-nuget-preview] | An integration that contains some additional extensions for running Node.js applications |
+| - **Learn More**: [`Hosting.NodeJS.Extensions`][nodejs-ext-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.NodeJS.Extensions][nodejs-ext-shields]][nodejs-ext-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.JavaScript.Extensions][nodejs-ext-shields-preview]][nodejs-ext-nuget-preview] | An integration that contains some additional extensions for running Node.js applications |
| - **Learn More**: [`Hosting.Ollama`][ollama-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.Ollama][ollama-shields]][ollama-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Ollama][ollama-shields-preview]][ollama-nuget-preview] | An Aspire hosting integration leveraging the [Ollama](https://ollama.com) container with support for downloading a model on startup. |
| - **Learn More**: [`OllamaSharp`][ollama-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.OllamaSharp][ollamasharp-shields]][ollamasharp-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.OllamaSharp][ollamasharp-shields-preview]][ollamasharp-nuget-preview] | An Aspire client integration for the [OllamaSharp](https://github.com/awaescher/OllamaSharp) package. |
| - **Learn More**: [`Hosting.Meilisearch`][meilisearch-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.Meilisearch][meilisearch-shields]][meilisearch-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Meilisearch][meilisearch-shields-preview]][meilisearch-nuget-preview] | An Aspire hosting integration leveraging the [Meilisearch](https://meilisearch.com) container. |
@@ -27,8 +27,8 @@ This repository contains the source code for the .NET Aspire Community Toolkit,
| - **Learn More**: [`Hosting.Rust`][rust-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.Rust][rust-shields]][rust-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Rust][rust-shields-preview]][rust-nuget-preview] | A hosting integration for the Rust apps. |
| - **Learn More**: [`Hosting.Bun`][bun-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.Bun][bun-shields]][bun-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Bun][bun-shields-preview]][bun-nuget-preview] | A hosting integration for the Bun apps. |
| - **Learn More**: [`Hosting.Python.Extensions`][python-ext-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Python.Extensions][python-ext-shields]][python-ext-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Python.Extensions][python-ext-shields-preview]][python-ext-nuget-preview] | An integration that contains some additional extensions for running python applications |
-| - **Learn More**: [`Hosting.KurrentDB`][kurrentdb-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.KurrentDB][kurrentdb-shields]][kurrentdb-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.KurrentDB][kurrentdb-shields-preview]][kurrentdb-nuget-preview] | An Aspire hosting integration leveraging the [KurrentDB](https://www.kurrent.io) container. |
-| - **Learn More**: [`KurrentDB`][kurrentdb-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.KurrentDB][kurrentdb-client-shields]][kurrentdb-client-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.KurrentDB][kurrentdb-client-shields-preview]][kurrentdb-client-nuget-preview] | An Aspire client integration for the [KurrentDB](https://github.com/kurrent-io/KurrentDB-Client-Dotnet) package. |
+| - **Learn More**: [`Hosting.KurrentDB`][kurrentdb-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.KurrentDB][kurrentdb-shields]][kurrentdb-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.KurrentDB][kurrentdb-shields-preview]][kurrentdb-nuget-preview] | An Aspire hosting integration leveraging the [KurrentDB](https://www.kurrent.io) container. |
+| - **Learn More**: [`KurrentDB`][kurrentdb-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.KurrentDB][kurrentdb-client-shields]][kurrentdb-client-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.KurrentDB][kurrentdb-client-shields-preview]][kurrentdb-client-nuget-preview] | An Aspire client integration for the [KurrentDB](https://github.com/kurrent-io/KurrentDB-Client-Dotnet) package. |
| - **Learn More**: [`Hosting.Flagd`][flagd-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.Flagd][flagd-shields]][flagd-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Flagd][flagd-shields-preview]][flagd-nuget-preview] | A .NET Aspire hosting integration for [flagd](https://flagd.dev), a feature flag evaluation engine. |
| - **Learn More**: [`Hosting.ActiveMQ`][activemq-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.ActiveMQ][activemq-shields]][activemq-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.ActiveMQ][activemq-shields-preview]][activemq-nuget-preview] | An Aspire hosting integration leveraging the [ActiveMq](https://activemq.apache.org) container. |
| - **Learn More**: [`Hosting.Sqlite`][sqlite-integration-docs]
- Stable π¦: [![CommunityToolkit.Aspire.Hosting.Sqlite][sqlite-shields]][sqlite-hosting-nuget]
- Preview π¦: [![CommunityToolkit.Aspire.Hosting.Sqlite][sqlite-shields-preview]][sqlite-hosting-nuget-preview] | An Aspire hosting integration to setup a SQLite database with optional SQLite Web as a dev UI. |
@@ -103,10 +103,10 @@ This project is supported by the [.NET Foundation](https://dotnetfoundation.org)
[java-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.Java?label=nuget%20(preview)
[java-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Java/absoluteLatest
[nodejs-ext-integration-docs]: https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-nodejs-extensions
-[nodejs-ext-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions
-[nodejs-ext-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/
-[nodejs-ext-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions?label=nuget%20(preview)
-[nodejs-ext-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/absoluteLatest
+[nodejs-ext-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions
+[nodejs-ext-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/
+[nodejs-ext-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions?label=nuget%20(preview)
+[nodejs-ext-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/absoluteLatest
[ollama-integration-docs]: https://learn.microsoft.com/dotnet/aspire/community-toolkit/ollama
[ollama-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.Ollama
[ollama-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Ollama/
diff --git a/examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost.csproj b/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost.csproj
similarity index 53%
rename from examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost.csproj
rename to examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost.csproj
index 6f239f88d..c1e322369 100644
--- a/examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost.csproj
+++ b/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost.csproj
@@ -14,13 +14,7 @@
-
+
-
-
-
-
-
-
diff --git a/examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/Program.cs b/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/Program.cs
similarity index 82%
rename from examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/Program.cs
rename to examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/Program.cs
index fbf72f6fa..98e710107 100644
--- a/examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/Program.cs
+++ b/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/Program.cs
@@ -1,7 +1,8 @@
var builder = DistributedApplication.CreateBuilder(args);
var nx = builder.AddNxApp("nx-demo")
- .WithNpm(install: true);
+ .WithNpm(install: true)
+ .WithPackageManagerLaunch();
nx.AddApp("blog-monorepo")
.WithHttpEndpoint(env: "PORT")
@@ -9,12 +10,14 @@
.WithHttpHealthCheck();
var turbo = builder.AddTurborepoApp("turborepo-demo")
- .WithNpm(install: true);
+ .WithNpm(install: true)
+ .WithPackageManagerLaunch();
turbo.AddApp("turbo-web", filter: "web")
.WithHttpEndpoint(env: "PORT")
.WithMappedEndpointPort()
.WithHttpHealthCheck();
+
turbo.AddApp("turbo-docs", filter: "docs")
.WithHttpEndpoint(env: "PORT")
.WithMappedEndpointPort()
diff --git a/examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/Properties/launchSettings.json b/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/Properties/launchSettings.json
similarity index 100%
rename from examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/Properties/launchSettings.json
rename to examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/Properties/launchSettings.json
diff --git a/examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/appsettings.json b/examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/appsettings.json
similarity index 100%
rename from examples/nodejs-ext/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.AppHost/appsettings.json
rename to examples/javascript-ext/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.AppHost/appsettings.json
diff --git a/examples/nodejs-ext/nx-demo/.editorconfig b/examples/javascript-ext/nx-demo/.editorconfig
similarity index 100%
rename from examples/nodejs-ext/nx-demo/.editorconfig
rename to examples/javascript-ext/nx-demo/.editorconfig
diff --git a/examples/nodejs-ext/nx-demo/.gitignore b/examples/javascript-ext/nx-demo/.gitignore
similarity index 100%
rename from examples/nodejs-ext/nx-demo/.gitignore
rename to examples/javascript-ext/nx-demo/.gitignore
diff --git a/examples/nodejs-ext/nx-demo/.prettierignore b/examples/javascript-ext/nx-demo/.prettierignore
similarity index 100%
rename from examples/nodejs-ext/nx-demo/.prettierignore
rename to examples/javascript-ext/nx-demo/.prettierignore
diff --git a/examples/nodejs-ext/nx-demo/.prettierrc b/examples/javascript-ext/nx-demo/.prettierrc
similarity index 100%
rename from examples/nodejs-ext/nx-demo/.prettierrc
rename to examples/javascript-ext/nx-demo/.prettierrc
diff --git a/examples/nodejs-ext/nx-demo/.vscode/extensions.json b/examples/javascript-ext/nx-demo/.vscode/extensions.json
similarity index 100%
rename from examples/nodejs-ext/nx-demo/.vscode/extensions.json
rename to examples/javascript-ext/nx-demo/.vscode/extensions.json
diff --git a/examples/nodejs-ext/nx-demo/README.md b/examples/javascript-ext/nx-demo/README.md
similarity index 100%
rename from examples/nodejs-ext/nx-demo/README.md
rename to examples/javascript-ext/nx-demo/README.md
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/eslint.config.mjs b/examples/javascript-ext/nx-demo/apps/blog-monorepo/eslint.config.mjs
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/eslint.config.mjs
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/eslint.config.mjs
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/index.html b/examples/javascript-ext/nx-demo/apps/blog-monorepo/index.html
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/index.html
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/index.html
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/package.json b/examples/javascript-ext/nx-demo/apps/blog-monorepo/package.json
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/package.json
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/package.json
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/public/favicon.ico b/examples/javascript-ext/nx-demo/apps/blog-monorepo/public/favicon.ico
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/public/favicon.ico
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/public/favicon.ico
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/app/app.module.css b/examples/javascript-ext/nx-demo/apps/blog-monorepo/src/app/app.module.css
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/app/app.module.css
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/src/app/app.module.css
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/app/app.tsx b/examples/javascript-ext/nx-demo/apps/blog-monorepo/src/app/app.tsx
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/app/app.tsx
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/src/app/app.tsx
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/app/nx-welcome.tsx b/examples/javascript-ext/nx-demo/apps/blog-monorepo/src/app/nx-welcome.tsx
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/app/nx-welcome.tsx
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/src/app/nx-welcome.tsx
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/assets/.gitkeep b/examples/javascript-ext/nx-demo/apps/blog-monorepo/src/assets/.gitkeep
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/assets/.gitkeep
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/src/assets/.gitkeep
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/main.tsx b/examples/javascript-ext/nx-demo/apps/blog-monorepo/src/main.tsx
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/main.tsx
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/src/main.tsx
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/styles.css b/examples/javascript-ext/nx-demo/apps/blog-monorepo/src/styles.css
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/src/styles.css
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/src/styles.css
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/tsconfig.app.json b/examples/javascript-ext/nx-demo/apps/blog-monorepo/tsconfig.app.json
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/tsconfig.app.json
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/tsconfig.app.json
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/tsconfig.json b/examples/javascript-ext/nx-demo/apps/blog-monorepo/tsconfig.json
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/tsconfig.json
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/tsconfig.json
diff --git a/examples/nodejs-ext/nx-demo/apps/blog-monorepo/vite.config.ts b/examples/javascript-ext/nx-demo/apps/blog-monorepo/vite.config.ts
similarity index 100%
rename from examples/nodejs-ext/nx-demo/apps/blog-monorepo/vite.config.ts
rename to examples/javascript-ext/nx-demo/apps/blog-monorepo/vite.config.ts
diff --git a/examples/nodejs-ext/nx-demo/eslint.config.mjs b/examples/javascript-ext/nx-demo/eslint.config.mjs
similarity index 100%
rename from examples/nodejs-ext/nx-demo/eslint.config.mjs
rename to examples/javascript-ext/nx-demo/eslint.config.mjs
diff --git a/examples/nodejs-ext/nx-demo/nx.json b/examples/javascript-ext/nx-demo/nx.json
similarity index 100%
rename from examples/nodejs-ext/nx-demo/nx.json
rename to examples/javascript-ext/nx-demo/nx.json
diff --git a/examples/nodejs-ext/nx-demo/package-lock.json b/examples/javascript-ext/nx-demo/package-lock.json
similarity index 99%
rename from examples/nodejs-ext/nx-demo/package-lock.json
rename to examples/javascript-ext/nx-demo/package-lock.json
index 32c865e61..5d30795d6 100644
--- a/examples/nodejs-ext/nx-demo/package-lock.json
+++ b/examples/javascript-ext/nx-demo/package-lock.json
@@ -100,6 +100,7 @@
"integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
"@babel/code-frame": "^7.27.1",
@@ -3109,6 +3110,7 @@
"integrity": "sha512-G00xsEx4CzhvhutJi+7yvmnHepOeGd1o+BBqRzAjZS4iwp7zS5h3CCxxEGeQgJdP9BA3/m0HATPSwepL7Bwd0Q==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@module-federation/runtime": "0.18.3",
"@module-federation/webpack-bundler-runtime": "0.18.3"
@@ -4556,6 +4558,7 @@
"integrity": "sha512-eEtiKV+CUcAtnt1K+eiHDzmBXQcNM8CfCXOzr0+gHGp4w4Zks2B8RF36sYD03MM2bg8VRXXsf0MicQ8FvRMCOg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@module-federation/runtime-tools": "0.18.0",
"@rspack/binding": "1.5.0",
@@ -4838,6 +4841,7 @@
"integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/core": "^7.21.3",
"@svgr/babel-preset": "8.1.0",
@@ -5072,6 +5076,7 @@
"dev": true,
"hasInstallScript": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@swc/counter": "^0.1.3",
"@swc/types": "^0.1.8"
@@ -5297,6 +5302,7 @@
"integrity": "sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"dependencies": {
"@swc/counter": "^0.1.3"
}
@@ -5377,6 +5383,7 @@
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@babel/parser": "^7.20.7",
"@babel/types": "^7.20.7",
@@ -5618,6 +5625,7 @@
"integrity": "sha512-gTtSdWX9xiMPA/7MV9STjJOOYtWwIJIYxkQxnSV1U3xcE+mnJSH3f6zI0RYP+ew66WSlZ5ed+h0VCxsvdC1jJg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.41.0",
"@typescript-eslint/types": "8.41.0",
@@ -5970,6 +5978,7 @@
"integrity": "sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@vitest/utils": "3.2.4",
"fflate": "^0.8.2",
@@ -6409,6 +6418,7 @@
"integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"argparse": "^2.0.1"
},
@@ -6444,6 +6454,7 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -6513,6 +6524,7 @@
"integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.3",
"fast-uri": "^3.0.1",
@@ -7288,6 +7300,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"caniuse-lite": "^1.0.30001735",
"electron-to-chromium": "^1.5.204",
@@ -8666,6 +8679,7 @@
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"iconv-lite": "^0.6.2"
}
@@ -8988,6 +9002,7 @@
"integrity": "sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -9049,6 +9064,7 @@
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"eslint-config-prettier": "bin/cli.js"
},
@@ -9995,6 +10011,7 @@
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -11997,6 +12014,7 @@
"integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"jiti": "lib/jiti-cli.mjs"
}
@@ -13712,6 +13730,7 @@
}
],
"license": "MIT",
+ "peer": true,
"dependencies": {
"nanoid": "^3.3.11",
"picocolors": "^1.1.1",
@@ -14719,6 +14738,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz",
"integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -14728,6 +14748,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz",
"integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"scheduler": "^0.25.0"
},
@@ -15054,6 +15075,7 @@
"integrity": "sha512-jVG20NvbhTYDkGAty2/Yh7HK6/q3DGSRH4o8ALKGArmMuaauM9kLfoMZ+WliPwA5+JHr2lTn3g557FxBV87ifg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/estree": "1.0.8"
},
@@ -16740,6 +16762,7 @@
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -17011,6 +17034,7 @@
"integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"esbuild": "^0.25.0",
"fdir": "^6.4.4",
@@ -17109,6 +17133,7 @@
"integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/chai": "^5.2.2",
"@vitest/expect": "3.2.4",
@@ -17226,6 +17251,7 @@
"integrity": "sha512-7b0dTKR3Ed//AD/6kkx/o7duS8H3f1a4w3BYpIriX4BzIhjkn4teo05cptsxvLesHFKK5KObnadmCHBwGc+51A==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@types/eslint-scope": "^3.7.7",
"@types/estree": "^1.0.8",
@@ -17473,6 +17499,7 @@
"integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==",
"dev": true,
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=10.0.0"
},
diff --git a/examples/nodejs-ext/nx-demo/package.json b/examples/javascript-ext/nx-demo/package.json
similarity index 100%
rename from examples/nodejs-ext/nx-demo/package.json
rename to examples/javascript-ext/nx-demo/package.json
diff --git a/examples/nodejs-ext/nx-demo/tsconfig.base.json b/examples/javascript-ext/nx-demo/tsconfig.base.json
similarity index 100%
rename from examples/nodejs-ext/nx-demo/tsconfig.base.json
rename to examples/javascript-ext/nx-demo/tsconfig.base.json
diff --git a/examples/nodejs-ext/nx-demo/tsconfig.json b/examples/javascript-ext/nx-demo/tsconfig.json
similarity index 100%
rename from examples/nodejs-ext/nx-demo/tsconfig.json
rename to examples/javascript-ext/nx-demo/tsconfig.json
diff --git a/examples/nodejs-ext/turborepo-demo/.gitignore b/examples/javascript-ext/turborepo-demo/.gitignore
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/.gitignore
rename to examples/javascript-ext/turborepo-demo/.gitignore
diff --git a/examples/nodejs-ext/turborepo-demo/.npmrc b/examples/javascript-ext/turborepo-demo/.npmrc
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/.npmrc
rename to examples/javascript-ext/turborepo-demo/.npmrc
diff --git a/examples/nodejs-ext/turborepo-demo/README.md b/examples/javascript-ext/turborepo-demo/README.md
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/README.md
rename to examples/javascript-ext/turborepo-demo/README.md
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/.gitignore b/examples/javascript-ext/turborepo-demo/apps/docs/.gitignore
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/.gitignore
rename to examples/javascript-ext/turborepo-demo/apps/docs/.gitignore
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/README.md b/examples/javascript-ext/turborepo-demo/apps/docs/README.md
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/README.md
rename to examples/javascript-ext/turborepo-demo/apps/docs/README.md
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/app/favicon.ico b/examples/javascript-ext/turborepo-demo/apps/docs/app/favicon.ico
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/app/favicon.ico
rename to examples/javascript-ext/turborepo-demo/apps/docs/app/favicon.ico
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/app/fonts/GeistMonoVF.woff b/examples/javascript-ext/turborepo-demo/apps/docs/app/fonts/GeistMonoVF.woff
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/app/fonts/GeistMonoVF.woff
rename to examples/javascript-ext/turborepo-demo/apps/docs/app/fonts/GeistMonoVF.woff
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/app/fonts/GeistVF.woff b/examples/javascript-ext/turborepo-demo/apps/docs/app/fonts/GeistVF.woff
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/app/fonts/GeistVF.woff
rename to examples/javascript-ext/turborepo-demo/apps/docs/app/fonts/GeistVF.woff
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/app/globals.css b/examples/javascript-ext/turborepo-demo/apps/docs/app/globals.css
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/app/globals.css
rename to examples/javascript-ext/turborepo-demo/apps/docs/app/globals.css
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/app/layout.tsx b/examples/javascript-ext/turborepo-demo/apps/docs/app/layout.tsx
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/app/layout.tsx
rename to examples/javascript-ext/turborepo-demo/apps/docs/app/layout.tsx
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/app/page.module.css b/examples/javascript-ext/turborepo-demo/apps/docs/app/page.module.css
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/app/page.module.css
rename to examples/javascript-ext/turborepo-demo/apps/docs/app/page.module.css
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/app/page.tsx b/examples/javascript-ext/turborepo-demo/apps/docs/app/page.tsx
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/app/page.tsx
rename to examples/javascript-ext/turborepo-demo/apps/docs/app/page.tsx
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/eslint.config.js b/examples/javascript-ext/turborepo-demo/apps/docs/eslint.config.js
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/eslint.config.js
rename to examples/javascript-ext/turborepo-demo/apps/docs/eslint.config.js
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/next.config.js b/examples/javascript-ext/turborepo-demo/apps/docs/next.config.js
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/next.config.js
rename to examples/javascript-ext/turborepo-demo/apps/docs/next.config.js
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/package.json b/examples/javascript-ext/turborepo-demo/apps/docs/package.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/package.json
rename to examples/javascript-ext/turborepo-demo/apps/docs/package.json
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/public/file-text.svg b/examples/javascript-ext/turborepo-demo/apps/docs/public/file-text.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/public/file-text.svg
rename to examples/javascript-ext/turborepo-demo/apps/docs/public/file-text.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/public/globe.svg b/examples/javascript-ext/turborepo-demo/apps/docs/public/globe.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/public/globe.svg
rename to examples/javascript-ext/turborepo-demo/apps/docs/public/globe.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/public/next.svg b/examples/javascript-ext/turborepo-demo/apps/docs/public/next.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/public/next.svg
rename to examples/javascript-ext/turborepo-demo/apps/docs/public/next.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/public/turborepo-dark.svg b/examples/javascript-ext/turborepo-demo/apps/docs/public/turborepo-dark.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/public/turborepo-dark.svg
rename to examples/javascript-ext/turborepo-demo/apps/docs/public/turborepo-dark.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/public/turborepo-light.svg b/examples/javascript-ext/turborepo-demo/apps/docs/public/turborepo-light.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/public/turborepo-light.svg
rename to examples/javascript-ext/turborepo-demo/apps/docs/public/turborepo-light.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/public/vercel.svg b/examples/javascript-ext/turborepo-demo/apps/docs/public/vercel.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/public/vercel.svg
rename to examples/javascript-ext/turborepo-demo/apps/docs/public/vercel.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/public/window.svg b/examples/javascript-ext/turborepo-demo/apps/docs/public/window.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/public/window.svg
rename to examples/javascript-ext/turborepo-demo/apps/docs/public/window.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/docs/tsconfig.json b/examples/javascript-ext/turborepo-demo/apps/docs/tsconfig.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/docs/tsconfig.json
rename to examples/javascript-ext/turborepo-demo/apps/docs/tsconfig.json
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/.gitignore b/examples/javascript-ext/turborepo-demo/apps/web/.gitignore
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/.gitignore
rename to examples/javascript-ext/turborepo-demo/apps/web/.gitignore
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/README.md b/examples/javascript-ext/turborepo-demo/apps/web/README.md
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/README.md
rename to examples/javascript-ext/turborepo-demo/apps/web/README.md
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/app/favicon.ico b/examples/javascript-ext/turborepo-demo/apps/web/app/favicon.ico
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/app/favicon.ico
rename to examples/javascript-ext/turborepo-demo/apps/web/app/favicon.ico
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/app/fonts/GeistMonoVF.woff b/examples/javascript-ext/turborepo-demo/apps/web/app/fonts/GeistMonoVF.woff
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/app/fonts/GeistMonoVF.woff
rename to examples/javascript-ext/turborepo-demo/apps/web/app/fonts/GeistMonoVF.woff
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/app/fonts/GeistVF.woff b/examples/javascript-ext/turborepo-demo/apps/web/app/fonts/GeistVF.woff
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/app/fonts/GeistVF.woff
rename to examples/javascript-ext/turborepo-demo/apps/web/app/fonts/GeistVF.woff
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/app/globals.css b/examples/javascript-ext/turborepo-demo/apps/web/app/globals.css
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/app/globals.css
rename to examples/javascript-ext/turborepo-demo/apps/web/app/globals.css
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/app/layout.tsx b/examples/javascript-ext/turborepo-demo/apps/web/app/layout.tsx
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/app/layout.tsx
rename to examples/javascript-ext/turborepo-demo/apps/web/app/layout.tsx
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/app/page.module.css b/examples/javascript-ext/turborepo-demo/apps/web/app/page.module.css
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/app/page.module.css
rename to examples/javascript-ext/turborepo-demo/apps/web/app/page.module.css
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/app/page.tsx b/examples/javascript-ext/turborepo-demo/apps/web/app/page.tsx
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/app/page.tsx
rename to examples/javascript-ext/turborepo-demo/apps/web/app/page.tsx
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/eslint.config.js b/examples/javascript-ext/turborepo-demo/apps/web/eslint.config.js
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/eslint.config.js
rename to examples/javascript-ext/turborepo-demo/apps/web/eslint.config.js
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/next.config.js b/examples/javascript-ext/turborepo-demo/apps/web/next.config.js
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/next.config.js
rename to examples/javascript-ext/turborepo-demo/apps/web/next.config.js
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/package.json b/examples/javascript-ext/turborepo-demo/apps/web/package.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/package.json
rename to examples/javascript-ext/turborepo-demo/apps/web/package.json
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/public/file-text.svg b/examples/javascript-ext/turborepo-demo/apps/web/public/file-text.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/public/file-text.svg
rename to examples/javascript-ext/turborepo-demo/apps/web/public/file-text.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/public/globe.svg b/examples/javascript-ext/turborepo-demo/apps/web/public/globe.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/public/globe.svg
rename to examples/javascript-ext/turborepo-demo/apps/web/public/globe.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/public/next.svg b/examples/javascript-ext/turborepo-demo/apps/web/public/next.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/public/next.svg
rename to examples/javascript-ext/turborepo-demo/apps/web/public/next.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/public/turborepo-dark.svg b/examples/javascript-ext/turborepo-demo/apps/web/public/turborepo-dark.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/public/turborepo-dark.svg
rename to examples/javascript-ext/turborepo-demo/apps/web/public/turborepo-dark.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/public/turborepo-light.svg b/examples/javascript-ext/turborepo-demo/apps/web/public/turborepo-light.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/public/turborepo-light.svg
rename to examples/javascript-ext/turborepo-demo/apps/web/public/turborepo-light.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/public/vercel.svg b/examples/javascript-ext/turborepo-demo/apps/web/public/vercel.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/public/vercel.svg
rename to examples/javascript-ext/turborepo-demo/apps/web/public/vercel.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/public/window.svg b/examples/javascript-ext/turborepo-demo/apps/web/public/window.svg
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/public/window.svg
rename to examples/javascript-ext/turborepo-demo/apps/web/public/window.svg
diff --git a/examples/nodejs-ext/turborepo-demo/apps/web/tsconfig.json b/examples/javascript-ext/turborepo-demo/apps/web/tsconfig.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/apps/web/tsconfig.json
rename to examples/javascript-ext/turborepo-demo/apps/web/tsconfig.json
diff --git a/examples/nodejs-ext/turborepo-demo/package-lock.json b/examples/javascript-ext/turborepo-demo/package-lock.json
similarity index 99%
rename from examples/nodejs-ext/turborepo-demo/package-lock.json
rename to examples/javascript-ext/turborepo-demo/package-lock.json
index f955a169e..ecf2fcf74 100644
--- a/examples/nodejs-ext/turborepo-demo/package-lock.json
+++ b/examples/javascript-ext/turborepo-demo/package-lock.json
@@ -950,6 +950,7 @@
"integrity": "sha512-UaicktuQI+9UKyA4njtDOGBD/67t8YEBt2xdfqu8+gP9hqPUPsiXlNPcpS2gVdjmis5GKPG3fCxbQLVgxsQZ8w==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"csstype": "^3.0.2"
}
@@ -1010,6 +1011,7 @@
"integrity": "sha512-g3WpVQHngx0aLXn6kfIYCZxM6rRJlWzEkVpqEFLT3SgEDsp9cpCbxxgwnE504q4H+ruSDh/VGS6nqZIDynP+vg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@typescript-eslint/scope-manager": "8.39.0",
"@typescript-eslint/types": "8.39.0",
@@ -1271,6 +1273,7 @@
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -2063,6 +2066,7 @@
"integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
@@ -3771,6 +3775,7 @@
"resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz",
"integrity": "sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==",
"license": "MIT",
+ "peer": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3780,6 +3785,7 @@
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.1.1.tgz",
"integrity": "sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==",
"license": "MIT",
+ "peer": true,
"dependencies": {
"scheduler": "^0.26.0"
},
@@ -4407,6 +4413,7 @@
"integrity": "sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A==",
"dev": true,
"license": "MIT",
+ "peer": true,
"bin": {
"turbo": "bin/turbo"
},
@@ -4600,6 +4607,7 @@
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
diff --git a/examples/nodejs-ext/turborepo-demo/package.json b/examples/javascript-ext/turborepo-demo/package.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/package.json
rename to examples/javascript-ext/turborepo-demo/package.json
diff --git a/examples/nodejs-ext/turborepo-demo/packages/eslint-config/README.md b/examples/javascript-ext/turborepo-demo/packages/eslint-config/README.md
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/eslint-config/README.md
rename to examples/javascript-ext/turborepo-demo/packages/eslint-config/README.md
diff --git a/examples/nodejs-ext/turborepo-demo/packages/eslint-config/base.js b/examples/javascript-ext/turborepo-demo/packages/eslint-config/base.js
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/eslint-config/base.js
rename to examples/javascript-ext/turborepo-demo/packages/eslint-config/base.js
diff --git a/examples/nodejs-ext/turborepo-demo/packages/eslint-config/next.js b/examples/javascript-ext/turborepo-demo/packages/eslint-config/next.js
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/eslint-config/next.js
rename to examples/javascript-ext/turborepo-demo/packages/eslint-config/next.js
diff --git a/examples/nodejs-ext/turborepo-demo/packages/eslint-config/package.json b/examples/javascript-ext/turborepo-demo/packages/eslint-config/package.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/eslint-config/package.json
rename to examples/javascript-ext/turborepo-demo/packages/eslint-config/package.json
diff --git a/examples/nodejs-ext/turborepo-demo/packages/eslint-config/react-internal.js b/examples/javascript-ext/turborepo-demo/packages/eslint-config/react-internal.js
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/eslint-config/react-internal.js
rename to examples/javascript-ext/turborepo-demo/packages/eslint-config/react-internal.js
diff --git a/examples/nodejs-ext/turborepo-demo/packages/typescript-config/base.json b/examples/javascript-ext/turborepo-demo/packages/typescript-config/base.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/typescript-config/base.json
rename to examples/javascript-ext/turborepo-demo/packages/typescript-config/base.json
diff --git a/examples/nodejs-ext/turborepo-demo/packages/typescript-config/nextjs.json b/examples/javascript-ext/turborepo-demo/packages/typescript-config/nextjs.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/typescript-config/nextjs.json
rename to examples/javascript-ext/turborepo-demo/packages/typescript-config/nextjs.json
diff --git a/examples/nodejs-ext/turborepo-demo/packages/typescript-config/package.json b/examples/javascript-ext/turborepo-demo/packages/typescript-config/package.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/typescript-config/package.json
rename to examples/javascript-ext/turborepo-demo/packages/typescript-config/package.json
diff --git a/examples/nodejs-ext/turborepo-demo/packages/typescript-config/react-library.json b/examples/javascript-ext/turborepo-demo/packages/typescript-config/react-library.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/typescript-config/react-library.json
rename to examples/javascript-ext/turborepo-demo/packages/typescript-config/react-library.json
diff --git a/examples/nodejs-ext/turborepo-demo/packages/ui/eslint.config.mjs b/examples/javascript-ext/turborepo-demo/packages/ui/eslint.config.mjs
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/ui/eslint.config.mjs
rename to examples/javascript-ext/turborepo-demo/packages/ui/eslint.config.mjs
diff --git a/examples/nodejs-ext/turborepo-demo/packages/ui/package.json b/examples/javascript-ext/turborepo-demo/packages/ui/package.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/ui/package.json
rename to examples/javascript-ext/turborepo-demo/packages/ui/package.json
diff --git a/examples/nodejs-ext/turborepo-demo/packages/ui/src/button.tsx b/examples/javascript-ext/turborepo-demo/packages/ui/src/button.tsx
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/ui/src/button.tsx
rename to examples/javascript-ext/turborepo-demo/packages/ui/src/button.tsx
diff --git a/examples/nodejs-ext/turborepo-demo/packages/ui/src/card.tsx b/examples/javascript-ext/turborepo-demo/packages/ui/src/card.tsx
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/ui/src/card.tsx
rename to examples/javascript-ext/turborepo-demo/packages/ui/src/card.tsx
diff --git a/examples/nodejs-ext/turborepo-demo/packages/ui/src/code.tsx b/examples/javascript-ext/turborepo-demo/packages/ui/src/code.tsx
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/ui/src/code.tsx
rename to examples/javascript-ext/turborepo-demo/packages/ui/src/code.tsx
diff --git a/examples/nodejs-ext/turborepo-demo/packages/ui/tsconfig.json b/examples/javascript-ext/turborepo-demo/packages/ui/tsconfig.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/packages/ui/tsconfig.json
rename to examples/javascript-ext/turborepo-demo/packages/ui/tsconfig.json
diff --git a/examples/nodejs-ext/turborepo-demo/turbo.json b/examples/javascript-ext/turborepo-demo/turbo.json
similarity index 100%
rename from examples/nodejs-ext/turborepo-demo/turbo.json
rename to examples/javascript-ext/turborepo-demo/turbo.json
diff --git a/global.json b/global.json
index a8ab760dd..ffa6e939f 100644
--- a/global.json
+++ b/global.json
@@ -2,4 +2,5 @@
"sdk": {
"allowPrerelease": false
}
-}
\ No newline at end of file
+}
+
diff --git a/nuget.config b/nuget.config
index 16a6b5139..d06d9d3ce 100644
--- a/nuget.config
+++ b/nuget.config
@@ -6,13 +6,8 @@
-
-
-
-
-
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.csproj b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.csproj
similarity index 79%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.csproj
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.csproj
index 324dc983e..7fbb8610e 100644
--- a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.csproj
+++ b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.csproj
@@ -7,11 +7,15 @@
-
+
+
+
+
+
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/NodeJSHostingExtensions.cs b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/JavaScriptHostingExtensions.cs
similarity index 92%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/NodeJSHostingExtensions.cs
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/JavaScriptHostingExtensions.cs
index d0269a14c..a886f5ddd 100644
--- a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/NodeJSHostingExtensions.cs
+++ b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/JavaScriptHostingExtensions.cs
@@ -1,14 +1,14 @@
ο»Ώusing Aspire.Hosting.ApplicationModel;
-using Aspire.Hosting.NodeJs;
+using Aspire.Hosting.JavaScript;
using CommunityToolkit.Aspire.Utils;
using Microsoft.Extensions.Hosting;
namespace Aspire.Hosting;
///
-/// Provides extension methods for adding Node.js applications to the distributed application builder.
+/// Provides extension methods for adding JavaScript applications to the distributed application builder.
///
-public static partial class NodeJSHostingExtensions
+public static partial class JavaScriptHostingExtensions
{
///
/// Adds an Nx monorepo workspace to the distributed application builder.
@@ -78,7 +78,17 @@ public static IResourceBuilder AddApp(this IResourceBuilder(out var executionAnnotation))
{
- rb.WithAnnotation(executionAnnotation);
+ rb.WithCommand(executionAnnotation.ExecutableName switch
+ {
+ "npm" => "npx",
+ "yarn" => "yarn",
+ "pnpm" => "pnpx",
+ _ => executionAnnotation.ExecutableName
+ })
+ .WithArgs(context =>
+ {
+ context.Args.Insert(0, executionAnnotation.ScriptCommand ?? "nx");
+ });
}
// If the workspace has an installer annotation, wait for the installer to complete
@@ -118,7 +128,17 @@ public static IResourceBuilder AddApp(this IResourceBuilde
// If the workspace is configured to use a package manager, bring that annotation forward
if (builder.Resource.TryGetLastAnnotation(out var executionAnnotation))
{
- rb.WithAnnotation(executionAnnotation);
+ rb.WithCommand(executionAnnotation.ExecutableName switch
+ {
+ "npm" => "npx",
+ "yarn" => "yarn",
+ "pnpm" => "pnpx",
+ _ => executionAnnotation.ExecutableName
+ })
+ .WithArgs(context =>
+ {
+ context.Args.Insert(0, executionAnnotation.ScriptCommand ?? "nx");
+ });
}
// If the workspace has an installer annotation, wait for the installer to complete
@@ -139,7 +159,7 @@ public static IResourceBuilder AddApp(this IResourceBuilde
/// The package manager to use. If none is provided it will attempt to use the installer annotation's resource command.
/// A reference to the .
/// Thrown if the Nx workspace is already configured to use a different package manager.
- public static IResourceBuilder RunWithPackageManager(this IResourceBuilder builder, string? packageManager = null)
+ public static IResourceBuilder WithPackageManagerLaunch(this IResourceBuilder builder, string? packageManager = null)
{
ArgumentNullException.ThrowIfNull(builder);
@@ -176,7 +196,7 @@ public static IResourceBuilder RunWithPackageManager(this IResourceB
/// The package manager to use. If none is provided it will attempt to use the installer annotation's resource command.
/// A reference to the .
/// Thrown if the Turborepo workspace is already configured to use a different package manager.
- public static IResourceBuilder RunWithPackageManager(this IResourceBuilder builder, string? packageManager = null)
+ public static IResourceBuilder WithPackageManagerLaunch(this IResourceBuilder builder, string? packageManager = null)
{
ArgumentNullException.ThrowIfNull(builder);
@@ -207,12 +227,12 @@ public static IResourceBuilder RunWithPackageManager(this IRe
}
///
- /// Maps the endpoint port for the to the appropriate command line argument.
+ /// Maps the endpoint port for the to the appropriate command line argument.
///
/// The Node.js app resource.
/// The name of the endpoint to map. If not specified, it will use the first HTTP or HTTPS endpoint found.
/// A reference to the .
- public static IResourceBuilder WithMappedEndpointPort(this IResourceBuilder builder, string? endpointName = null) where TResource : NodeAppResource
+ public static IResourceBuilder WithMappedEndpointPort(this IResourceBuilder builder, string? endpointName = null) where TResource : JavaScriptAppResource
{
ArgumentNullException.ThrowIfNull(builder);
@@ -220,7 +240,7 @@ public static IResourceBuilder WithMappedEndpointPort(this
{
var resource = builder.Resource;
- // monorepo tools and npm (from Aspire.Hosting.NodeJS) need `--`, but yarn and pnpm don't
+ // monorepo tools and npm (from Aspire.Hosting.JavaScript) need `--`, but yarn and pnpm don't
if (!resource.TryGetLastAnnotation(out var executionAnnotation) || executionAnnotation.ExecutableName == "npm")
{
ctx.Args.Add("--");
@@ -373,7 +393,7 @@ private static void AddMonorepoInstaller(
}
}
- private static IResourceBuilder WithNodeDefaults(this IResourceBuilder builder) where TResource : NodeAppResource =>
+ private static IResourceBuilder WithNodeDefaults(this IResourceBuilder builder) where TResource : JavaScriptAppResource =>
builder.WithOtlpExporter()
.WithEnvironment("NODE_ENV", builder.ApplicationBuilder.Environment.IsDevelopment() ? "development" : "production")
.WithCertificateTrustConfiguration((ctx) =>
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/JavaScriptPackageManagerConfiguredAnnotation.cs b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/JavaScriptPackageManagerConfiguredAnnotation.cs
similarity index 100%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/JavaScriptPackageManagerConfiguredAnnotation.cs
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/JavaScriptPackageManagerConfiguredAnnotation.cs
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/MONOREPO.md b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/MONOREPO.md
similarity index 70%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/MONOREPO.md
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/MONOREPO.md
index 54e0511fa..8ebeec273 100644
--- a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/MONOREPO.md
+++ b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/MONOREPO.md
@@ -10,10 +10,10 @@ When using monorepos, multiple applications share the same `package.json` and wo
// This causes race conditions - multiple installers for the same directory
var app1 = builder.AddYarnApp("app-1", "./Frontend", args: ["app1"])
.WithYarnPackageInstallation();
-
+
var app2 = builder.AddYarnApp("app-2", "./Frontend", args: ["app2"])
.WithYarnPackageInstallation();
-
+
var app3 = builder.AddYarnApp("app-3", "./Frontend", args: ["app3"])
.WithYarnPackageInstallation();
```
@@ -48,35 +48,36 @@ var app3 = turbo.AddApp("app3");
Both Nx and Turborepo support yarn and pnpm package managers:
-- `.WithYarnPackageInstaller()` - uses yarn
-- `.WithPnpmPackageInstaller()` - uses pnpm
+- `.WithYarnPackageInstaller()` - uses yarn
+- `.WithPnpmPackageInstaller()` - uses pnpm
-> **Note**: npm support (`AddNpmApp`, `WithNpmPackageInstallation`) is now provided by [Aspire.Hosting.NodeJS](https://www.nuget.org/packages/Aspire.Hosting.NodeJS) starting with Aspire 13.
+> **Note**: npm support (`AddNpmApp`, `WithNpmPackageInstallation`) is now provided by [Aspire.Hosting.JavaScript](https://www.nuget.org/packages/Aspire.Hosting.JavaScript) starting with Aspire 13.
### Configuring Package Manager for App Execution
-Use `RunWithPackageManager()` to configure which package manager command is used when running individual apps:
+Use `WithPackageManagerLaunch()` to configure which package manager command is used when running individual apps:
```csharp
// Auto-infer from package installer annotation
var nx = builder.AddNxApp("nx", workingDirectory: "../frontend")
.WithYarnPackageInstaller()
- .RunWithPackageManager(); // Will use 'yarn' command
+ .WithPackageManagerLaunch(); // Will use 'yarn' command
// Explicitly specify package manager (independent of installer)
var turbo = builder.AddTurborepoApp("turbo", workingDirectory: "../frontend")
.WithPnpmPackageInstaller()
- .RunWithPackageManager("yarn"); // Uses 'yarn' despite pnpm installer
+ .WithPackageManagerLaunch("yarn"); // Uses 'yarn' despite pnpm installer
-// Without RunWithPackageManager - uses default commands
+// Without WithPackageManagerLaunch - uses default commands
var nxDefault = builder.AddNxApp("nx-default", workingDirectory: "../frontend");
nxDefault.AddApp("app1"); // Runs: nx serve app1 (no package manager prefix)
```
**Command Generation Examples:**
-- `RunWithPackageManager("yarn")` β `yarn nx serve app1` or `yarn turbo run dev --filter app1`
-- `RunWithPackageManager("pnpm")` β `pnpm nx serve app1` or `pnpm turbo run dev --filter app1`
-- No `RunWithPackageManager()` β `nx serve app1` or `turbo run dev --filter app1`
+
+- `WithPackageManagerLaunch("yarn")` β `yarn nx serve app1` or `yarn turbo run dev --filter app1`
+- `WithPackageManagerLaunch("pnpm")` β `pnpm nx serve app1` or `pnpm turbo run dev --filter app1`
+- No `WithPackageManagerLaunch()` β `nx serve app1` or `turbo run dev --filter app1`
## How It Works
@@ -87,12 +88,14 @@ nxDefault.AddApp("app1"); // Runs: nx serve app1 (no package manager prefix)
## Commands Generated
### Nx Apps
-- Command: `nx serve {appName}`
-- The `appName` parameter controls which app Nx serves
-### Turborepo Apps
-- Command: `turbo run dev --filter {filter}`
-- The `filter` parameter controls which packages Turborepo builds/serves
+- Command: `nx serve {appName}`
+- The `appName` parameter controls which app Nx serves
+
+### Turborepo Apps
+
+- Command: `turbo run dev --filter {filter}`
+- The `filter` parameter controls which packages Turborepo builds/serves
## Migration
@@ -102,10 +105,10 @@ If you're currently using the workaround pattern:
// Old workaround approach
var app1 = builder.AddYarnApp("app-1", "./Frontend", args: ["app1"])
.WithYarnPackageInstallation();
-
+
var app2 = builder.AddYarnApp("app-2", "./Frontend", args: ["app2"])
.WaitFor(app1); // Manual dependency
-
+
var app3 = builder.AddYarnApp("app-3", "./Frontend", args: ["app3"])
.WaitFor(app1); // Manual dependency
```
@@ -116,10 +119,10 @@ You can migrate to:
// New monorepo approach
var nx = builder.AddNxApp("nx", workingDirectory: "./Frontend")
.WithYarnPackageInstaller()
- .RunWithPackageManager(); // Configure package manager for app execution
+ .WithPackageManagerLaunch(); // Configure package manager for app execution
var app1 = nx.AddApp("app-1", appName: "app1");
-var app2 = nx.AddApp("app-2", appName: "app2");
+var app2 = nx.AddApp("app-2", appName: "app2");
var app3 = nx.AddApp("app-3", appName: "app3");
```
@@ -131,13 +134,14 @@ This provides cleaner syntax and automatic dependency management.
It's important to understand the difference between package installation and app execution:
-- **Package Installer** (`.WithYarnPackageInstaller()`, `.WithPnpmPackageInstaller()`) - Controls how packages are installed in the workspace
-- **Package Manager for Apps** (`.RunWithPackageManager()`) - Controls which command is used to run individual apps
+- **Package Installer** (`.WithYarnPackageInstaller()`, `.WithPnpmPackageInstaller()`) - Controls how packages are installed in the workspace
+- **Package Manager for Apps** (`.WithPackageManagerLaunch()`) - Controls which command is used to run individual apps
```csharp
var nx = builder.AddNxApp("nx", workingDirectory: "../frontend")
- .WithPnpmPackageInstaller() // Install packages with: pnpm install
- .RunWithPackageManager("yarn"); // Run apps with: yarn nx serve app1
+ .WithPnpmPackageInstaller() // Install packages with: pnpm install
+ .WithPackageManagerLaunch("yarn"); // Run apps with: yarn nx serve app1
// This is valid - you can install with pnpm but run apps with yarn
-```
\ No newline at end of file
+```
+
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/NxAppResource.cs b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/NxAppResource.cs
similarity index 87%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/NxAppResource.cs
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/NxAppResource.cs
index 7d1ec7a8c..eff0932d5 100644
--- a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/NxAppResource.cs
+++ b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/NxAppResource.cs
@@ -1,4 +1,4 @@
-using Aspire.Hosting.ApplicationModel;
+using Aspire.Hosting.JavaScript;
namespace Aspire.Hosting.ApplicationModel;
@@ -10,7 +10,7 @@ namespace Aspire.Hosting.ApplicationModel;
/// The Nx app name to run (used in 'nx serve {appName}').
/// The command to run (default is 'nx').
public class NxAppResource(string name, string workingDirectory, string appName, string command = "nx")
- : NodeAppResource(name, command, workingDirectory)
+ : JavaScriptAppResource(name, command, workingDirectory)
{
///
/// Gets the Nx application name.
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/NxResource.cs b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/NxResource.cs
similarity index 100%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/NxResource.cs
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/NxResource.cs
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/README.md b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/README.md
similarity index 72%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/README.md
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/README.md
index e816786e2..992bea1db 100644
--- a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/README.md
+++ b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/README.md
@@ -1,6 +1,6 @@
-# CommunityToolkit.Aspire.Hosting.NodeJS.Extensions library
+# CommunityToolkit.Aspire.Hosting.JavaScript.Extensions library
-This integration contains extensions for the [Node.js hosting package](https://nuget.org/packages/Aspire.Hosting.NodeJs) for Aspire, including support for frontend monorepos (Nx, Turborepo).
+This integration contains extensions for the [Node.js hosting package](https://nuget.org/packages/Aspire.Hosting.JavaScript) for Aspire, including support for frontend monorepos (Nx, Turborepo).
## Getting Started
@@ -9,26 +9,25 @@ This integration contains extensions for the [Node.js hosting package](https://n
In your AppHost project, install the package using the following command:
```dotnetcli
-dotnet add package CommunityToolkit.Aspire.Hosting.NodeJS.Extensions
+dotnet add package CommunityToolkit.Aspire.Hosting.JavaScript.Extensions
```
### Example usage
-
For Nx and Turborepo monorepos, use the dedicated monorepo methods to avoid package installation race conditions:
```csharp
// Nx workspace
var nx = builder.AddNxApp("nx", workingDirectory: "../frontend")
.WithYarn()
- .RunWithPackageManager(); // Automatically uses yarn from installer
+ .WithPackageManagerLaunch(); // Automatically uses yarn from installer
var app1 = nx.AddApp("app1");
var app2 = nx.AddApp("app2", appName: "my-app-2");
-// Turborepo workspace
+// Turborepo workspace
var turbo = builder.AddTurborepoApp("turbo", workingDirectory: "../frontend")
- .RunWithPackageManager("pnpm"); // Explicitly specify pnpm
+ .WithPackageManagerLaunch("pnpm"); // Explicitly specify pnpm
var turboApp1 = turbo.AddApp("app1");
var turboApp2 = turbo.AddApp("app2", filter: "custom-filter");
@@ -38,18 +37,18 @@ See [MONOREPO.md](./MONOREPO.md) for detailed documentation on monorepo support.
### Configuring Package Manager for Monorepos
-The `RunWithPackageManager()` method configures which package manager command is used when running individual apps in Nx or Turborepo workspaces:
+The `WithPackageManagerLaunch()` method configures which package manager command is used when running individual apps in Nx or Turborepo workspaces:
```csharp
// Auto-infer from package installer
var nx = builder.AddNxApp("nx", workingDirectory: "../frontend")
.WithYarn()
- .RunWithPackageManager(); // Uses 'yarn' command
+ .WithPackageManagerLaunch(); // Uses 'yarn' command
// Explicitly specify package manager
var turbo = builder.AddTurborepoApp("turbo", workingDirectory: "../frontend")
.WithPnpm()
- .RunWithPackageManager("pnpm"); // Uses 'pnpm' command
+ .WithPackageManagerLaunch("pnpm"); // Uses 'pnpm' command
// Generated commands:
// Nx with yarn: yarn nx serve app1
@@ -62,7 +61,7 @@ You can pass additional flags to package managers during installation:
```csharp
// yarn with frozen lockfile
-builder.AddYarnApp("yarn-app", "./path/to/app")
+builder.AddYarnApp("yarn-app", "./path/to/app")
.WithYarnPackageInstallation(configureInstaller =>
{
configureInstaller.WithArgs("--frozen-lockfile", "--verbose");
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/TurborepoAppResource.cs b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/TurborepoAppResource.cs
similarity index 88%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/TurborepoAppResource.cs
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/TurborepoAppResource.cs
index 0b375edea..ae9194a46 100644
--- a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/TurborepoAppResource.cs
+++ b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/TurborepoAppResource.cs
@@ -1,4 +1,4 @@
-using Aspire.Hosting.ApplicationModel;
+using Aspire.Hosting.JavaScript;
namespace Aspire.Hosting.ApplicationModel;
@@ -10,7 +10,7 @@ namespace Aspire.Hosting.ApplicationModel;
/// The Turborepo filter to use (used in 'turbo run dev --filter={filter}').
/// The command to run (default is 'turbo').
public class TurborepoAppResource(string name, string workingDirectory, string filter, string command = "turbo")
- : NodeAppResource(name, command, workingDirectory)
+ : JavaScriptAppResource(name, command, workingDirectory)
{
///
/// Gets the Turborepo filter.
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/TurborepoResource.cs b/src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/TurborepoResource.cs
similarity index 100%
rename from src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/TurborepoResource.cs
rename to src/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions/TurborepoResource.cs
diff --git a/src/CommunityToolkit.Aspire.Hosting.McpInspector/CommunityToolkit.Aspire.Hosting.McpInspector.csproj b/src/CommunityToolkit.Aspire.Hosting.McpInspector/CommunityToolkit.Aspire.Hosting.McpInspector.csproj
index 73320b3f0..72feafe99 100644
--- a/src/CommunityToolkit.Aspire.Hosting.McpInspector/CommunityToolkit.Aspire.Hosting.McpInspector.csproj
+++ b/src/CommunityToolkit.Aspire.Hosting.McpInspector/CommunityToolkit.Aspire.Hosting.McpInspector.csproj
@@ -6,7 +6,7 @@
-
+
diff --git a/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs b/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs
index 318728f20..ad1769617 100644
--- a/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs
+++ b/src/CommunityToolkit.Aspire.Hosting.McpInspector/McpInspectorResource.cs
@@ -1,4 +1,4 @@
-using System.Diagnostics.CodeAnalysis;
+using Aspire.Hosting.JavaScript;
namespace Aspire.Hosting.ApplicationModel;
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/REFACTORING_NOTES.md b/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/REFACTORING_NOTES.md
deleted file mode 100644
index 9c4080a6b..000000000
--- a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/REFACTORING_NOTES.md
+++ /dev/null
@@ -1,107 +0,0 @@
-# Node.js Package Installer Refactoring
-
-This refactoring transforms the Node.js package installers from lifecycle hooks to ExecutableResource-based resources, addressing issue #732.
-
-## What Changed
-
-### Before (Lifecycle Hook Approach)
-- Package installation was handled by lifecycle hooks during `BeforeStartAsync`
-- No visibility into installation progress in the dashboard
-- Limited logging capabilities
-- Process management handled manually via `Process.Start`
-
-### After (Resource-Based Approach)
-- Package installers are now proper `ExecutableResource` instances
-- They appear as separate resources in the Aspire dashboard
-- Full console output visibility and logging
-- DCP (Distributed Application Control Plane) handles process management
-- Parent-child relationships ensure proper startup ordering
-
-## New Resource Classes
-
-### NpmInstallerResource
-```csharp
-var installer = new NpmInstallerResource("npm-installer", "/path/to/project", useCI: true);
-// Supports both 'npm install' and 'npm ci' commands
-```
-
-### YarnInstallerResource
-```csharp
-var installer = new YarnInstallerResource("yarn-installer", "/path/to/project");
-// Executes 'yarn install' command
-```
-
-### PnpmInstallerResource
-```csharp
-var installer = new PnpmInstallerResource("pnpm-installer", "/path/to/project");
-// Executes 'pnpm install' command
-```
-
-## Usage Examples
-
-### Basic Usage (No API Changes)
-```csharp
-var builder = DistributedApplication.CreateBuilder();
-
-// API remains the same - behavior is now resource-based
-var viteApp = builder.AddViteApp("frontend", "./frontend")
- .WithNpmPackageInstallation(useCI: true);
-
-var backendApp = builder.AddYarnApp("backend", "./backend")
- .WithYarnPackageInstallation();
-```
-
-### What Happens Under the Hood
-```csharp
-// This now creates:
-// 1. NodeAppResource named "frontend"
-// 2. NpmInstallerResource named "frontend-npm-install" (child of frontend)
-// 3. WaitAnnotation on frontend to wait for installer completion
-// 4. ResourceRelationshipAnnotation linking installer to parent
-```
-
-## Benefits
-
-### Dashboard Visibility
-- Installer resources appear as separate items in the Aspire dashboard
-- Real-time console output from package installation
-- Clear status indication (starting, running, completed, failed)
-- Ability to re-run installations if needed
-
-### Better Resource Management
-- DCP handles process lifecycle instead of manual `Process.Start`
-- Proper resource cleanup and error handling
-- Integration with Aspire's logging and monitoring systems
-
-### Improved Startup Ordering
-- Parent resources automatically wait for installer completion
-- Failed installations prevent app startup (fail-fast behavior)
-- Clear dependency visualization in the dashboard
-
-### Development vs Production
-- Installers only run during development (excluded from publish mode)
-- No overhead in production deployments
-- Maintains backward compatibility
-
-## Migration Guide
-
-### For Users
-No changes required! The existing APIs (`WithNpmPackageInstallation`, `WithYarnPackageInstallation`, `WithPnpmPackageInstallation`) work exactly the same.
-
-### For Contributors
-The lifecycle hook classes are marked as `[Obsolete]` but remain functional for backward compatibility:
-- `NpmPackageInstallerLifecycleHook`
-- `YarnPackageInstallerLifecycleHook`
-- `PnpmPackageInstallerLifecycleHook`
-- `NodePackageInstaller`
-
-These will be removed in a future version once all usage has migrated to the resource-based approach.
-
-## Testing
-
-Comprehensive test coverage includes:
-- Unit tests for installer resource properties and command generation
-- Integration tests for parent-child relationships
-- Cross-platform compatibility (Windows vs Unix commands)
-- Publish mode exclusion verification
-- Wait annotation and resource relationship validation
\ No newline at end of file
diff --git a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/api/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.cs b/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/api/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.cs
deleted file mode 100644
index 31be5f568..000000000
--- a/src/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions/api/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.cs
+++ /dev/null
@@ -1,112 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-namespace Aspire.Hosting
-{
- public sealed partial class JavaScriptPackageInstallerAnnotation : ApplicationModel.IResourceAnnotation
- {
- public JavaScriptPackageInstallerAnnotation(ApplicationModel.ExecutableResource installerResource) { }
-
- public ApplicationModel.ExecutableResource Resource { get { throw null; } }
- }
-
- public sealed partial class JavaScriptPackageManagerAnnotation : ApplicationModel.IResourceAnnotation
- {
- public JavaScriptPackageManagerAnnotation(string packageManager) { }
-
- public string PackageManager { get { throw null; } }
- }
-
- public static partial class NodeJSHostingExtensions
- {
- public static ApplicationModel.IResourceBuilder AddApp(this ApplicationModel.IResourceBuilder builder, string name, string? appName = null, System.Func, ApplicationModel.IResourceBuilder>? configure = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder AddApp(this ApplicationModel.IResourceBuilder builder, string name, string? filter = null, System.Func, ApplicationModel.IResourceBuilder>? configure = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder AddNxApp(this IDistributedApplicationBuilder builder, string name, string? workingDirectory = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder AddPnpmApp(this IDistributedApplicationBuilder builder, string name, string workingDirectory, string scriptName = "start", string[]? args = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder AddTurborepoApp(this IDistributedApplicationBuilder builder, string name, string? workingDirectory = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder AddViteApp(this IDistributedApplicationBuilder builder, string name, string? workingDirectory = null, string packageManager = "npm", bool useHttps = false) { throw null; }
-
- public static ApplicationModel.IResourceBuilder AddYarnApp(this IDistributedApplicationBuilder builder, string name, string workingDirectory, string scriptName = "start", string[]? args = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder RunWithPackageManager(this ApplicationModel.IResourceBuilder builder, string? packageManager = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder RunWithPackageManager(this ApplicationModel.IResourceBuilder builder, string? packageManager = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithMappedEndpointPort(this ApplicationModel.IResourceBuilder builder, string? endpointName = null)
- where TResource : NodeAppResource { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithNpmPackageInstallation(this ApplicationModel.IResourceBuilder resource, bool useCI = false, System.Action>? configureInstaller = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithNpmPackageInstaller(this ApplicationModel.IResourceBuilder resource, bool useCI = false, System.Action>? configureInstaller = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithNpmPackageInstaller(this ApplicationModel.IResourceBuilder resource, bool useCI = false, System.Action>? configureInstaller = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithPnpmPackageInstallation(this ApplicationModel.IResourceBuilder resource, System.Action>? configureInstaller = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithPnpmPackageInstaller(this ApplicationModel.IResourceBuilder resource, System.Action>? configureInstaller = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithPnpmPackageInstaller(this ApplicationModel.IResourceBuilder resource, System.Action>? configureInstaller = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithYarnPackageInstallation(this ApplicationModel.IResourceBuilder resource, System.Action>? configureInstaller = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithYarnPackageInstaller(this ApplicationModel.IResourceBuilder resource, System.Action>? configureInstaller = null) { throw null; }
-
- public static ApplicationModel.IResourceBuilder WithYarnPackageInstaller(this ApplicationModel.IResourceBuilder resource, System.Action>? configureInstaller = null) { throw null; }
- }
-}
-
-namespace Aspire.Hosting.ApplicationModel
-{
- public partial class NpmInstallerResource : ExecutableResource
- {
- public NpmInstallerResource(string name, string workingDirectory) : base(default!, default!, default!) { }
- }
-
- public partial class NxAppResource : NodeAppResource
- {
- public NxAppResource(string name, string workingDirectory, string appName, string command = "nx") : base(default!, default!, default!) { }
-
- public string AppName { get { throw null; } }
- }
-
- public partial class NxResource : Resource
- {
- public NxResource(string name, string workingDirectory) : base(default!) { }
-
- public string WorkingDirectory { get { throw null; } }
- }
-
- public partial class PnpmInstallerResource : ExecutableResource
- {
- public PnpmInstallerResource(string name, string workingDirectory) : base(default!, default!, default!) { }
- }
-
- public partial class TurborepoAppResource : NodeAppResource
- {
- public TurborepoAppResource(string name, string workingDirectory, string filter, string command = "turbo") : base(default!, default!, default!) { }
-
- public string Filter { get { throw null; } }
- }
-
- public partial class TurborepoResource : Resource
- {
- public TurborepoResource(string name, string workingDirectory) : base(default!) { }
-
- public string WorkingDirectory { get { throw null; } }
- }
-
- public partial class YarnInstallerResource : ExecutableResource
- {
- public YarnInstallerResource(string name, string workingDirectory) : base(default!, default!, default!) { }
- }
-}
\ No newline at end of file
diff --git a/src/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.csproj b/src/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.csproj
index 4d6914c83..22d199112 100644
--- a/src/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.csproj
+++ b/src/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.csproj
@@ -18,11 +18,5 @@
-
-
-
-
-
-
diff --git a/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/AppHostTests.cs b/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/AppHostTests.cs
similarity index 69%
rename from tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/AppHostTests.cs
rename to tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/AppHostTests.cs
index 356141491..fd01a487a 100644
--- a/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/AppHostTests.cs
+++ b/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/AppHostTests.cs
@@ -1,8 +1,8 @@
using CommunityToolkit.Aspire.Testing;
-namespace CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests;
+namespace CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests;
-public class AppHostTests(AspireIntegrationTestFixture fixture) : IClassFixture>
+public class AppHostTests(AspireIntegrationTestFixture fixture) : IClassFixture>
{
[Theory]
[InlineData("turbo-web")]
diff --git a/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests.csproj b/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests.csproj
new file mode 100644
index 000000000..487020628
--- /dev/null
+++ b/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests.csproj
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/NxResourceCreationTests.cs b/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/NxResourceCreationTests.cs
similarity index 84%
rename from tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/NxResourceCreationTests.cs
rename to tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/NxResourceCreationTests.cs
index dcc44c4fd..081f38574 100644
--- a/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/NxResourceCreationTests.cs
+++ b/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/NxResourceCreationTests.cs
@@ -1,7 +1,7 @@
using Aspire.Hosting;
-using Aspire.Hosting.NodeJs;
+using Aspire.Hosting.JavaScript;
-namespace CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests;
+namespace CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests;
public class NxResourceCreationTests
{
@@ -58,10 +58,10 @@ public void NxResource_IsRunningState()
[InlineData("npm")]
[InlineData("yarn")]
[InlineData("pnpm")]
- public async Task Nx_RunWithPackageManager_InfersFromInstallerWhenNotProvided(string packageManager)
+ public async Task Nx_WithPackageManagerLaunch_InfersFromInstallerWhenNotProvided(string packageManager)
{
var builder = DistributedApplication.CreateBuilder();
- // Attach a yarn installer annotation to the Nx resource, then call RunWithPackageManager with no arg
+ // Attach a yarn installer annotation to the Nx resource, then call WithPackageManagerLaunch with no arg
var nxBuilder = builder.AddNxApp("nx-with-installer");
nxBuilder = (packageManager switch
@@ -70,7 +70,7 @@ public async Task Nx_RunWithPackageManager_InfersFromInstallerWhenNotProvided(st
"yarn" => nxBuilder.WithYarn(),
"pnpm" => nxBuilder.WithPnpm(),
_ => throw new ArgumentOutOfRangeException(nameof(packageManager), $"Unsupported package manager: {packageManager}"),
- }).RunWithPackageManager();
+ }).WithPackageManagerLaunch();
// Add an app to the Nx workspace to verify app-level command/args
var app1 = nxBuilder.AddApp("app1");
@@ -87,31 +87,36 @@ public async Task Nx_RunWithPackageManager_InfersFromInstallerWhenNotProvided(st
// Verify the created NxAppResource command and args
var nxAppResource = Assert.Single(appModel.Resources.OfType());
// For the inferred package manager, AddApp uses the corresponding command
- Assert.True(nxAppResource.TryGetLastAnnotation(out var appPm));
- Assert.Equal(packageManager, appPm.ExecutableName);
- Assert.Equal("nx", nxAppResource.Command);
+ Assert.Equal(packageManager switch
+ {
+ "npm" => "npx",
+ "yarn" => "yarn",
+ "pnpm" => "pnpx",
+ _ => packageManager
+ }, nxAppResource.Command);
var nxAppArgs = await nxAppResource.GetArgumentValuesAsync();
Assert.Collection(nxAppArgs,
+ arg => Assert.Equal("nx", arg),
arg => Assert.Equal("serve", arg),
arg => Assert.Equal("app1", arg));
}
[Fact]
- public void Nx_RunWithPackageManager_ThrowsWhenNotConfigured()
+ public void Nx_WithPackageManagerLaunch_ThrowsWhenNotConfigured()
{
var builder = DistributedApplication.CreateBuilder();
// No installer and no packageManager argument should cause an exception
- Assert.Throws(() => builder.AddNxApp("nx-no-installer").RunWithPackageManager());
+ Assert.Throws(() => builder.AddNxApp("nx-no-installer").WithPackageManagerLaunch());
}
[Fact]
- public async Task Nx_RunWithPackageManager_WithPnpmAndYarn()
+ public async Task Nx_WithPackageManagerLaunch_WithPnpmAndYarn()
{
var builder = DistributedApplication.CreateBuilder();
- var nxPnpm = builder.AddNxApp("nx-pnpm").WithPnpm().RunWithPackageManager();
- var nxYarn = builder.AddNxApp("nx-yarn").WithYarn().RunWithPackageManager();
+ var nxPnpm = builder.AddNxApp("nx-pnpm").WithPnpm().WithPackageManagerLaunch();
+ var nxYarn = builder.AddNxApp("nx-yarn").WithYarn().WithPackageManagerLaunch();
// add apps to both (use unique app names)
nxPnpm.AddApp("app1-pnpm");
@@ -126,11 +131,10 @@ public async Task Nx_RunWithPackageManager_WithPnpmAndYarn()
Assert.Equal("pnpm", pmPnpm.ExecutableName);
var nxPnpmApp = appModel.Resources.OfType().Single(r => r.Name == "app1-pnpm");
- Assert.True(nxPnpmApp.TryGetLastAnnotation(out var appPmPnpm));
- Assert.Equal("pnpm", appPmPnpm.ExecutableName);
- Assert.Equal("nx", nxPnpmApp.Command);
+ Assert.Equal("pnpx", nxPnpmApp.Command);
var pnpmArgs = await nxPnpmApp.GetArgumentValuesAsync();
Assert.Collection(pnpmArgs,
+ arg => Assert.Equal("nx", arg),
arg => Assert.Equal("serve", arg),
arg => Assert.Equal("app1-pnpm", arg));
@@ -139,21 +143,20 @@ public async Task Nx_RunWithPackageManager_WithPnpmAndYarn()
Assert.Equal("yarn", pmYarn.ExecutableName);
var nxYarnApp = appModel.Resources.OfType().Single(r => r.Name == "app1-yarn");
- Assert.True(nxYarnApp.TryGetLastAnnotation(out var appPmYarn));
- Assert.Equal("yarn", appPmYarn.ExecutableName);
- Assert.Equal("nx", nxYarnApp.Command);
+ Assert.Equal("yarn", nxYarnApp.Command);
var yarnArgs = await nxYarnApp.GetArgumentValuesAsync();
Assert.Collection(yarnArgs,
+ arg => Assert.Equal("nx", arg),
arg => Assert.Equal("serve", arg),
arg => Assert.Equal("app1-yarn", arg));
}
[Fact]
- public async Task Nx_NoRunWithPackageManager_Defaults_AppCommandsIncludeNpxOrDefault()
+ public async Task Nx_NoWithPackageManagerLaunch_Defaults_AppCommandsIncludeNpxOrDefault()
{
var builder = DistributedApplication.CreateBuilder();
- // Nx without RunWithPackageManager or installer
+ // Nx without WithPackageManagerLaunch or installer
var nx = builder.AddNxApp("nx-default");
nx.AddApp("app-nx-default");
@@ -178,7 +181,7 @@ public async Task Nx_WithPackageManager_WithoutRunWith_DoesNotAffectAppExecution
{
var builder = DistributedApplication.CreateBuilder();
- // Configure package manager but don't call RunWithPackageManager
+ // Configure package manager but don't call WithPackageManagerLaunch
var nxBuilder = builder.AddNxApp("nx-configured-only");
nxBuilder = packageManager switch
{
@@ -210,14 +213,14 @@ public async Task Nx_WithPackageManager_WithoutRunWith_DoesNotAffectAppExecution
}
[Fact]
- public void Nx_RunWithPackageManager_ExplicitOverride_UsesExplicitValue()
+ public void Nx_WithPackageManagerLaunch_ExplicitOverride_UsesExplicitValue()
{
var builder = DistributedApplication.CreateBuilder();
// Configure with npm but explicitly run with yarn
var nx = builder.AddNxApp("nx-override")
.WithNpm()
- .RunWithPackageManager("yarn");
+ .WithPackageManagerLaunch("yarn");
using var app = builder.Build();
var appModel = app.Services.GetRequiredService();
@@ -234,14 +237,14 @@ public void Nx_RunWithPackageManager_ExplicitOverride_UsesExplicitValue()
}
[Fact]
- public void Nx_RunWithPackageManager_CalledTwiceWithSame_DoesNotThrow()
+ public void Nx_WithPackageManagerLaunch_CalledTwiceWithSame_DoesNotThrow()
{
var builder = DistributedApplication.CreateBuilder();
var nx = builder.AddNxApp("nx-idempotent")
.WithYarn()
- .RunWithPackageManager()
- .RunWithPackageManager(); // Second call with same inferred value
+ .WithPackageManagerLaunch()
+ .WithPackageManagerLaunch(); // Second call with same inferred value
using var app = builder.Build();
var appModel = app.Services.GetRequiredService();
@@ -252,16 +255,16 @@ public void Nx_RunWithPackageManager_CalledTwiceWithSame_DoesNotThrow()
}
[Fact]
- public void Nx_RunWithPackageManager_CalledTwiceWithDifferent_Throws()
+ public void Nx_WithPackageManagerLaunch_CalledTwiceWithDifferent_Throws()
{
var builder = DistributedApplication.CreateBuilder();
var nx = builder.AddNxApp("nx-conflict")
.WithYarn()
- .RunWithPackageManager(); // Sets yarn
+ .WithPackageManagerLaunch(); // Sets yarn
// Trying to change to pnpm should throw
- var ex = Assert.Throws(() => nx.RunWithPackageManager("pnpm"));
+ var ex = Assert.Throws(() => nx.WithPackageManagerLaunch("pnpm"));
Assert.Contains("already configured to run with the 'yarn' package manager", ex.Message);
}
@@ -281,7 +284,7 @@ public async Task Nx_MultipleApps_AllInheritExecutionAnnotation(string packageMa
"pnpm" => nx.WithPnpm(),
_ => throw new ArgumentOutOfRangeException(nameof(packageManager))
};
- nx = nx.RunWithPackageManager();
+ nx = nx.WithPackageManagerLaunch();
nx.AddApp("app1");
nx.AddApp("app2");
@@ -295,11 +298,20 @@ public async Task Nx_MultipleApps_AllInheritExecutionAnnotation(string packageMa
foreach (var nxApp in apps)
{
- Assert.True(nxApp.TryGetLastAnnotation(out var execution));
- Assert.Equal(packageManager, execution.ExecutableName);
- Assert.Equal("nx", execution.ScriptCommand);
+ var launcherName = packageManager switch
+ {
+ "npm" => "npx",
+ "yarn" => "yarn",
+ "pnpm" => "pnpx",
+ _ => throw new ArgumentOutOfRangeException(nameof(packageManager))
+ };
+
+ Assert.Equal(launcherName, nxApp.Command);
var args = await nxApp.GetArgumentValuesAsync();
- Assert.Equal("serve", args[0]);
+ Assert.Collection(args,
+ arg => Assert.Equal("nx", arg),
+ arg => Assert.Equal("serve", arg),
+ arg => Assert.Equal(nxApp.Name, arg));
}
}
@@ -351,7 +363,7 @@ public void Nx_WithInstallTrue_AppsWaitForInstaller()
var nx = builder.AddNxApp("nx-with-install")
.WithYarn(install: true)
- .RunWithPackageManager();
+ .WithPackageManagerLaunch();
nx.AddApp("app1");
diff --git a/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/TurborepoResourceCreationTests.cs b/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/TurborepoResourceCreationTests.cs
similarity index 85%
rename from tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/TurborepoResourceCreationTests.cs
rename to tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/TurborepoResourceCreationTests.cs
index e596b5e67..cbca136f9 100644
--- a/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/TurborepoResourceCreationTests.cs
+++ b/tests/CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests/TurborepoResourceCreationTests.cs
@@ -1,7 +1,7 @@
using Aspire.Hosting;
-using Aspire.Hosting.NodeJs;
+using Aspire.Hosting.JavaScript;
-namespace CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests;
+namespace CommunityToolkit.Aspire.Hosting.JavaScript.Extensions.Tests;
public class TurborepoResourceCreationTests
{
@@ -58,7 +58,7 @@ public void TurborepoResource_IsRunningState()
[InlineData("npm")]
[InlineData("yarn")]
[InlineData("pnpm")]
- public async Task Turborepo_RunWithPackageManager_InfersFromInstallerWhenNotProvided(string packageManager)
+ public async Task Turborepo_WithPackageManagerLaunch_InfersFromInstallerWhenNotProvided(string packageManager)
{
var builder = DistributedApplication.CreateBuilder();
@@ -70,7 +70,7 @@ public async Task Turborepo_RunWithPackageManager_InfersFromInstallerWhenNotProv
"yarn" => turbo.WithYarn(),
"pnpm" => turbo.WithPnpm(),
_ => throw new ArgumentOutOfRangeException(nameof(packageManager), $"Unsupported package manager: {packageManager}"),
- }).RunWithPackageManager();
+ }).WithPackageManagerLaunch();
// Add an app to the Turborepo workspace to verify app-level command/args
var app1 = turbo.AddApp("app1");
@@ -86,24 +86,29 @@ public async Task Turborepo_RunWithPackageManager_InfersFromInstallerWhenNotProv
// Verify Turborepo app command and args
var turboApp = Assert.Single(appModel.Resources.OfType());
// For the inferred package manager, AddApp uses the corresponding command
- Assert.True(turboApp.TryGetLastAnnotation(out var tapm));
- Assert.Equal(packageManager, tapm.ExecutableName);
- Assert.Equal("turbo", tapm.ScriptCommand);
+ Assert.Equal(packageManager switch
+ {
+ "npm" => "npx",
+ "yarn" => "yarn",
+ "pnpm" => "pnpx",
+ _ => packageManager
+ }, turboApp.Command);
var turboArgs = await turboApp.GetArgumentValuesAsync();
Assert.Collection(turboArgs,
- arg => Assert.Equal("run", arg),
- arg => Assert.Equal("dev", arg),
- arg => Assert.Equal("--filter", arg),
- arg => Assert.Equal("app1", arg));
+ arg => Assert.Equal("turbo", arg),
+ arg => Assert.Equal("run", arg),
+ arg => Assert.Equal("dev", arg),
+ arg => Assert.Equal("--filter", arg),
+ arg => Assert.Equal("app1", arg));
}
[Fact]
- public async Task Turborepo_RunWithPackageManager_WithPnpmAndYarn()
+ public async Task Turborepo_WithPackageManagerLaunch_WithPnpmAndYarn()
{
var builder = DistributedApplication.CreateBuilder();
- var turboPnpm = builder.AddTurborepoApp("turbo-pnpm").WithPnpm().RunWithPackageManager();
- var turboYarn = builder.AddTurborepoApp("turbo-yarn").WithYarn().RunWithPackageManager();
+ var turboPnpm = builder.AddTurborepoApp("turbo-pnpm").WithPnpm().WithPackageManagerLaunch();
+ var turboYarn = builder.AddTurborepoApp("turbo-yarn").WithYarn().WithPackageManagerLaunch();
turboPnpm.AddApp("app1-pnpm");
turboYarn.AddApp("app1-yarn");
@@ -117,11 +122,10 @@ public async Task Turborepo_RunWithPackageManager_WithPnpmAndYarn()
Assert.Equal("pnpm", tpmPnpm.ExecutableName);
var turboPnpmApp = appModel.Resources.OfType().Single(r => r.Name == "app1-pnpm");
- Assert.True(turboPnpmApp.TryGetLastAnnotation(out var tapmPnpm));
- Assert.Equal("pnpm", tapmPnpm.ExecutableName);
- Assert.Equal("turbo", tapmPnpm.ScriptCommand);
+ Assert.Equal("pnpx", turboPnpmApp.Command);
var tpnpmArgs = await turboPnpmApp.GetArgumentValuesAsync();
Assert.Collection(tpnpmArgs,
+ arg => Assert.Equal("turbo", arg),
arg => Assert.Equal("run", arg),
arg => Assert.Equal("dev", arg),
arg => Assert.Equal("--filter", arg),
@@ -132,11 +136,10 @@ public async Task Turborepo_RunWithPackageManager_WithPnpmAndYarn()
Assert.Equal("yarn", tpmYarn.ExecutableName);
var turboYarnApp = appModel.Resources.OfType().Single(r => r.Name == "app1-yarn");
- Assert.True(turboYarnApp.TryGetLastAnnotation(out var tapmYarn));
- Assert.Equal("yarn", tapmYarn.ExecutableName);
- Assert.Equal("turbo", tapmYarn.ScriptCommand);
+ Assert.Equal("yarn", turboYarnApp.Command);
var tyarnArgs = await turboYarnApp.GetArgumentValuesAsync();
Assert.Collection(tyarnArgs,
+ arg => Assert.Equal("turbo", arg),
arg => Assert.Equal("run", arg),
arg => Assert.Equal("dev", arg),
arg => Assert.Equal("--filter", arg),
@@ -144,11 +147,11 @@ public async Task Turborepo_RunWithPackageManager_WithPnpmAndYarn()
}
[Fact]
- public async Task Turborepo_NoRunWithPackageManager_Defaults_AppCommandsIncludeNpxOrDefault()
+ public async Task Turborepo_NoWithPackageManagerLaunch_Defaults_AppCommandsIncludeNpxOrDefault()
{
var builder = DistributedApplication.CreateBuilder();
- // Turborepo without RunWithPackageManager or installer
+ // Turborepo without WithPackageManagerLaunch or installer
var turbo = builder.AddTurborepoApp("turbo-default");
turbo.AddApp("app-turbo-default");
@@ -207,38 +210,38 @@ public async Task Turborepo_WithPackageManager_WithoutRunWith_DoesNotAffectAppEx
}
[Fact]
- public void Turborepo_RunWithPackageManager_CalledTwiceWithDifferent_Throws()
+ public void Turborepo_WithPackageManagerLaunch_CalledTwiceWithDifferent_Throws()
{
var builder = DistributedApplication.CreateBuilder();
var turbo = builder.AddTurborepoApp("turbo-conflict")
.WithPnpm()
- .RunWithPackageManager();
+ .WithPackageManagerLaunch();
- var ex = Assert.Throws(() => turbo.RunWithPackageManager("npm"));
+ var ex = Assert.Throws(() => turbo.WithPackageManagerLaunch("npm"));
Assert.Contains("already configured to run with the 'pnpm' package manager", ex.Message);
}
[Fact]
- public void Turborepo_RunWithPackageManager_ThrowsWhenNotConfigured()
+ public void Turborepo_WithPackageManagerLaunch_ThrowsWhenNotConfigured()
{
var builder = DistributedApplication.CreateBuilder();
var ex = Assert.Throws(() =>
- builder.AddTurborepoApp("turbo-no-config").RunWithPackageManager());
+ builder.AddTurborepoApp("turbo-no-config").WithPackageManagerLaunch());
Assert.Contains("not configured with a package manager", ex.Message);
}
[Fact]
- public void Turborepo_RunWithPackageManager_ExplicitOverride_UsesExplicitValue()
+ public void Turborepo_WithPackageManagerLaunch_ExplicitOverride_UsesExplicitValue()
{
var builder = DistributedApplication.CreateBuilder();
// Configure with npm but explicitly run with yarn
var turbo = builder.AddTurborepoApp("turbo-override")
.WithNpm()
- .RunWithPackageManager("yarn");
+ .WithPackageManagerLaunch("yarn");
using var app = builder.Build();
var appModel = app.Services.GetRequiredService();
@@ -255,14 +258,14 @@ public void Turborepo_RunWithPackageManager_ExplicitOverride_UsesExplicitValue()
}
[Fact]
- public void Turborepo_RunWithPackageManager_CalledTwiceWithSame_DoesNotThrow()
+ public void Turborepo_WithPackageManagerLaunch_CalledTwiceWithSame_DoesNotThrow()
{
var builder = DistributedApplication.CreateBuilder();
var turbo = builder.AddTurborepoApp("turbo-idempotent")
.WithYarn()
- .RunWithPackageManager()
- .RunWithPackageManager(); // Second call with same inferred value
+ .WithPackageManagerLaunch()
+ .WithPackageManagerLaunch(); // Second call with same inferred value
using var app = builder.Build();
var appModel = app.Services.GetRequiredService();
@@ -288,7 +291,7 @@ public async Task Turborepo_MultipleApps_AllInheritExecutionAnnotation(string pa
"pnpm" => turbo.WithPnpm(),
_ => throw new ArgumentOutOfRangeException(nameof(packageManager))
};
- turbo = turbo.RunWithPackageManager();
+ turbo = turbo.WithPackageManagerLaunch();
turbo.AddApp("app1");
turbo.AddApp("app2");
@@ -302,11 +305,18 @@ public async Task Turborepo_MultipleApps_AllInheritExecutionAnnotation(string pa
foreach (var turboApp in apps)
{
- Assert.True(turboApp.TryGetLastAnnotation(out var execution));
- Assert.Equal(packageManager, execution.ExecutableName);
- Assert.Equal("turbo", execution.ScriptCommand);
+ var launcherName = packageManager switch
+ {
+ "npm" => "npx",
+ "yarn" => "yarn",
+ "pnpm" => "pnpx",
+ _ => throw new ArgumentOutOfRangeException(nameof(packageManager))
+ };
+
+ Assert.Equal(launcherName, turboApp.Command);
var args = await turboApp.GetArgumentValuesAsync();
Assert.Collection(args,
+ arg => Assert.Equal("turbo", arg),
arg => Assert.Equal("run", arg),
arg => Assert.Equal("dev", arg),
arg => Assert.Equal("--filter", arg),
@@ -362,7 +372,7 @@ public void Turborepo_WithInstallTrue_AppsWaitForInstaller()
var turbo = builder.AddTurborepoApp("turbo-with-install")
.WithYarn(install: true)
- .RunWithPackageManager();
+ .WithPackageManagerLaunch();
turbo.AddApp("app1");
diff --git a/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests.csproj b/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests.csproj
deleted file mode 100644
index 80db3f3ee..000000000
--- a/tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests/CommunityToolkit.Aspire.Hosting.NodeJS.Extensions.Tests.csproj
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-