@@ -1,32 +1,38 @@
2module JavaScript.Experimental where
1module JavaScript.Experimental where
2+{-| A pair of very experimental functions for converting between
3+Elm records and JavaScript objects. It currently uses a best effort
4+conversion that can cause runtime errors. This API should change and
5+improve as we find its key failings.
4import JavaScript (JSObject)
8import JavaScript (JSObject)
5import Native.JavaScript
9import Native.JavaScript
7−-- Turn arbitrary JavaScript objects into Elm records.
11+{-| Turn arbitrary JavaScript objects into Elm records.
8−-- Arrays are converted into lists, nested objects are allowed.
12+Arrays are converted into lists, nested objects are allowed.
9−-- No `null` values or non-homogeneous arrays.
13+No `null` values or non-homogeneous arrays.
11−-- -- OK objects
15+ -- OK objects
12−-- { student:"Steve", scores:[83,94,99,72] }
16+ { student:"Steve", scores:[83,94,99,72] }
13−-- { errorLevel:10, critical:true }
17+ { errorLevel:10, critical:true }
15−-- -- BAD objects
19+ -- BAD objects
16−-- { answer:null }
20+ { answer:null }
17−-- { info:[true,42,'what'] }
21+ { info:[true,42,'what'] }
18toRecord : JSObject -> a
23toRecord : JSObject -> a
19toRecord = Native.JavaScript.toRecord
24toRecord = Native.JavaScript.toRecord
21−-- Turn arbitrary Elm records into JavaScript objects.
26+{-| Turn arbitrary Elm records into JavaScript objects.
22−-- Lists become arrays, nested records are allowed. No ADTs.
27+Lists become arrays, nested records are allowed. No ADTs.
24−-- -- OK records
29+ -- OK records
25−-- { student="Steve", scores=[83,94,99,72] }
30+ { student="Steve", scores=[83,94,99,72] }
26−-- { errorLevel=10, critical=True }
31+ { errorLevel=10, critical=True }
28−-- -- BAD records
33+ -- BAD records
29−-- { answer = Nothing }
34+ { answer = Nothing }
30−-- { result = Left "An error occurred" }
35+ { result = Left "An error occurred" }
31fromRecord : a -> JSObject
37fromRecord : a -> JSObject
32fromRecord = Native.JavaScript.fromRecord
38fromRecord = Native.JavaScript.fromRecord