using Jint.Native; using Jint.Runtime; using Jint.Runtime.Interop; namespace Jint.Tests.Runtime.Domain { internal sealed class UuidPrototype : UuidInstance { private UuidPrototype(Engine engine) : base(engine) { } private UuidInstance EnsureUuidInstance(JsValue thisObj) { return thisObj.TryCast(value => { throw new JavaScriptException(Engine.Realm.Intrinsics.TypeError, "Invalid Uuid"); }); } private JsValue ToGuidString(JsValue thisObj, JsValue[] arguments) => EnsureUuidInstance(thisObj).PrimitiveValue.ToString(); private JsValue ValueOf(JsValue thisObj, JsValue[] arguments) => EnsureUuidInstance(thisObj).PrimitiveValue; public static UuidPrototype CreatePrototypeObject(Engine engine, UuidConstructor ctor) { var obj = new UuidPrototype(engine) { PrimitiveValue = JsUuid.Empty, _prototype = engine.Realm.Intrinsics.Object.PrototypeObject, }; obj.FastAddProperty("constructor", ctor, false, false, true); return obj; } public void Configure() { FastAddProperty("toString", new ClrFunctionInstance(Engine, "toString", ToGuidString), true, false, true); FastAddProperty("valueOf", new ClrFunctionInstance(Engine, "valueOf", ValueOf), true, false, true); } } }