{"_id":"@albertli90/coreclr-host","_rev":"2-8c11e46e9afc08f9da459c81d9bcf3ad","name":"@albertli90/coreclr-host","dist-tags":{"latest":"0.0.2"},"versions":{"0.0.1":{"name":"@albertli90/coreclr-host","version":"0.0.1","description":"A node addon hosts core clr","main":"main.js","keywords":["coreclr"],"author":{"name":"Wentao LI"},"license":"MIT","_id":"@albertli90/coreclr-host@0.0.1","_nodeVersion":"14.16.0","_npmVersion":"7.6.3","dist":{"integrity":"sha512-GNxWY4kFpl+tWesmQ80RZ+SwXkGSznPffwq0F1Syh66c3Q5SxqVw4lcMmJNF3HKK15nqaAxuHCjXLqxc/u1m8g==","shasum":"56e5b1825fbfd67691321af60a6fc933ac1a3bdc","tarball":"https://registry.npmjs.org/@albertli90/coreclr-host/-/coreclr-host-0.0.1.tgz","fileCount":11,"unpackedSize":831993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglCE8CRA9TVsSAnZWagAAl3YP/3SMgG9ENU3R4vh0cqMe\nKqrenhJkSo0lY2ozNcEh0RMSezjMpxCNiu45m6GaL6AI1nJDwYe/s3xv1sK+\njI4u65e84wz8DEpO5r1rGgyCBaelQlIUTOrgpdXgGKnC+ARx0NUoL9LH7DXg\nhseiJCBu/5Hhc/mhPbv9Wmzplu0yS2ByY1eRrrcxRLMKqC5yz5qewMABVtJS\nC3euL17bTdRy1KcTRDTIEagkYEDfENgu6bLPUcSRFnSbcYR84Tpuf9UdExa3\nKBfrBGAXKRelertrA28AKsTrLV9DT0JxgriIT2+dC6UYDR0WKNYjd18PcnfV\nk81CYM5U3oaXNnu/N+cf9RWaEwNmSNHylYhAYe48yPQcz7aE1sqiMf5W0jkk\nmg85FCoBPGYzE7gP/GG90laJHKboObtDWe/gkPpawD9hvYEZ41uM08rfMDAt\nSobu1CxLaY6WgFapOVjUBSyPBMrzg8vO4mlGg+kUNresI27rxd3PY1mq4419\nPV+FyDH8IYx53I2lge+umrEs9PP8gD6XVEA4Fcna0De5aamzUyHxO2Js7n1K\nKDn9UT4vbuw7j8GIxfuvQFp7NDpnhMUNqTFR9spIQkAWRSyUvY+uqe6yXidy\n90l36mRe38zrZsISLBV0LDSuIb75dILG+/Ybmll4If0FglHnEEdV8MV70ssA\nQLVy\r\n=dEGk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCF6FtZzGy60Gufzr6ETP9vdZaFWzBig67+kdtNV6GATQIgXx51MVdkexe6heMp/FlvTh6/ceLvJZ+LW/eHdFlsKtE="}]},"_npmUser":{"name":"albertli90","email":"liwentao90@yahoo.com"},"directories":{},"maintainers":[{"name":"albertli90","email":"liwentao90@yahoo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coreclr-host_0.0.1_1620320571827_0.8822564423297734"},"_hasShrinkwrap":false},"0.0.2":{"name":"@albertli90/coreclr-host","version":"0.0.2","description":"A node addon hosts core clr","main":"main.js","keywords":["coreclr"],"author":{"name":"Wentao LI"},"license":"MIT","_id":"@albertli90/coreclr-host@0.0.2","_nodeVersion":"14.16.1","_npmVersion":"6.14.12","dist":{"integrity":"sha512-dvIODeWjRl323QvsVm4RPVLFCjdeODN1lfmCdENT/5bDdIysnME6OqNev65gO5Py9LSojPvUC85q9hCKWxjbOg==","shasum":"123fab35508aa37f52b72e6a058b9a52cb957eea","tarball":"https://registry.npmjs.org/@albertli90/coreclr-host/-/coreclr-host-0.0.2.tgz","fileCount":11,"unpackedSize":817449,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnXiRCRA9TVsSAnZWagAAzN8P/2nBakkmoTzNEL/xaFzm\nG+mSZBE2iBpGNPPU+oI7hrQ7luFG51POlB2BRCCyFjGz1RkipdLHA6XfT6gX\nitJpDCWYJvAf/9ucldECg7W3Rez5jdW9lMYb63hT34Ah/SGMoYKAEXqDPwGo\nx31zSAZlIJhILP4CeFJnDcU8u5nD7KpUN5dod95+hmESCuvIcPPRn5C/VY/z\nPuRnZbzve5fJ/ymGtmsoaBDYTkBHyl8rQnsr7o/at5jrZ9rsfSApg2dq8aqY\njjljn2X9sUui5Q7ycsvhUTGiMo6X/jQjbvnVft4AZj2A/TgLYs1pyqqlgIUf\n3DEyqPZFtre3zCDy4eDWuv9rC1WQLuNC/cWnulDKvksfX27ljiuLvvtbOUcx\n8b08tptIUVsR6iluAcszLursvrQTikDEi7hSOtyzsNnSGMuTZiCsLCJL6cWe\nsjiyqP99yLqWe5dDjoD+ehbCzi8YpZ6A2R/SNeAldeuituX+YJi9huzcBCXO\nla6w9MCYL0P+8hcEt8Qy/qe/RE5B+Ch1cQQ+6weo4/W9GJyA6l5rr5bRAMfT\nC5ZjC3rbUnioxfJqqasRd/QxrWw+njksiO7aX9VQeB4YKVs/iVPdP3F6odpp\n8OMQhWEzmN6bDMGRrPwztygN6OLi+miJaSB+nzvarJ9DSb15IjSKzw0pTt5A\nDKdk\r\n=UPnZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDsc47v2dN8TIHvnPZ0wCVJMM0xB6k6VK/JC505YLR+dAiB5Nz+XcySVfptM1nM/B/bH4XgxJAzhrOP90BZKFf9vZw=="}]},"_npmUser":{"name":"albertli90","email":"liwentao90@yahoo.com"},"directories":{},"maintainers":[{"name":"albertli90","email":"liwentao90@yahoo.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/coreclr-host_0.0.2_1620932752914_0.36226978526160636"},"_hasShrinkwrap":false}},"time":{"created":"2021-05-06T17:02:51.785Z","0.0.1":"2021-05-06T17:02:52.034Z","modified":"2022-04-04T12:35:25.366Z","0.0.2":"2021-05-13T19:05:53.150Z"},"maintainers":[{"name":"albertli90","email":"liwentao90@yahoo.com"}],"description":"A node addon hosts core clr","keywords":["coreclr"],"author":{"name":"Wentao LI"},"license":"MIT","readme":"<h1 align=\"center\">coreclr node</h1>\n\n<div align=\"center\">\n\n[![npm version](https://img.shields.io/npm/v/@albertli90/coreclr-host.svg)](https://www.npmjs.com/package/@albertli90/coreclr-host)\n[![nuget version](https://img.shields.io/nuget/v/CoreclrNodeHost)](https://www.nuget.org/packages/CoreclrNodeHost)\n\nA simple bridge between coreclr and nodejs\n</div>\n\n> *This is a very early release of this package, do not suggest using it in production till latter stable version*\n\n\nAdd the CoreclrNodeHost reference to the csproj config\n```xml\n<PackageReference Include=\"CoreclrNodeHost\" Version=\"0.0.1\" />\n```\n\ncreate an example c# entry class\n```csharp\nnamespace BasicExample\n{\n    using System;\n    using FluentAssertions;\n    using System.Threading.Tasks;\n    using CoreclrNodeHost;\n    using CoreclrNodeHost.InProcess;\n\n    public class Program\n    {\n        \n        private static readonly TaskCompletionSource<int> MainTaskCompletionSource = new TaskCompletionSource<int>();\n\n        public static JsDynamicObject setMainTcs(JsValue[] args)\n        {\n            \n            Console.WriteLine($\"Basic example setMainTcs invoked w/o {args.Length} arguments\");\n            \n            var host = NodeHost.Instance;\n\n            args.Length.Should().Be(4);\n\n            host.TryGetObject(args[0], typeof(bool), out var oneBool);\n            oneBool.Should().Be(true);\n\n            host.TryGetObject(args[1], typeof(double), out var oneNumber);\n            oneNumber.Should().Be(1e3);\n\n            host.TryGetObject(args[2], typeof(string), out var oneString);\n            oneString.Should().Be(\"oneString\");\n\n            host.TryGetObject(args[3], typeof(Object), out dynamic oneObj);\n            // oneObj.Should().BeOfType(typeof(JsDynamicObject));\n            ((string) oneObj.message).Should().Be(\"oneMessageStringInObj\");\n\n            var result = host.New();\n            host.SetMember(result, \"argCount\", DotNetValue.FromInt(args.Length));\n            host.SetMember(result, \"message\", DotNetValue.FromString(\"oneMessageStringInResultObj\"));\n            \n            MainTaskCompletionSource.SetResult(0);\n            \n            return result;\n        }\n\n        public static Task<int> Main(string[] args)\n        {\n            Console.WriteLine($\"Basic example entry invoked {args[0]}\");\n\n            return MainTaskCompletionSource.Task;\n        }\n    }\n}\n```\n\nthen invoke the static method from javascript\n```javascript\nconst assert = require('assert');\nconst path = require('path');\nconst coreclrhost = require('@albertli90/coreclr-host');\n\nconst result = coreclrhost.runCoreApp(\n    path.join(__dirname, 'bin', 'Debug', 'netcoreapp3.1', 'BasicExample.dll'),\n    \"AdditionalArgument\"\n);\n\nconst setMainTcsResult = coreclrhost.callManagedFunction(\n    \"BasicExample.Program\",\n    \"setMainTcs\",\n    true,\n    1e3,\n    \"oneString\",\n    {\n        message: \"oneMessageStringInObj\"\n    }\n)\n\nassert.strictEqual(typeof setMainTcsResult, \"object\");\nassert.strictEqual(setMainTcsResult.argCount, 4);\nassert.strictEqual(setMainTcsResult.message, \"oneMessageStringInResultObj\");\n\n\n(async ()=>{\n    assert.strictEqual(await result, 0);    \n})()\n```","readmeFilename":"README.md"}