@@ -1,180 +1,82 @@
11module Playwright
2− ( BrowserType
3− , Browser
4−
5− , firefox
6− , chromium
7− , webkit
8−
9− , launch
10− , LaunchOptions
11− , headless
12− , executablePath
13− , args
14− , ignoreDefaultArgs
15− , ProxyOptions
16− , server
17− , bypass
18− , username
19− , password
20− , proxy
21− , downloadsPath
22− , chromiumSandbox
23− , firefoxUserPrefs
24− , handleSIGINT
25− , handleSIGTERM
26− , handleSIGHUP
27− , timeout
28− , env
29− , devtools
30− , slowMo
31−
32− , class Close
2+ ( launch
3+ , contexts
4+ , isConnected
5+ , version
336 , close
34−
35− , class NewPage
367 , newPage
37− , NewpageOptions
38−
39− , Frame
40− , ElementHandle
41− , Page
42−
43− , class Query
448 , query
459 , queryMany
10+ , module Playwright.Data
11+ , module Playwright.Options
4612 )
4713where
4814
4915import Prelude
5016import Effect (Effect)
51−import Control.Promise (Promise, toAffE)
52−import Data.Options (Option, Options, opt, options)
17+import Control.Promise (toAffE)
18+import Data.Options (Options, options)
5319import Effect.Aff (Aff)
54−import Foreign (Foreign)
55−import Foreign.Object (Object)
56−
57−foreign import data BrowserType :: Type
58−foreign import data Browser :: Type
59−
60−foreign import firefox :: BrowserType
61−foreign import chromium :: BrowserType
62−foreign import webkit :: BrowserType
63−
64−foreign import _launch :: BrowserType -> Foreign -> Effect (Promise Browser)
65−
66−launch :: BrowserType -> Options LaunchOptions -> Aff Browser
67−launch bt opts = toAffE $ _launch bt (options opts)
68−
69−foreign import data LaunchOptions :: Type
70−
71−headless :: Option LaunchOptions Boolean
72−headless = opt "headless"
73−
74−executablePath :: Option LaunchOptions String
75−executablePath = opt "executablePath"
76−
77−args :: Option LaunchOptions String
78−args = opt "args"
79−
80−ignoreDefaultArgs :: Option LaunchOptions (Array String)
81−ignoreDefaultArgs = opt "ignoreDefaultArgs"
82−
83−foreign import data ProxyOptions :: Type
84−
85−server :: Option ProxyOptions String
86−server = opt "server"
87−
88−bypass :: Option ProxyOptions String
89−bypass = opt "bypass"
90−
91−username :: Option ProxyOptions String
92−username = opt "username"
93−
94−password :: Option ProxyOptions String
95−password = opt "password"
96−
97−proxy :: Option LaunchOptions (Options ProxyOptions)
98−proxy = opt "proxy"
99−
100−downloadsPath :: Option LaunchOptions String
101−downloadsPath = opt "downloadsPath"
102−
103−chromiumSandbox :: Option LaunchOptions Boolean
104−chromiumSandbox = opt "chromiumSandbox"
105−
106−firefoxUserPrefs :: Option LaunchOptions Foreign
107−firefoxUserPrefs = opt "firefoxUserPrefs"
108−
109−handleSIGINT :: Option LaunchOptions Boolean
110−handleSIGINT = opt "handleSIGINT"
111−
112−handleSIGTERM :: Option LaunchOptions Boolean
113−handleSIGTERM = opt "handleSIGTERM"
114−
115−handleSIGHUP :: Option LaunchOptions Boolean
116−handleSIGHUP = opt "handleSIGHUP"
117−
118−timeout :: Option LaunchOptions Number
119−timeout = opt "timeout"
120−
121−env :: Option LaunchOptions (Object String)
122−env = opt "env"
123−
124−devtools :: Option LaunchOptions Boolean
125−devtools = opt "devtools"
126−
127−slowMo :: Option LaunchOptions Number
128−slowMo = opt "slowMo"
129−
130−class Close sth
131−
132−instance closeBrowser :: Close Browser
133−
134−close :: forall sth. Close sth => sth -> Aff Unit
135−close = toAffE <<< _close
136−
137−foreign import _close :: forall sth. sth -> Effect (Promise Unit)
138−
139−foreign import data BrowserContext :: Type
140−
141−foreign import contexts :: Browser -> Effect (Array BrowserContext)
142−
143−foreign import isConnected :: Browser -> Effect Boolean
144−
145−foreign import version :: Browser -> Effect String
146−
147−foreign import data NewpageOptions :: Type
148−
149−foreign import data Page :: Type
150−
151−class NewPage sth
152−
153−instance newpageBrowser :: NewPage Browser
154−instance newpageBrowserContext :: NewPage BrowserContext
155−
156−newPage :: forall sth. NewPage sth => sth -> Options NewpageOptions -> Aff Page
157−newPage sth opts = toAffE $ _newPage sth (options opts)
158−
159−foreign import _newPage :: forall sth. sth -> Foreign -> Effect (Promise Page)
160−
161−foreign import data ElementHandle :: Type
162−
163−class Query sth
164−
165−instance queryElementHandle :: Query ElementHandle
166−instance queryPage :: Query Page
167−instance queryFrame :: Query Frame
168−
169−type Selector = String
170−
171−foreign import data Frame :: Type
172−
173−foreign import query_ :: forall sth. sth -> Selector -> Effect (Promise ElementHandle)
174−foreign import queryMany_ :: forall sth. sth -> Selector -> Effect (Promise (Array ElementHandle))
175−
176−query :: forall sth. Query sth => sth -> Selector -> Aff ElementHandle
177−query sth = toAffE <<< query_ sth
178−
179−queryMany :: forall sth. Query sth => sth -> Selector -> Aff (Array ElementHandle)
180−queryMany sth = toAffE <<< queryMany_ sth
20+import Untagged.Union (type (|+|))
21+import Node.Buffer (Buffer)
22+import Playwright.Data
23+import Playwright.Options
24+import Playwright.Internal (prop)
25+
26+launch :: BrowserType -> Options Launch -> Aff Browser
27+launch bt =
28+ options >>>
29+ prop "launch" (\_ -> launch) bt >>>
30+ toAffE
31+
32+close :: Browser |+| BrowserContext |+| Page -> Aff Unit
33+close =
34+ prop "close" (\_ -> close) >>> toAffE
35+
36+contexts :: Browser -> Effect (Array BrowserContext)
37+contexts =
38+ prop "contexts" (\_ -> contexts)
39+
40+isConnected :: Browser -> Effect Boolean
41+isConnected =
42+ prop "isConnected" (\_ -> isConnected)
43+
44+version :: Browser -> Effect String
45+version =
46+ prop "version" (\_ -> version)
47+
48+newPage :: Browser |+| BrowserContext -> Options Newpage -> Aff Page
49+newPage sth =
50+ options >>>
51+ prop "newPage" (\_ -> newPage) sth >>>
52+ toAffE
53+
54+-- | `sth.$(selector)`
55+query
56+ :: ElementHandle |+| Page |+| Frame
57+ -> Selector
58+ -> Aff ElementHandle
59+query sth =
60+ toAffE <<< prop "$" (\_ -> query) sth
61+
62+-- | `sth.$$(selector)
63+queryMany
64+ :: ElementHandle |+| Page |+| Frame
65+ -> Selector
66+ -> Aff (Array ElementHandle)
67+queryMany sth =
68+ toAffE <<< prop "$$" (\_ -> queryMany) sth
69+
70+screenshot
71+ :: ElementHandle |+| Page
72+ -> Options Screenshot
73+ -> Aff Buffer
74+screenshot sth =
75+ options >>>
76+ prop "screenshot" (\_ -> screenshot) sth >>>
77+ toAffE
78+
79+url
80+ :: Page |+| Frame |+| Download |+| Request |+| Response |+| Worker
81+ -> Effect String
82+url = prop "url" \_ -> url