Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ public static class JSHost
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
public sealed class JSFunctionBinding
{
internal JSFunctionBinding() { throw null; }
public static void InvokeJS(JSFunctionBinding signature, Span<JSMarshalerArgument> arguments) { throw null; }
public static JSFunctionBinding BindJSFunction(string functionName, string moduleName, ReadOnlySpan<JSMarshalerType> signatures) { throw null; }
public static JSFunctionBinding BindManagedFunction(string fullyQualifiedName, int signatureHash, ReadOnlySpan<JSMarshalerType> signatures) { throw null; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;


namespace System.Runtime.InteropServices.JavaScript
{
/// <summary>
Expand All @@ -15,8 +16,10 @@ namespace System.Runtime.InteropServices.JavaScript
[CLSCompliant(false)]
[SupportedOSPlatform("browser")]
[EditorBrowsable(EditorBrowsableState.Never)]
public sealed partial class JSFunctionBinding
public sealed class JSFunctionBinding
{
internal JSFunctionBinding() { }

#region intentionally opaque internal structure
internal unsafe JSBindingHeader* Header;
internal unsafe JSBindingType* Sigs;// points to first arg, not exception, not result
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshaling validates that the JavaScript function returned undefined value.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Void { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Void
Expand All @@ -37,6 +38,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshaling ignores result of the JavaScript function.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Discard { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Discard
Expand All @@ -45,6 +47,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean">Boolean</see> type.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Boolean { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Boolean
Expand All @@ -53,6 +56,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript Number via <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array">Uint8Array</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Byte { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Byte
Expand All @@ -61,6 +65,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String">String</see> one character long.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Char { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Char
Expand All @@ -69,6 +74,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript Number via <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int16Array">Int16Array</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Int16 { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Int16
Expand All @@ -78,6 +84,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript Number via <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Int32Array">Int32Array</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Int32 { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Int32
Expand All @@ -86,6 +93,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript Number within -9007199254740991 and 9007199254740991 range.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Int52 { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Int52
Expand All @@ -94,6 +102,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt">BigInt</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType BigInt64 { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.BigInt64
Expand All @@ -102,6 +111,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">Number</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Double { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Double
Expand All @@ -110,6 +120,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">Number</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Single { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Single
Expand All @@ -118,6 +129,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number">Number</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType IntPtr { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.IntPtr
Expand All @@ -126,6 +138,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object">Object</see> or it's JSObject proxy on managed side.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType JSObject { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.JSObject
Expand All @@ -134,6 +147,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Dynamic marshal as best fit. For <see cref="object"/> maps to ManagedObject proxy on JavaScript side.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Object { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Object
Expand All @@ -142,6 +156,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String">String</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType String { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.String
Expand All @@ -150,6 +165,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error">Error</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Exception { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.Exception
Expand All @@ -158,6 +174,7 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date">Date</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType DateTime { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.DateTime
Expand All @@ -166,11 +183,17 @@ private JSMarshalerType(JSFunctionBinding.JSBindingType signatureType)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date">Date</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType DateTimeOffset { get; } = new JSMarshalerType(new JSFunctionBinding.JSBindingType
{
Type = MarshalerType.DateTimeOffset
});

/// <summary>
/// Marshal as JavaScript underlying primitive type.
/// </summary>
/// <param name="primitive">Underlying primitive type</param>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Nullable(JSMarshalerType primitive)
{
CheckNullable(primitive);
Expand All @@ -189,6 +212,7 @@ public static JSMarshalerType Nullable(JSMarshalerType primitive)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Task()
{
return _task;
Expand All @@ -197,6 +221,8 @@ public static JSMarshalerType Task()
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise">Promise</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
/// <param name="result">Metadata about type of the Task result value</param>
public static JSMarshalerType Task(JSMarshalerType result)
{
CheckTask(result);
Expand All @@ -210,6 +236,8 @@ public static JSMarshalerType Task(JSMarshalerType result)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array">Array</see>.
/// </summary>
/// <param name="element">Metadata about type of the array element</param>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Array(JSMarshalerType element)
{
CheckArray(element);
Expand All @@ -226,6 +254,8 @@ public static JSMarshalerType Array(JSMarshalerType element)
/// <remarks>
/// ArraySegment will hold <see cref="GCHandleType.Pinned"/> to underlying array until disposed or garbage collected on JS side.
/// </remarks>
/// <param name="element">Metadata about type of the array element</param>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType ArraySegment(JSMarshalerType element)
{
CheckArraySegment(element);
Expand All @@ -240,6 +270,8 @@ public static JSMarshalerType ArraySegment(JSMarshalerType element)
/// Marshal as instance of Span class on JavaScript side.
/// </summary>
/// <remarks>Marshaler is not pinning the data, caller is responsible for doing that.</remarks>
/// <param name="element">Metadata about type of the span element</param>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Span(JSMarshalerType element)
{
CheckArraySegment(element);
Expand All @@ -258,6 +290,7 @@ public static JSMarshalerType Span(JSMarshalerType element)
/// <summary>
/// Marshal as JavaScript <see href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function">Function</see>.
/// </summary>
/// <returns>Marshaler metadata</returns>
public static JSMarshalerType Action()
{
return _action;
Expand Down
Loading