Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/89netram/browser-csharp
Executes C# snippets in the browser
https://github.com/89netram/browser-csharp
c-sharp runtime-compilation wasm
Last synced: about 1 month ago
JSON representation
Executes C# snippets in the browser
- Host: GitHub
- URL: https://github.com/89netram/browser-csharp
- Owner: 89netraM
- License: mit
- Created: 2020-07-13T12:01:04.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-03-05T05:49:27.000Z (almost 2 years ago)
- Last Synced: 2024-11-06T11:53:01.727Z (about 2 months ago)
- Topics: c-sharp, runtime-compilation, wasm
- Language: C#
- Homepage:
- Size: 1.05 MB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 26
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Browser C#
Executes C# snippets in the browser.
## Installation
Install using `npm`:
```
npm install browser-csharp
```The WASM files for .NET **must** be included as static assets in the correct
way:1. The folder `./node_modules/browser-csharp/out/_framework` **must** be
included as `./_framework` relative to the `` of your HTML file.
2. You **must** include a reference to the WASM .NET entry file:
``After doing this you can include the client library in JS/TS with a regular
`require`/`import`.## Usage
Include a reference to the library:
```TypeScript
const BrowserCSharp = require("browser-csharp").BrowserCSharp; // JS
import { BrowserCSharp } from "browser-csharp"; // TS
```Wait for the WASM library to initiate:
```TypeScript
BrowserCSharp.OnReady(success => { /* Callback */ });
```Run a code snippet:
```TypeScript
BrowserCSharp.ExecuteScript(`Console.WriteLine("Hello from C#");`)
.then(response => {
response.stdErr // String with errors (parsing and compilation)
response.stdOut // String with C# output (runtime)
response.result // The return value of the the expression
});
```With an extra argument (a string) the code snippet can be run in the context of
previous code snippets, that was run with the same context id.
This is good for creating REPLs.
```TypeScript
BrowserCSharp.ExecuteScript(codeSnippet, contextId)
```
The return is the same, a `Promise` that resolves with an object of the same
shape.## Example
For an example of what this package can do, look in the [`./example`](https://github.com/89netraM/browser-csharp/example/) folder for the code and [here](https://Γ₯sberg.net/browser-csharp/) for a live demo.
## Development
This package requires that .NET Core is installed for development. [Download the
SDK here](https://dotnet.microsoft.com/download).To test the wasm part during development run `dotnet run` in the wasm directory
to start a dev server. It will only include the wasm part, so use the following
snippet to invoke the code.```JavaScript
DotNet.invokeMethodAsync(
"BrowserCSharp", "ExecuteScript",
`String.Concat("apa".Select(c=>(char)(c+1)))`
).then(console.log)
```There's not much to test with the TypeScript part, but you can build it alone
with `npx gulp ts-build`.Building everything at once can be done with `npx gulp ts-build wasm-build`, or
`npm run prepack` π€·ββοΈ.