Skip to content

Commit f1d8123

Browse files
authored
Extension methods runtime support and typedefs (#212)
1 parent b8014b9 commit f1d8123

29 files changed

Lines changed: 1273 additions & 419 deletions

Docs/dynamic-invoke.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ For examples of this scenario, see
1515
<GenerateNodeApiTypeDefinitionsForReferences>true</GenerateNodeApiTypeDefinitionsForReferences>
1616
</PropertyGroup>
1717
<ItemGroup>
18-
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="0.4.*" />
18+
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="0.5.*" />
1919
<PackageReference Include="Example.Package" Version="1.2.3" />
2020
<PackageReference Include="Example.Package.Two" Version="2.3.4" />
2121
</ItemGroup>

examples/Directory.Build.props

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22
<!-- Don't include the project root Directory.Build.props; just get the default rid. -->
33
<Import Project="../rid.props" />
44

5+
<!-- Import a props file containing the local package version generated by `dotnet pack`,
6+
so examples use packages from the local repo rather than published packages. -->
7+
<Import Project="../out/pkg/version.props" />
8+
59
<PropertyGroup>
610
<!-- Use a local nuget package cache folder that is easy to wipe when testing. -->
711
<RestorePackagesPath>$(MSBuildThisFileDirectory)..\out\pkg</RestorePackagesPath>

examples/aot-module/aot-module.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
</PropertyGroup>
1010

1111
<ItemGroup>
12-
<PackageReference Include="Microsoft.JavaScript.NodeApi" Version="0.4.*-*" />
13-
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="0.4.*-*" />
12+
<PackageReference Include="Microsoft.JavaScript.NodeApi" Version="$(NodeApiDotnetPackageVersion)" />
13+
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="$(NodeApiDotnetPackageVersion)" />
1414
</ItemGroup>
1515

1616
</Project>

examples/aot-npm-package/lib/aot-npm-package.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
</PropertyGroup>
2121

2222
<ItemGroup>
23-
<PackageReference Include="Microsoft.JavaScript.NodeApi" Version="0.4.*-*" />
24-
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="0.4.*-*" />
23+
<PackageReference Include="Microsoft.JavaScript.NodeApi" Version="$(NodeApiDotnetPackageVersion)" />
24+
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="$(NodeApiDotnetPackageVersion)" />
2525
</ItemGroup>
2626

2727
</Project>

examples/dotnet-module/dotnet-module.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="Microsoft.JavaScript.NodeApi" Version="0.4.*-*" />
12-
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="0.4.*-*" />
11+
<PackageReference Include="Microsoft.JavaScript.NodeApi" Version="$(NodeApiDotnetPackageVersion)" />
12+
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="$(NodeApiDotnetPackageVersion)" />
1313
</ItemGroup>
1414

1515
</Project>

examples/hermes-engine/hermes-engine.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13-
<PackageReference Include="Microsoft.JavaScript.NodeApi" Version="0.4.*-*" PrivateAssets="all" />
13+
<PackageReference Include="Microsoft.JavaScript.NodeApi" Version="$(NodeApiDotnetPackageVersion)" PrivateAssets="all" />
1414
<PackageReference Include="Microsoft.JavaScript.Hermes" Version="0.1.6" PrivateAssets="all" />
1515
</ItemGroup>
1616

examples/semantic-kernel/example.js

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
// Copyright (c) Microsoft Corporation.
22
// Licensed under the MIT License.
33

4-
// @ts-check
5-
64
import dotnet from 'node-api-dotnet';
75
import './bin/System.Text.Encodings.Web.js';
86
import './bin/Microsoft.Extensions.DependencyInjection.js';
@@ -11,40 +9,17 @@ import './bin/Microsoft.SemanticKernel.Abstractions.js';
119
import './bin/Microsoft.SemanticKernel.Core.js';
1210
import './bin/Microsoft.SemanticKernel.Connectors.OpenAI.js';
1311

14-
const Logging = dotnet.Microsoft.Extensions.Logging;
1512
const SK = dotnet.Microsoft.SemanticKernel;
1613

17-
/** @type {dotnet.Microsoft.Extensions.Logging.ILogger} */
18-
const logger = {
19-
Log(logLevel, eventId, state, exception, formatter) {
20-
console.log(`LOG (${Logging.LogLevel[logLevel || 0]}): ${formatter(state, exception)}`);
21-
},
22-
IsEnabled(logLevel) { return true; },
23-
BeginScope(state) { return { dispose() { } }; },
24-
};
25-
/** @type {dotnet.Microsoft.Extensions.Logging.ILoggerFactory} */
26-
const loggerFactory = {
27-
CreateLogger(categoryName) { return logger; },
28-
AddProvider(provider) { },
29-
dispose() {}
30-
};
31-
3214
const kernelBuilder = SK.Kernel.CreateBuilder();
33-
//kernelBuilder.WithLoggerFactory(loggerFactory);
3415

35-
// The JS marshaller does not yet support extension methods.
36-
SK.OpenAIServiceCollectionExtensions.AddAzureOpenAIChatCompletion(
37-
kernelBuilder,
16+
kernelBuilder.AddAzureOpenAIChatCompletion(
3817
process.env['OPENAI_DEPLOYMENT'] || '',
3918
process.env['OPENAI_ENDPOINT'] || '',
4019
process.env['OPENAI_KEY'] || '',
41-
// Include optional parameters to disambiguate the overload.
42-
undefined,
43-
undefined,
44-
undefined,
4520
);
4621

47-
const kernel = SK.KernelExtensions.Build(kernelBuilder);
22+
const kernel = kernelBuilder.Build();
4823

4924
const prompt = `{{$input}}
5025
@@ -65,12 +40,11 @@ does not conflict with the First or Second Law.
6540
const executionSettings = new SK.Connectors.OpenAI.OpenAIPromptExecutionSettings();
6641
executionSettings.MaxTokens = 100;
6742

68-
// The JS marshaller does not yet support extension methods.
69-
const summaryFunction = SK.KernelExtensions.CreateFunctionFromPrompt(
70-
kernel, prompt, executionSettings);
43+
const summaryFunction = kernel.CreateFunctionFromPrompt(prompt, executionSettings);
7144

72-
const summarizeArguments = new Map();
73-
summarizeArguments.set('input', textToSummarize);
45+
const summarizeArguments = new Map([
46+
['input', textToSummarize],
47+
]);
7448

7549
const summary = await kernel.InvokeAsync(
7650
summaryFunction, new SK.KernelArguments(summarizeArguments, undefined));
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
{
22
"name": "node-api-dotnet-examples-semantic-kernel",
33
"type": "module",
4+
"scripts": {
5+
"checkjs": "tsc"
6+
},
47
"dependencies": {
58
"node-api-dotnet": "file:../../out/pkg/node-api-dotnet"
69
},
710
"devDependencies": {
8-
"@types/node": "^20.8.10"
11+
"@types/node": "^20.8.10",
12+
"typescript": "^5.3.3"
913
}
1014
}

examples/semantic-kernel/semantic-kernel.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
<ItemGroup>
1111
<PackageReference Include="Microsoft.SemanticKernel" Version="1.1.0" />
12-
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="0.4.*-*" />
12+
<PackageReference Include="Microsoft.JavaScript.NodeApi.Generator" Version="$(NodeApiDotnetPackageVersion)" />
1313
</ItemGroup>
1414

1515
</Project>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
/* https://aka.ms/tsconfig */
3+
"compilerOptions": {
4+
"target": "es2020",
5+
"module": "node16",
6+
"types": ["node"],
7+
"allowJs": true,
8+
"checkJs": true,
9+
"noEmit": true,
10+
"esModuleInterop": true,
11+
"forceConsistentCasingInFileNames": true,
12+
"strict": true,
13+
14+
// Diable full type-checking of type libraries, including those generated by node-api-dotnet.
15+
// Currently there are a few bugs in generated type definitions for .NET APIs, which do not
16+
// affect most JS applications as long as they don't reference the problematic APIs.
17+
"skipLibCheck": true
18+
}
19+
}

0 commit comments

Comments
 (0)