@@ -57,10 +57,49 @@ y->Object.get("fruit") // Some("banana")
5757@val
5858external create : {.. } => {.. } = "Object.create"
5959
60+ /**
61+ `createWithProperties(proto, descriptors)` creates a new object that delegates to `proto` and defines additional properties using descriptor objects.
62+
63+ See [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) on MDN.
64+
65+ ## Examples
66+
67+ ```rescript
68+ let proto = {"kind": "fruit"}
69+ let obj = Object.createWithProperties(proto, {"name": {"value": "banana"}})
70+ obj->Object.get("name") == Some("banana")
71+ obj->Object.get("kind") == Some("fruit")
72+ ```
73+ */
6074@val external createWithProperties : ({.. }, {.. }) => {.. } = "Object.create"
6175
76+ /**
77+ `createWithNull()` creates an object with a `null` prototype (no inherited properties).
78+
79+ See [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) on MDN.
80+
81+ ## Examples
82+
83+ ```rescript
84+ let obj = Object.createWithNull()
85+ obj->Object.get("toString") == None
86+ ```
87+ */
6288@val external createWithNull : (@as (json ` null` ) _ , unit ) => {.. } = "Object.create"
6389
90+ /**
91+ `createWithNullAndProperties(descriptors)` creates an object with a `null` prototype and defines properties using descriptor objects.
92+
93+ See [`Object.create`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create) on MDN.
94+
95+ ## Examples
96+
97+ ```rescript
98+ let obj = Object.createWithNullAndProperties({"name": {"value": "banana"}})
99+ obj->Object.get("name") == Some("banana")
100+ obj->Object.get("toString") == None
101+ ```
102+ */
64103@val external createWithNullAndProperties : (@as (json ` null` ) _ , {.. }) => {.. } = "Object.create"
65104
66105/**
@@ -91,6 +130,20 @@ See [Object.assign on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScri
91130@variadic @val
92131external assignMany : ({.. }, array <{.. }>) => {.. } = "Object.assign"
93132
133+ /**
134+ `copy(object)` creates a shallow copy of `object`.
135+
136+ See [`Object.assign`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) on MDN.
137+
138+ ## Examples
139+
140+ ```rescript
141+ let original = {"name": "banana"}
142+ let cloned = Object.copy(original)
143+ cloned->Object.get("name") == Some("banana")
144+ Object.is(original, cloned) == false
145+ ```
146+ */
94147@val external copy : (@as (json ` {}` ) _ , {.. } as 'a ) => 'a = "Object.assign"
95148
96149/**
@@ -118,12 +171,26 @@ external get: ({..}, string) => option<'a> = ""
118171let fruit = Symbol.make("fruit")
119172let x = Object.make()
120173x->Object.setSymbol(fruit, "banana")
121- x->Object.getSymbol(fruit) // Some("banana")
174+ x->Object.getSymbol(fruit) == Some("banana")
122175```
123176*/
124177@get_index
125178external getSymbol : ({.. }, Stdlib_Symbol .t ) => option <'a > = ""
126179
180+ /**
181+ `getSymbolUnsafe(object, key)` reads the value stored under the symbol `key` without any optional check.
182+
183+ See [`Symbol`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) on MDN.
184+
185+ ## Examples
186+
187+ ```rescript
188+ let key = Symbol.make("meta")
189+ let obj = Object.make()
190+ obj->Object.setSymbol(key, "hello")
191+ Object.getSymbolUnsafe(obj, key) == "hello"
192+ ```
193+ */
127194@get_index external getSymbolUnsafe : ({.. }, Stdlib_Symbol .t ) => 'a = ""
128195
129196/**
@@ -140,6 +207,22 @@ external getSymbol: ({..}, Stdlib_Symbol.t) => option<'a> = ""
140207@set_index
141208external set : ({.. }, string , 'a ) => unit = ""
142209
210+ /**
211+ `setSymbol(object, key, value)` stores `value` under the symbol `key` on `object`.
212+
213+ Beware this will *mutate* the object.
214+
215+ See [`Symbol`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) on MDN.
216+
217+ ## Examples
218+
219+ ```rescript
220+ let key = Symbol.make("count")
221+ let obj = Object.make()
222+ obj->Object.setSymbol(key, 5)
223+ Object.getSymbol(obj, key) == Some(5)
224+ ```
225+ */
143226@set_index external setSymbol : ({.. }, Stdlib_Symbol .t , 'a ) => unit = ""
144227
145228/**
0 commit comments