packages feed

yql (empty) → 0.0.0

raw patch · 22 files changed

+2779/−0 lines, 22 filesdep +SHAdep +aesondep +basesetup-changed

Dependencies added: SHA, aeson, base, base64-bytestring, bytestring, containers, cryptohash, data-default, ecma262, exceptions, hslogger, http-conduit, http-types, hxt, lens, opendatatable, parsec, text, transformers, unordered-containers, uri-template, utf8-string, uuid, vector, yql, zlib

Files

+ LICENSE view
@@ -0,0 +1,23 @@+Copyright (c) 2014, Fabian Bergmark+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++* Redistributions of source code must retain the above copyright notice, this+  list of conditions and the following disclaimer.++* Redistributions in binary form must reproduce the above copyright notice,+  this list of conditions and the following disclaimer in the documentation+  and/or other materials provided with the distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ Main.hs view
@@ -0,0 +1,64 @@+{-# LANGUAGE RankNTypes,+             RecordWildCards #-}++module Main+       ( main ) where++import Control.Applicative ((<$>))+import Control.Monad (forM, join, mzero)+import Control.Monad.Catch++import qualified Data.Map as Map (fromList)+import Data.Maybe (listToMaybe)++import System.IO++import Text.XML.HXT.Core (runX, readString, withRemoveWS, yes, (>>>))++import System.Environment (getArgs)++import Data.OpenDataTable+import Data.YQL++import Language.JavaScript.Interpret+import Language.JavaScript.SubType++import Data.OpenDataTable.Parser++import YQL++main :: IO ()+main = do+  hSetBuffering stdout NoBuffering+  (xml:_) <- getArgs+  xmlFile <- openFile xml ReadMode+  document <- hGetContents xmlFile++  mOpenDataTable <- listToMaybe <$> runX (readString [withRemoveWS yes] document+                                          >>> parseOpenDataTable)+  case mOpenDataTable of+   Just opentable@(OpenDataTable {..}) -> do+     let selects = [s | SelectBinding s <- openDataTableBindings]+     case selects of+      Select {..}:_ -> do+        vs <- join <$>+          forM selectInputs+          (\i -> do+              case i of+               InputKey InputInfo {..} -> do+                 let key = maybe inputInfoId id inputInfoAs+                 putStr (key ++ ": ")+                 str <- getLine+                 let value = case inputInfoType of+                              InputTypeBool -> inj (read str :: Bool)+                              InputTypeDate -> inj str+                              InputTypeDouble -> inj (Number (read str :: Double))+                              InputTypeFloat -> inj (Number (read str :: Double))+                              InputTypeInt -> inj (Number (read str :: Double))+                              InputTypeString -> inj str+                 return [(key, value)]+               _ -> return mzero)+        result <- runYQL opentable (Map.fromList vs)+        print result+      _ -> throwM YQLExceptionMissingSelect+   _ -> throwM YQLExceptionXMLError
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ src/Data/YQL.hs view
@@ -0,0 +1,53 @@+{-# LANGUAGE DeriveDataTypeable,+             TemplateHaskell #-}++module Data.YQL+       ( YQL(..)+       , YQLException(..)+       , YQLM+       , rest+       , y ) where++import Control.Lens+import Control.Monad.Catch+import Control.Monad.Trans.State.Lazy (StateT)++import Data.Typeable++import Text.Parsec (ParseError)++import Data.YQL.Response+import Data.YQL.Rest+import Data.YQL.Y++import Language.JavaScript.Interpret (Value)++data YQL =+  YQL+  { yqlResponse :: Response+  , yqlRest     :: Rest+  , yqlY        :: Y }++type YQLM = StateT YQL IO++data YQLException+  = YQLExceptionInternalError+  | YQLExceptionJSParseError ParseError+  | YQLExceptionJSRuntimeError String+  | YQLExceptionJSONError+  | YQLExceptionMissingInput+  | YQLExceptionMissingSelect+  | YQLExceptionTypeError+  | YQLExceptionXMLError+  deriving (Show, Typeable)++instance Exception YQLException++response :: Lens' YQL Response+response = lens yqlResponse (\yql r -> yql { yqlResponse = r })++rest :: Lens' YQL Rest+rest = lens yqlRest (\yql r -> yql { yqlRest = r })++y :: Lens' YQL Y+y = lens yqlY (\yql y' -> yql { yqlY = y' })
+ src/Data/YQL/Cache.hs view
@@ -0,0 +1,5 @@+module Data.YQL.Cache+       ( Cache(..) ) where++data Cache =+  Cache
+ src/Data/YQL/Context.hs view
@@ -0,0 +1,17 @@+module Data.YQL.Context+       ( Context(..)+       , host+       , table ) where++import Control.Lens (Lens', lens)++data Context =+  Context+  { contextHost  :: String+  , contextTable :: String }++host :: Lens' Context String+host = lens contextHost (\c h -> c { contextHost = h })++table :: Lens' Context String+table = lens contextTable (\c t -> c { contextTable = t })
+ src/Data/YQL/Crypto.hs view
@@ -0,0 +1,5 @@+module Data.YQL.Crypto+       ( Crypto(..) ) where++data Crypto =+  Crypto
+ src/Data/YQL/Response.hs view
@@ -0,0 +1,26 @@+{-# LANGUAGE PatternSynonyms #-}++module Data.YQL.Response+       ( Response(..)+       , pattern ResponseJSON+       , pattern ResponseByteString+       , object ) where++import Control.Lens++import Data.Aeson (Value)+import Data.ByteString.Lazy++data Response+  = Response+    { responseObject :: Either Value ByteString }++pattern ResponseJSON v = Response (Left v)+pattern ResponseByteString s = Response (Right s)++instance Show Response where+  show (Response (Left v)) = show v+  show (Response (Right s)) = show s++object :: Lens' Response (Either Value ByteString)+object = lens responseObject (\r o -> r { responseObject = o })
+ src/Data/YQL/Rest.hs view
@@ -0,0 +1,70 @@+{-# LANGUAGE OverloadedStrings,+             RankNTypes #-}++module Data.YQL.Rest+       ( Rest(..)+       , accept+       , contentType+       , header+       , headers+       , httpManager+       , httpRequest+       , timeout+       , url ) where++import Control.Lens++import Data.ByteString.Lazy+import Data.Map++import qualified Network.HTTP.Conduit as Conduit+import qualified Network.HTTP.Types.Header as HTTP++data Rest =+  Rest+  { restHttpManager :: Conduit.Manager+  , restHttpRequest :: Conduit.Request }++httpManager :: Lens' Rest Conduit.Manager+httpManager = lens restHttpManager (\rest m -> rest { restHttpManager = m })++httpRequest :: Lens' Rest Conduit.Request+httpRequest = lens restHttpRequest (\rest r -> rest { restHttpRequest = r })++requestHeaders :: Lens' Conduit.Request HTTP.RequestHeaders+requestHeaders =+  lens Conduit.requestHeaders (\r rhs -> r { Conduit.requestHeaders = rhs })++requestTimeout :: Lens' Conduit.Request (Maybe Int)+requestTimeout =+  lens+  Conduit.responseTimeout+  (\r t -> r { Conduit.responseTimeout = t })++requestUrl :: Lens' Conduit.Request ByteString+requestUrl =+  lens+  (fromStrict . Conduit.host)+  (\r u -> r { Conduit.host = toStrict u })++headers :: Lens' Rest HTTP.RequestHeaders+headers = httpRequest . requestHeaders++header :: HTTP.HeaderName -> Lens' Rest (Maybe ByteString)+header key =+  headers .+  lens fromList (const toList) .+  lens (fmap fromStrict) (const (fmap toStrict)) .+  at key++timeout :: Lens' Rest (Maybe Int)+timeout = httpRequest . requestTimeout++url :: Lens' Rest ByteString+url = httpRequest . requestUrl++accept :: Lens' Rest (Maybe ByteString)+accept = header "Accept"++contentType :: Lens' Rest (Maybe ByteString)+contentType = header "Content-Type"
+ src/Data/YQL/Result.hs view
@@ -0,0 +1,38 @@+module Data.YQL.Result+       ( Result(..)+       , response+       , headers+       , status+       , timeout+       , url ) where++import Control.Lens++import Data.ByteString++import qualified Network.HTTP.Types as HTTP++import Data.YQL.Response++data Result+  = Result+    { resultResponse :: Response+    , resultHeaders  :: HTTP.ResponseHeaders+    , resultStatus   :: HTTP.Status+    , resultTimeout  :: Bool+    , resultUrl      :: ByteString }++response :: Lens' Result Response+response = lens resultResponse (\res r -> res { resultResponse = r })++headers :: Lens' Result HTTP.ResponseHeaders+headers = lens resultHeaders (\res hs -> res { resultHeaders = hs })++status :: Lens' Result HTTP.Status+status = lens resultStatus (\res s -> res { resultStatus = s })++timeout :: Lens' Result Bool+timeout = lens resultTimeout (\res t -> res { resultTimeout = t })++url :: Lens' Result ByteString+url = lens resultUrl (\res u -> res { resultUrl = u })
+ src/Data/YQL/Y.hs view
@@ -0,0 +1,28 @@+{-# LANGUAGE TemplateHaskell #-}++module Data.YQL.Y+       ( Y(..)+       , cache+       , context+       , crypto ) where++import Control.Lens (Lens', lens)++import Data.YQL.Cache (Cache)+import Data.YQL.Context (Context)+import Data.YQL.Crypto (Crypto)++data Y =+  Y+  { yCache      :: Cache+  , yContext    :: Context+  , yCrypto     :: Crypto }++cache :: Lens' Y Cache+cache = lens yCache (\y c -> y { yCache = c })++context :: Lens' Y Context+context = lens yContext (\y c -> y { yContext = c })++crypto :: Lens' Y Crypto+crypto = lens yCrypto (\y c -> y { yCrypto = c })
+ src/Language/JavaScript/Host/YQL.hs view
@@ -0,0 +1,15 @@+module Language.JavaScript.Host.YQL where++import Data.Map (Map)++import Data.OpenDataTable+import Data.YQL (YQLM)++import Language.JavaScript.Interpret+import Language.JavaScript.Host.YQL.Inputs+import Language.JavaScript.Host.YQL.Rest+import Language.JavaScript.Host.YQL.Response+import Language.JavaScript.Host.YQL.Y++yql :: OpenDataTable -> Select -> Map String Primitive ->  JavaScriptT YQLM Object+yql ot s vs = inputs ot s vs >> request ot s >>= y ot s >> response
+ src/Language/JavaScript/Host/YQL/Inputs.hs view
@@ -0,0 +1,101 @@+{-# LANGUAGE PatternSynonyms,+             RecordWildCards #-}++module Language.JavaScript.Host.YQL.Inputs where++import Control.Applicative ((<$>))+import Control.Lens ((?=), use)+import Control.Monad (join, mzero, when)+import Control.Monad.Catch (throwM)++import Data.Map (Map)+import qualified Data.Map as Map (assocs, fromList, lookup)+import Data.Traversable (forM)++import Data.OpenDataTable+import Data.YQL (YQLException(..), YQLM)++import Language.JavaScript.Host+import Language.JavaScript.Interpret+import Language.JavaScript.SubType++inputs :: OpenDataTable -> Select -> Map String Primitive -> JavaScriptT YQLM ()+inputs OpenDataTable {..} Select {..} vs = do+  op <- use objectPrototypeObject+  fp <- use functionPrototypeObject++  inputsProperties <-+    join <$>+    forM selectInputs+    (\i -> do+        case i of+         InputKey InputInfo {..} -> do+           let key = maybe inputInfoId id inputInfoAs+           case Map.lookup key vs of+            Just v -> do+              let prop = (key, PropertyData DataDescriptor {+                             dataDescriptorValue          = inj v,+                             dataDescriptorWritable       = True,+                             dataDescriptorEnumerable     = False,+                             dataDescriptorConfigurable   = True })+              case (inputInfoType, v) of+               (InputTypeBool, PrimitiveBool _) -> return [prop]+               (InputTypeDate, PrimitiveString _) -> return [prop]+               (InputTypeDouble, PrimitiveNumber _) -> return [prop]+               (InputTypeInt, PrimitiveNumber _) -> return [prop]+               (InputTypeString, PrimitiveString _) -> return [prop]+               _ -> throwM YQLExceptionTypeError+            _ -> do+              when inputInfoRequired $+                throwM YQLExceptionMissingInput+              return mzero+         _ -> return mzero)++  yqlInputsId <- createNextInternalId+  let yqlInputsObj = Object yqlInputsId++      yqlInputsObjInt = ObjectInternal {+        objectInternalProperties        = Map.fromList inputsProperties,+        objectInternalPrototype         = const $ return (JSExist op),+        objectInternalClass             = "Object",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Nothing,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlInputsObj ?= yqlInputsObjInt++  forM (Map.assocs vs) $ \(key, value) -> do+    defineGlobalProperty+      key+      (PropertyData DataDescriptor {+          dataDescriptorValue          = inj value,+          dataDescriptorWritable       = True,+          dataDescriptorEnumerable     = False,+          dataDescriptorConfigurable   = True })++  defineGlobalProperty+    "inputs"+    (PropertyData DataDescriptor {+        dataDescriptorValue          = inj yqlInputsObj,+        dataDescriptorWritable       = True,+        dataDescriptorEnumerable     = False,+        dataDescriptorConfigurable   = True })
+ src/Language/JavaScript/Host/YQL/Response.hs view
@@ -0,0 +1,57 @@+module Language.JavaScript.Host.YQL.Response where++import Control.Lens ((?=), use)++import Data.YQL (YQLM)++import Language.JavaScript.Host+import Language.JavaScript.Interpret+import Language.JavaScript.SubType++import qualified Data.Map as Map (empty)++response :: JavaScriptT YQLM Object+response = do+  op <- use objectPrototypeObject+  fp <- use functionPrototypeObject++  yqlResponseId <- createNextInternalId+  let yqlResponseObj = Object yqlResponseId+      yqlResponseObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist op),+        objectInternalClass             = "Object",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Nothing,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlResponseObj ?= yqlResponseObjInt++  defineGlobalProperty+    "response"+    (PropertyData DataDescriptor {+        dataDescriptorValue          = inj yqlResponseObj,+        dataDescriptorWritable       = True,+        dataDescriptorEnumerable     = False,+        dataDescriptorConfigurable   = True })++  return yqlResponseObj
+ src/Language/JavaScript/Host/YQL/Rest.hs view
@@ -0,0 +1,857 @@+{-# LANGUAGE PatternSynonyms,+             RecordWildCards #-}++module Language.JavaScript.Host.YQL.Rest where++import Control.Applicative ((<$>))+import Control.Lens+import Control.Monad (forM)+import Control.Monad.Trans.Class (lift)++import qualified Data.Aeson as Aeson+import qualified Data.ByteString.UTF8 as BS+import qualified Data.ByteString.Lazy.UTF8 as LBS+import Data.Default (def)+import qualified Data.HashMap.Strict as HashMap (toList)+import Data.String+import qualified Data.Text as Text (unpack)+import qualified Data.Vector as Vector (toList)++import qualified Network.HTTP.Types as HTTP++import Data.OpenDataTable+import Data.YQL (YQLM)+import qualified Data.YQL as Data+import Data.YQL.Response (Response(..),+                          pattern ResponseByteString,+                          pattern ResponseJSON)+import qualified Data.YQL.Response as Data.Response+import Data.YQL.Result (Result(..))+import qualified Data.YQL.Result as Data.Result+import qualified Data.YQL.Rest as Data.Rest++import Language.JavaScript.Host+import Language.JavaScript.Interpret+import Language.JavaScript.SubType++import qualified YQL.Rest as YQL++import qualified Data.Map as Map (empty, fromList)++request :: OpenDataTable -> Select -> JavaScriptT YQLM Object+request OpenDataTable {..} s = do+  url <- lift . lift . use $ Data.rest . Data.Rest.url++  op <- use objectPrototypeObject+  fp <- use functionPrototypeObject++  yqlRestId <- createNextInternalId+  let yqlRestObj = Object yqlRestId++  yqlRestAcceptId <- createNextInternalId+  let yqlRestAcceptObj = Object yqlRestAcceptId+      yqlRestAcceptObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just (yqlRestAcceptCallImpl yqlRestObj),+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestAcceptObj ?= yqlRestAcceptObjInt++  yqlRestContentTypeId <- createNextInternalId+  let yqlRestContentTypeObj = Object yqlRestContentTypeId+      yqlRestContentTypeObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just (yqlRestContentTypeCallImpl yqlRestObj),+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestContentTypeObj ?= yqlRestContentTypeObjInt++  yqlRestDecompressId <- createNextInternalId+  let yqlRestDecompressObj = Object yqlRestDecompressId+      yqlRestDecompressObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just (yqlRestDecompressCallImpl yqlRestObj),+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestDecompressObj ?= yqlRestDecompressObjInt++  yqlRestDelId <- createNextInternalId+  let yqlRestDelObj = Object yqlRestDelId+      yqlRestDelObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestDelCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestDelObj ?= yqlRestDelObjInt++  yqlRestFallbackCharsetId <- createNextInternalId+  let yqlRestFallbackCharsetObj = Object yqlRestFallbackCharsetId+      yqlRestFallbackCharsetObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestFallbackCharsetCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestFallbackCharsetObj ?= yqlRestFallbackCharsetObjInt++  yqlRestFilterCharsId <- createNextInternalId+  let yqlRestFilterCharsObj = Object yqlRestFilterCharsId+      yqlRestFilterCharsObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestFilterCharsCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestFilterCharsObj ?= yqlRestFilterCharsObjInt++  yqlRestForceCharsetId <- createNextInternalId+  let yqlRestForceCharsetObj = Object yqlRestForceCharsetId+      yqlRestForceCharsetObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestForceCharsetCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestForceCharsetObj ?= yqlRestForceCharsetObjInt++  yqlRestGetId <- createNextInternalId+  let yqlRestGetObj = Object yqlRestGetId+      yqlRestGetObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestGetCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestGetObj ?= yqlRestGetObjInt++  yqlRestHeadId <- createNextInternalId+  let yqlRestHeadObj = Object yqlRestHeadId+      yqlRestHeadObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestHeadCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestHeadObj ?= yqlRestHeadObjInt++  yqlRestHeadersId <- createNextInternalId+  let yqlRestHeadersObj = Object yqlRestHeadersId+      yqlRestHeadersObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist op),+        objectInternalClass             = "Object",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Nothing,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestHeadersObj ?= yqlRestHeadersObjInt++  yqlRestJsonCompatId <- createNextInternalId+  let yqlRestJsonCompatObj = Object yqlRestJsonCompatId+      yqlRestJsonCompatObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestJsonCompatCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestJsonCompatObj ?= yqlRestJsonCompatObjInt++  yqlRestPathId <- createNextInternalId+  let yqlRestPathObj = Object yqlRestPathId+      yqlRestPathObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestPathCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestPathObj ?= yqlRestPathObjInt++  yqlRestPostId <- createNextInternalId+  let yqlRestPostObj = Object yqlRestPostId+      yqlRestPostObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestPostCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestPostObj ?= yqlRestPostObjInt++  yqlRestPutId <- createNextInternalId+  let yqlRestPutObj = Object yqlRestPutId+      yqlRestPutObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestPutCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestPutObj ?= yqlRestPutObjInt++  yqlRestQueryId <- createNextInternalId+  let yqlRestQueryObj = Object yqlRestQueryId+      yqlRestQueryObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just (yqlRestQueryCallImpl yqlRestObj),+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestQueryObj ?= yqlRestQueryObjInt++  yqlRestQueryParamsId <- createNextInternalId+  let yqlRestQueryParamsObj = Object yqlRestQueryParamsId+      yqlRestQueryParamsObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestQueryParamsCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestQueryParamsObj ?= yqlRestQueryParamsObjInt++  yqlRestTimeoutId <- createNextInternalId+  let yqlRestTimeoutObj = Object yqlRestTimeoutId+      yqlRestTimeoutObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlRestTimeoutCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestTimeoutObj ?= yqlRestTimeoutObjInt++  let yqlRestObjInt = ObjectInternal {+        objectInternalProperties        =+           Map.fromList+           [ ("accept", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestAcceptObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("contentType", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestContentTypeObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("decompress", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestDecompressObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("del", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestDelObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("fallbackCharset", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestFallbackCharsetObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("filterChars", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestFilterCharsObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("forceCharset", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestForceCharsetObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("get", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestGetObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("head", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestHeadObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("headers", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestHeadersObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("jsonCompat", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestJsonCompatObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("path", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestPathObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("post", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestHeadersObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("put", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestPutObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("query", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestQueryObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("queryParams", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestQueryParamsObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("timeout", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlRestTimeoutObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("url", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj (LBS.toString url),+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True }) ],+        objectInternalPrototype         = const $ return (JSExist op),+        objectInternalClass             = "Object",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Nothing,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlRestObj ?= yqlRestObjInt++  defineGlobalProperty+    "request"+    (PropertyData DataDescriptor {+        dataDescriptorValue          = inj yqlRestObj,+        dataDescriptorWritable       = True,+        dataDescriptorEnumerable     = False,+        dataDescriptorConfigurable   = True })++  return yqlRestObj++yqlRestAcceptCallImpl :: Object -> InternalCallType YQLM+yqlRestAcceptCallImpl restObj f this (List args) = do+  let a = case args of+           (ValueString s:_) -> s+           _ -> ""+  lift . lift $ Data.rest . Data.Rest.accept ?= fromString a+  return (inj restObj)++yqlRestContentTypeCallImpl :: Object -> InternalCallType YQLM+yqlRestContentTypeCallImpl restObj f this (List args) = do+  let a = case args of+           (ValueString s:_) -> s+           _ -> ""+  lift . lift $ Data.rest . Data.Rest.contentType ?= fromString a+  return (inj restObj)++yqlRestDecompressCallImpl :: Object -> InternalCallType YQLM+yqlRestDecompressCallImpl restObj f this (List args) = undefined++yqlRestDelCallImpl :: InternalCallType YQLM+yqlRestDelCallImpl _ _ _ = wrappedHttpCall YQL.del++yqlRestFallbackCharsetCallImpl :: InternalCallType YQLM+yqlRestFallbackCharsetCallImpl = undefined++yqlRestFilterCharsCallImpl :: InternalCallType YQLM+yqlRestFilterCharsCallImpl = undefined++yqlRestForceCharsetCallImpl :: InternalCallType YQLM+yqlRestForceCharsetCallImpl = undefined++yqlRestGetCallImpl :: InternalCallType YQLM+yqlRestGetCallImpl _ _ _ = wrappedHttpCall YQL.get++yqlRestHeadCallImpl :: InternalCallType YQLM+yqlRestHeadCallImpl _ _ _ = wrappedHttpCall YQL.head++yqlRestJsonCompatCallImpl :: InternalCallType YQLM+yqlRestJsonCompatCallImpl = undefined++yqlRestPathCallImpl :: InternalCallType YQLM+yqlRestPathCallImpl = undefined++yqlRestPostCallImpl :: InternalCallType YQLM+yqlRestPostCallImpl _ _ (List args) = do+  case args of+   (ValueString body:_) -> do+     wrappedHttpCall $ YQL.post (fromString body)+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlRestPutCallImpl :: InternalCallType YQLM+yqlRestPutCallImpl _ _ (List args) = do+  case args of+   (ValueString body:_) -> do+     wrappedHttpCall $ YQL.post (fromString body)+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlRestQueryCallImpl :: Object -> InternalCallType YQLM+yqlRestQueryCallImpl restObj f this (List args) = do+  case args of+   (ValueString key:ValueString value:_) -> undefined+   _ -> return ()+  return (inj restObj)++yqlRestQueryParamsCallImpl :: InternalCallType YQLM+yqlRestQueryParamsCallImpl = undefined++yqlRestTimeoutCallImpl :: InternalCallType YQLM+yqlRestTimeoutCallImpl f this (List args) = do+  case args of+   (ValueNumber n:_) -> lift . lift $ do+     Data.rest . Data.Rest.timeout ?= round n+   _ -> return ()+  return (inj Undefined)++wrappedHttpCall :: YQLM Result -> JavaScriptT YQLM CallValue+wrappedHttpCall call = do+  op <- use objectPrototypeObject+  Result {..} <- lift . lift $ call+  let headersObj = undefined :: Object++  o <- newObjectObject Nothing++  defineOwnProperty o "headers" def {+    propertyDescriptorValue        = Just (inj headersObj),+    propertyDescriptorWritable     = Just True,+    propertyDescriptorEnumerable   = Just True,+    propertyDescriptorConfigurable = Just True } False++  defineOwnProperty o "status" def {+    propertyDescriptorValue        =+       Just (inj (Number . fromIntegral . HTTP.statusCode $ resultStatus)),+    propertyDescriptorWritable     = Just True,+    propertyDescriptorEnumerable   = Just True,+    propertyDescriptorConfigurable = Just True } False++  defineOwnProperty o "timeout" def {+    propertyDescriptorValue        = Just (inj resultTimeout),+    propertyDescriptorWritable     = Just True,+    propertyDescriptorEnumerable   = Just True,+    propertyDescriptorConfigurable = Just True } False++  defineOwnProperty o "timeout" def {+    propertyDescriptorValue        = Just (inj (BS.toString resultUrl)),+    propertyDescriptorWritable     = Just True,+    propertyDescriptorEnumerable   = Just True,+    propertyDescriptorConfigurable = Just True } False++  case resultResponse of+   ResponseJSON j -> do+     v <- jsonToValue j+     defineOwnProperty o "response" def {+       propertyDescriptorValue        = Just v,+       propertyDescriptorWritable     = Just True,+       propertyDescriptorEnumerable   = Just True,+       propertyDescriptorConfigurable = Just True } False++   ResponseByteString s -> do++     defineOwnProperty o "response" def {+       propertyDescriptorValue        = Just (inj (LBS.toString s)),+       propertyDescriptorWritable     = Just True,+       propertyDescriptorEnumerable   = Just True,+       propertyDescriptorConfigurable = Just True } False++  return (inj o)++jsonToValue :: (Functor m, Monad m) => Aeson.Value -> JavaScriptT m Value+jsonToValue (Aeson.Object jo) = do+  o <- newObjectObject Nothing+  forM (HashMap.toList jo) $ \(k, j) -> do+    v <- jsonToValue j+    let desc = def {+          propertyDescriptorValue        = Just v,+          propertyDescriptorWritable     = Just True,+          propertyDescriptorEnumerable   = Just True,+          propertyDescriptorConfigurable = Just True }+    defineOwnProperty o (Text.unpack k) desc False+  return (inj o)++jsonToValue (Aeson.Array ja) = do+  vs <- forM (Vector.toList ja) jsonToValue+  a <- newArrayObject vs+  return (inj a)++jsonToValue (Aeson.String s) = return . inj $ (Text.unpack s)+jsonToValue (Aeson.Number n) =+  return . inj . Number . fromRational . toRational $ n+jsonToValue (Aeson.Bool b) = return (inj b)+jsonToValue (Aeson.Null) = return (inj Null)
+ src/Language/JavaScript/Host/YQL/Y.hs view
@@ -0,0 +1,976 @@+{-# LANGUAGE PatternSynonyms #-}++module Language.JavaScript.Host.YQL.Y where++import Control.Lens ((?=), use)+import Control.Monad.Trans.Class (lift)++import qualified Data.ByteString.Lazy.UTF8 as LBS+import qualified Data.ByteString.UTF8 as BS+import qualified Data.Map as Map (empty, fromList)+import Data.String (fromString)++import Data.OpenDataTable+import Data.YQL++import Language.JavaScript.Host+import Language.JavaScript.Interpret+import Language.JavaScript.SubType++import qualified YQL.Y as Y+import qualified YQL.Crypto as Crypto++y :: OpenDataTable -> Select -> Object -> JavaScriptT YQLM ()+y ot s restObj = do+  op <- use objectPrototypeObject+  fp <- use functionPrototypeObject++  yqlYContextId <- createNextInternalId+  let yqlYContextObj = Object yqlYContextId+      yqlYContextObjInt = ObjectInternal {+        objectInternalProperties        =+           Map.fromList+           [ ("host", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj "",+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("table", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj "",+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True }) ],+        objectInternalPrototype         = const $ return (JSExist op),+        objectInternalClass             = "Object",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Nothing,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYContextObj ?= yqlYContextObjInt++  yqlYCryptoDecodeBase64Id <- createNextInternalId+  let yqlYCryptoDecodeBase64Obj = Object yqlYCryptoDecodeBase64Id+      yqlYCryptoDecodeBase64ObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYCryptoDecodeBase64CallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoDecodeBase64Obj ?= yqlYCryptoDecodeBase64ObjInt++  yqlYCryptoEncodeBase64Id <- createNextInternalId+  let yqlYCryptoEncodeBase64Obj = Object yqlYCryptoEncodeBase64Id+      yqlYCryptoEncodeBase64ObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYCryptoEncodeBase64CallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoEncodeBase64Obj ?= yqlYCryptoEncodeBase64ObjInt++  yqlYCryptoEncodeHmacSHA1Id <- createNextInternalId+  let yqlYCryptoEncodeHmacSHA1Obj = Object yqlYCryptoEncodeHmacSHA1Id+      yqlYCryptoEncodeHmacSHA1ObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYCryptoEncodeHmacSHA1CallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoEncodeHmacSHA1Obj ?= yqlYCryptoEncodeHmacSHA1ObjInt++  yqlYCryptoEncodeHmacSHA256Id <- createNextInternalId+  let yqlYCryptoEncodeHmacSHA256Obj = Object yqlYCryptoEncodeHmacSHA256Id+      yqlYCryptoEncodeHmacSHA256ObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYCryptoEncodeHmacSHA256CallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoEncodeHmacSHA256Obj ?= yqlYCryptoEncodeHmacSHA256ObjInt++  yqlYCryptoEncodeMd5Id <- createNextInternalId+  let yqlYCryptoEncodeMd5Obj = Object yqlYCryptoEncodeMd5Id+      yqlYCryptoEncodeMd5ObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYCryptoEncodeMd5CallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoEncodeMd5Obj ?= yqlYCryptoEncodeMd5ObjInt++  yqlYCryptoEncodeMd5HexId <- createNextInternalId+  let yqlYCryptoEncodeMd5HexObj = Object yqlYCryptoEncodeMd5HexId+      yqlYCryptoEncodeMd5HexObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYCryptoEncodeMd5HexCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoEncodeMd5HexObj ?= yqlYCryptoEncodeMd5HexObjInt++  yqlYCryptoEncodeShaId <- createNextInternalId+  let yqlYCryptoEncodeShaObj = Object yqlYCryptoEncodeShaId+      yqlYCryptoEncodeShaObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYCryptoEncodeShaCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoEncodeShaObj ?= yqlYCryptoEncodeShaObjInt++  yqlYCryptoUUIDId <- createNextInternalId+  let yqlYCryptoUUIDObj = Object yqlYCryptoUUIDId+      yqlYCryptoUUIDObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYCryptoUUIDCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoUUIDObj ?= yqlYCryptoUUIDObjInt++  yqlYCryptoId <- createNextInternalId+  let yqlYCryptoObj = Object yqlYCryptoId+      yqlYCryptoObjInt = ObjectInternal {+        objectInternalProperties        =+           Map.fromList+           [ ("decodeBase64", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoDecodeBase64Obj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("encodeBase64", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoEncodeBase64Obj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("encodeHmacSHA1", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoEncodeHmacSHA1Obj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("encodeHmacSHA256", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoEncodeHmacSHA256Obj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("encodeMd5", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoEncodeMd5Obj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("encodeMd5Hex", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoEncodeMd5HexObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("encodeSha", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoEncodeShaObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("uuid", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoUUIDObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })],+        objectInternalPrototype         = const $ return (JSExist op),+        objectInternalClass             = "Object",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Nothing,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYCryptoObj ?= yqlYCryptoObjInt++  yqlYDateGetOffsetFromEpochInMillisId <- createNextInternalId+  let yqlYDateGetOffsetFromEpochInMillisObj =+        Object yqlYDateGetOffsetFromEpochInMillisId+      yqlYDateGetOffsetFromEpochInMillisObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              =+          Just yqlYDateGetOffsetFromEpochInMillisCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYDateGetOffsetFromEpochInMillisObj ?=+    yqlYDateGetOffsetFromEpochInMillisObjInt++  yqlYDateId <- createNextInternalId+  let yqlYDateObj = Object yqlYDateId+      yqlYDateObjInt = ObjectInternal {+        objectInternalProperties        =+           Map.fromList+           [ ("getOffsetFromEpochInMillis", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYDateGetOffsetFromEpochInMillisObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True }) ],+        objectInternalPrototype         = const $ return (JSExist op),+        objectInternalClass             = "Object",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Nothing,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYDateObj ?= yqlYDateObjInt++  yqlYDecompressId <- createNextInternalId+  let yqlYDecompressObj = Object yqlYDecompressId+      yqlYDecompressObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYDecompressCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYDecompressObj ?= yqlYDecompressObjInt++  yqlYDeflateId <- createNextInternalId+  let yqlYDeflateObj = Object yqlYDeflateId+      yqlYDeflateObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYDeflateCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYDeflateObj ?= yqlYDeflateObjInt++  yqlYExitId <- createNextInternalId+  let yqlYExitObj = Object yqlYExitId+      yqlYExitObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYExitCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYExitObj ?= yqlYExitObjInt++  yqlYIncludeId <- createNextInternalId+  let yqlYIncludeObj = Object yqlYIncludeId+      yqlYIncludeObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYIncludeCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYIncludeObj ?= yqlYIncludeObjInt++  yqlYInflateId <- createNextInternalId+  let yqlYInflateObj = Object yqlYInflateId+      yqlYInflateObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYInflateCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYInflateObj ?= yqlYInflateObjInt++  yqlYJsToStringId <- createNextInternalId+  let yqlYJsToStringObj = Object yqlYJsToStringId+      yqlYJsToStringObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYJsToStringCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYJsToStringObj ?= yqlYJsToStringObjInt++  yqlYRestId <- createNextInternalId+  let yqlYRestObj = Object yqlYRestId+      yqlYRestObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just (yqlYRestCallImpl restObj),+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYRestObj ?= yqlYRestObjInt++  yqlYSyncId <- createNextInternalId+  let yqlYSyncObj = Object yqlYSyncId+      yqlYSyncObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYSyncCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYSyncObj ?= yqlYSyncObjInt++  yqlYTidyId <- createNextInternalId+  let yqlYTidyObj = Object yqlYTidyId+      yqlYTidyObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYTidyCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYTidyObj ?= yqlYTidyObjInt++  yqlYXparseJsonId <- createNextInternalId+  let yqlYXparseJsonObj = Object yqlYXparseJsonId+      yqlYXparseJsonObjInt = ObjectInternal {+        objectInternalProperties        = Map.empty,+        objectInternalPrototype         = const $ return (JSExist fp),+        objectInternalClass             = "Function",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Just yqlYXparseJsonCallImpl,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYXparseJsonObj ?= yqlYXparseJsonObjInt++  yqlYId <- createNextInternalId+  let yqlYObj = Object yqlYId+      yqlYObjInt = ObjectInternal {+        objectInternalProperties        =+           Map.fromList+           [ ("context", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYContextObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("crypto", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYCryptoObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("date", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYDateObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("decompress", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYDecompressObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("deflate", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYDeflateObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("exit", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYExitObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("include", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYIncludeObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("inflate", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYInflateObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("jsToString", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYJsToStringObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("rest", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYRestObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("sync", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYSyncObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("tidy", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYTidyObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True })+           , ("xparseJson", PropertyData $ DataDescriptor {+                 dataDescriptorValue          = inj yqlYXparseJsonObj,+                 dataDescriptorWritable       = True,+                 dataDescriptorEnumerable     = False,+                 dataDescriptorConfigurable   = True }) ],+        objectInternalPrototype         = const $ return (JSExist op),+        objectInternalClass             = "Object",+        objectInternalExtensible        = const $ return True,+        objectInternalGet               = getImpl,+        objectInternalGetOwnProperty    = getOwnPropertyImpl,+        objectInternalGetProperty       = getPropertyImpl,+        objectInternalPut               = putImpl,+        objectInternalCanPut            = canPutImpl,+        objectInternalHasProperty       = hasPropertyImpl,+        objectInternalDelete            = deleteImpl,+        objectInternalDefaultValue      = defaultValueImpl,+        objectInternalDefineOwnProperty = defineOwnPropertyImpl,+        objectInternalPrimitiveValue    = Nothing,+        objectInternalConstruct         = Nothing,+        objectInternalCall              = Nothing,+        objectInternalHasInstance       = Nothing,+        objectInternalScope             = Nothing,+        objectInternalFormalParameters  = Nothing,+        objectInternalCode              = Nothing,+        objectInternalTargetFunction    = Nothing,+        objectInternalBoundThis         = Nothing,+        objectInternalBoundArguments    = Nothing,+        objectInternalMatch             = Nothing,+        objectInternalParameterMap      = Nothing }++  mInternalObject yqlYObj ?= yqlYObjInt++  defineGlobalProperty+    "y"+    (PropertyData DataDescriptor {+        dataDescriptorValue          = inj yqlYObj,+        dataDescriptorWritable       = True,+        dataDescriptorEnumerable     = False,+        dataDescriptorConfigurable   = True })++yqlYCryptoDecodeBase64CallImpl :: InternalCallType YQLM+yqlYCryptoDecodeBase64CallImpl _ _ (List args) = do+  case args of+   (ValueString s:_) -> do+     case Crypto.decodeBase64 (fromString s) of+      Just d -> return . inj $ LBS.toString d+      _ -> jsThrow "Invalid Base64 encoding"+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYCryptoEncodeBase64CallImpl :: InternalCallType YQLM+yqlYCryptoEncodeBase64CallImpl  _ _ (List args) = do+  case args of+   (ValueString s:_) -> do+     return . inj . LBS.toString . Crypto.encodeBase64 . fromString $ s+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYCryptoEncodeHmacSHA1CallImpl :: InternalCallType YQLM+yqlYCryptoEncodeHmacSHA1CallImpl _ _ (List args) = do+  case args of+   (ValueString secret:ValueString plaintext:_) -> do+     let hex = Crypto.encodeHmacSHA1 (fromString secret) (fromString plaintext)+     return (inj . LBS.toString $ hex)+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYCryptoEncodeHmacSHA256CallImpl :: InternalCallType YQLM+yqlYCryptoEncodeHmacSHA256CallImpl _ _ (List args) = do+  case args of+   (ValueString secret:ValueString plaintext:_) -> do+     let hex = Crypto.encodeHmacSHA256 (fromString secret) (fromString plaintext)+     return (inj . LBS.toString $ hex)+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYCryptoEncodeMd5CallImpl :: InternalCallType YQLM+yqlYCryptoEncodeMd5CallImpl _ _ (List args) = do+  case args of+   (ValueString message:_) -> do+     let hex = Crypto.encodeMd5 (fromString message)+     return (inj . LBS.toString $ hex)+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYCryptoEncodeMd5HexCallImpl :: InternalCallType YQLM+yqlYCryptoEncodeMd5HexCallImpl = undefined++yqlYCryptoEncodeShaCallImpl :: InternalCallType YQLM+yqlYCryptoEncodeShaCallImpl _ _ (List args) = do+  case args of+   (ValueString message:_) -> do+     let hex = Crypto.encodeSha (fromString message)+     return (inj . LBS.toString $ hex)+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYCryptoUUIDCallImpl :: InternalCallType YQLM+yqlYCryptoUUIDCallImpl _ _ _ = do+  uuid <- lift . lift $ Crypto.uuid+  return (inj . LBS.toString $ uuid)++yqlYDateGetOffsetFromEpochInMillisCallImpl :: InternalCallType YQLM+yqlYDateGetOffsetFromEpochInMillisCallImpl = undefined++yqlYDecompressCallImpl :: InternalCallType YQLM+yqlYDecompressCallImpl _ _ (List args) = do+  case args of+   (ValueString s:_) -> do+     case Y.decompress (fromString s) of+      Just d -> return . inj $ LBS.toString d+      _ -> jsThrow "Invalid Base64 encoding"+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYDeflateCallImpl _ _ (List args) = do+  case args of+   (ValueString s:ValueNumber l:_) -> do+     return . inj . LBS.toString . flip Y.deflate (round l) . fromString $ s+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYExitCallImpl = undefined++yqlYIncludeCallImpl = undefined++yqlYInflateCallImpl _ _ (List args) = do+  case args of+   (ValueString s:_) -> do+     case Y.inflate (fromString s) of+      Just d -> return . inj $ LBS.toString d+      _ -> jsThrow "Invalid Base64 encoding"+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYJsToStringCallImpl = undefined++yqlYRestCallImpl :: Object -> InternalCallType YQLM+yqlYRestCallImpl restObj f this (List args) = do+  case args of+   (ValueString url:ValueObject callback:_) -> do+     lift . lift $ Y.rest url+     return (inj restObj)+   _ -> newTypeErrorObject Nothing >>= jsThrow++yqlYSyncCallImpl = undefined++yqlYTidyCallImpl = undefined++yqlYXparseJsonCallImpl = undefined
+ src/YQL.hs view
@@ -0,0 +1,162 @@+{-# LANGUAGE RecordWildCards,+             PatternSynonyms #-}++module YQL+       ( runYQL ) where++import Control.Lens+import Control.Monad.Catch (throwM)+import Control.Monad.Trans.State.Lazy (evalStateT)++import Control.Applicative ((<$>))+import Control.Monad.Trans.Except (catchE)++import qualified Data.Aeson as Aeson+import Data.Default (def)+import Data.Foldable (foldlM, foldrM)+import qualified Data.HashMap.Strict as HashMap (empty, insert)+import Data.Map (Map)+import qualified Data.Map as Map (foldlWithKey, toList)+import Data.Monoid ((<>))+import Data.String (fromString)+import qualified Data.Text as Text (pack)+import qualified Data.Text.Lazy as Text (toStrict)+import Data.Text.Lazy.Encoding+import qualified Data.Vector as Vector (cons, empty)++import Network.HTTP.Conduit (parseUrl)+import Network.HTTP.Client.Conduit (newManager)+import Network.URI.Template++import System.IO (stderr, Handle)+import System.Log.Formatter+import System.Log.Handler (setFormatter)+import System.Log.Handler.Simple+import System.Log.Logger++import Data.OpenDataTable+import Data.YQL+import Data.YQL.Response+import Data.YQL.Rest+import Data.YQL.Result++import qualified Language.JavaScript as JS+import qualified Language.JavaScript.Host.YQL as JS+import qualified Language.JavaScript.Host.Console as JS+import qualified Language.JavaScript.Interpret as JS+import qualified Language.JavaScript.Parser as JS++import YQL.Rest+import YQL.Y++withFormatter :: GenericHandler Handle -> GenericHandler Handle+withFormatter handler = setFormatter handler formatter+    where formatter = simpleLogFormatter "[$time $loggername $prio] $msg"++runYQL :: OpenDataTable -> Map String JS.Primitive -> IO Aeson.Value+runYQL ot@(OpenDataTable {..}) vs = do+  let logName = rootLoggerName+  stderrHandler <- withFormatter <$> streamHandler stderr DEBUG+  updateGlobalLogger logName (setLevel DEBUG)+  updateGlobalLogger logName (setHandlers [stderrHandler])++  let selects = [s | SelectBinding s <- openDataTableBindings]+  case selects of+   (s@(Select{..}):_) -> do+     manager <- newManager+     let env =+           Map.foldlWithKey+           (\e k v -> addToEnv k (JS.primitiveToString v) e)+           newEnv vs+     request <- maybe (return def) (parseUrl . expand env) selectUrl+     let _rest = Rest {+           restHttpManager = manager,+           restHttpRequest = request }+         _y = undefined+         _yql = YQL {+           yqlRest = _rest,+           yqlY = _y }+         mSource = openDataTableExecute <> selectExecute+     flip evalStateT _yql $ do+       case mSource of+        Just source -> do+          let eAST = JS.parseJavaScript source+          case eAST of+           Right ast -> do+             let hostInit = JS.console >> JS.yql ot s vs+             eRes <- JS.runJavaScriptT JS.initialState $ do+               responseObj <- hostInit++               (JS.interpret ast :: JS.JavaScriptT YQLM JS.Completion)+                 `catchE`+                 (\ v -> do+                     s <- JS.toString v+                     throwM $ YQLExceptionJSRuntimeError s)++               oi <- use $ JS.internalObject responseObj+               case oi ^. JS.internalProperty "object" of+                Just (JS.PropertyData JS.DataDescriptor {..}) ->+                  valueToJSON dataDescriptorValue+                _ -> return Aeson.Null+             case eRes of+              Right res -> return res+              Left _ -> do+                throwM YQLExceptionInternalError+           Left e -> throwM $ YQLExceptionJSParseError e+        _ -> do+          Result {..} <- get+          case resultResponse of+           ResponseByteString s -> do+             return $ Aeson.String (Text.toStrict . decodeUtf8 $ s)+           ResponseJSON j -> return j+   _ -> throwM YQLExceptionMissingSelect++valueToJSON :: (Functor m, Monad m) => JS.Value -> JS.JavaScriptT m Aeson.Value+valueToJSON (JS.ValueNull _) = return Aeson.Null+valueToJSON (JS.ValueUndefined _) = return Aeson.Null+valueToJSON (JS.ValueNumber n) =+  return $ Aeson.Number (fromRational . toRational $ n)+valueToJSON (JS.ValueString s) = return $ Aeson.String (fromString s)+valueToJSON (JS.ValueBool b) = return $ Aeson.Bool b+valueToJSON (JS.ValueObject o) = do+  c <- use $ JS.class' o+  case c of+   "Object" -> do+     ps <- use $ JS.properties o+     jo <- foldlM addObjectField (HashMap.empty) (Map.toList ps)+     return $ Aeson.Object jo++   "Array" -> do+     ps <- use $ JS.properties o+     ja <- foldrM addArrayItem (Vector.empty) (Map.toList ps)+     return $ Aeson.Array ja++  where+       addObjectField :: (Functor m, Monad m) =>+                         Aeson.Object -> (String, JS.Property) ->+                         JS.JavaScriptT m Aeson.Object+       addObjectField jo (name, property) =+         case property of+          JS.PropertyData (JS.DataDescriptor {..}) -> do+            if dataDescriptorEnumerable+              then do+              j <- valueToJSON dataDescriptorValue+              return $ HashMap.insert (Text.pack name) j jo+              else return jo+          _ -> return jo++       addArrayItem :: (Functor m, Monad m) =>+                       (String, JS.Property) -> Aeson.Array ->+                       JS.JavaScriptT m Aeson.Array+       addArrayItem (name, property) ja = do+         if name /= "length"+           then do+           case property of+            JS.PropertyData (JS.DataDescriptor {..}) -> do+              if dataDescriptorEnumerable+                then do+                j <- valueToJSON dataDescriptorValue+                return $ Vector.cons j ja+                else return ja+            _ -> return ja+           else return ja
+ src/YQL/Crypto.hs view
@@ -0,0 +1,47 @@+module YQL.Crypto+       ( decodeBase64+       , encodeBase64+       , encodeMd5+       , encodeMd5Hex+       , encodeSha+       , uuid+       , encodeHmacSHA1+       , encodeHmacSHA256 ) where++import Control.Monad.IO.Class (liftIO)+import qualified Crypto.Hash.MD5 as MD5+import qualified Crypto.Hash.SHA1 as SHA1++import qualified Data.ByteString.Base64.Lazy as Base64+import Data.ByteString.Lazy+import qualified Data.Digest.Pure.SHA as SHA+import qualified Data.UUID as UUID (toLazyASCIIBytes)+import qualified Data.UUID.V4 as UUID++import Data.YQL (YQLM)++decodeBase64 :: ByteString -> Maybe ByteString+decodeBase64 s = either (const Nothing) Just (Base64.decode s)++encodeBase64 :: ByteString -> ByteString+encodeBase64 s = Base64.encode s++encodeHmacSHA1 :: ByteString -> ByteString -> ByteString+encodeHmacSHA1 secret plaintext =+  SHA.bytestringDigest $ SHA.hmacSha1 secret plaintext++encodeHmacSHA256 :: ByteString -> ByteString -> ByteString+encodeHmacSHA256 secret plaintext =+  SHA.bytestringDigest $ SHA.hmacSha256 secret plaintext++encodeMd5 :: ByteString -> ByteString+encodeMd5 message = fromStrict . MD5.hash . toStrict $ message++encodeMd5Hex :: ByteString -> ByteString+encodeMd5Hex = undefined++encodeSha :: ByteString -> ByteString+encodeSha message = fromStrict . SHA1.hash . toStrict $ message++uuid :: YQLM ByteString+uuid = liftIO $ UUID.nextRandom >>= return . UUID.toLazyASCIIBytes
+ src/YQL/Date.hs view
@@ -0,0 +1,7 @@+module YQL.Date+       ( getOffsetFromEpochInMillis ) where++import Data.YQL (YQLM)++getOffsetFromEpochInMillis :: YQLM Int+getOffsetFromEpochInMillis = undefined
+ src/YQL/Rest.hs view
@@ -0,0 +1,93 @@+{-# LANGUAGE OverloadedStrings,+             RecordWildCards #-}++module YQL.Rest+       ( del+       , get+       , head+       , post+       , put ) where++import Control.Lens+import Control.Monad.Catch+import Control.Monad.IO.Class+import Control.Monad.Trans.Class (lift)++import Data.Aeson (decode)+import qualified Data.ByteString.Lazy as LBS+import qualified Data.ByteString.UTF8 as BS+import Data.Monoid ((<>))++import Network.HTTP.Conduit+  (Request(..), Response(..), RequestBody(..),+   httpLbs)++import Prelude hiding (head)++import System.Log.Logger++import qualified Data.YQL as Data+import qualified Data.YQL.Response as Data.Response+import qualified Data.YQL.Rest as Data.Rest+import qualified Data.YQL.Result as Data.Result++del :: Data.YQLM Data.Result.Result+del = do+  request <- use $ Data.rest . Data.Rest.httpRequest+  httpRequest request { method = "DELETE" }++get :: Data.YQLM Data.Result.Result+get = do+  request <- use $ Data.rest . Data.Rest.httpRequest+  httpRequest request { method = "GET" }++head :: Data.YQLM Data.Result.Result+head = do+  request <- use $ Data.rest . Data.Rest.httpRequest+  httpRequest request { method = "HEAD" }++post :: LBS.ByteString -> Data.YQLM Data.Result.Result+post body = do+  request <- use $ Data.rest . Data.Rest.httpRequest+  httpRequest request { method = "POST"+                      , requestBody = RequestBodyLBS body }++put :: LBS.ByteString -> Data.YQLM Data.Result.Result+put body = do+  request <- use $ Data.rest . Data.Rest.httpRequest+  httpRequest request { method = "POST"+                      , requestBody = RequestBodyLBS body }++timeout :: Int -> Data.YQLM ()+timeout ms = do+  Data.rest . Data.Rest.timeout ?= (ms * 1000)++httpRequest :: Request -> Data.YQLM Data.Result.Result+httpRequest request = do+  manager <- use $ Data.rest . Data.Rest.httpManager+  lift $ do+    res <- httpLbs request manager+    let body = responseBody res+        status = responseStatus res+        headers = responseHeaders res+        verb = method request+        url = host request <> path request <> queryString request++    liftIO $+      infoM+      "YQL"+      ("HTTP " <> BS.toString verb <> " request to " <> BS.toString url)++    response <- case lookup "Content-Type" headers of+                 Just "application/json" -> do+                   case decode body of+                    Just v -> do+                      return $ Data.Response.ResponseJSON v+                    _ -> throwM Data.YQLExceptionJSONError+                 _ -> return $ Data.Response.ResponseByteString body+    return Data.Result.Result {+      resultResponse = response,+      resultHeaders = headers,+      resultStatus = status,+      resultTimeout = False,+      resultUrl = url }
+ src/YQL/Y.hs view
@@ -0,0 +1,44 @@+{-# LANGUAGE OverloadedStrings,+             RecordWildCards #-}++module YQL.Y+       ( decompress+       , deflate+       , inflate+       , rest ) where++import qualified Codec.Compression.GZip as GZip+import qualified Codec.Compression.Zlib as Zlib++import Control.Lens++import Data.ByteString.Lazy+import qualified Data.ByteString.Base64.Lazy as Base64++import Network.HTTP.Conduit (parseUrl)++import qualified Data.YQL as Data+import qualified Data.YQL.Rest as Data++decompress :: ByteString -> (Maybe ByteString)+decompress e = either (const Nothing) (Just . GZip.decompress) (Base64.decode e)++deflate :: ByteString -> Int -> ByteString+deflate string level =+  Base64.encode $+  Zlib.compressWith+  Zlib.defaultCompressParams {+    Zlib.compressLevel = Zlib.compressionLevel level }+  string++inflate :: ByteString -> Maybe ByteString+inflate e =+  case Base64.decode e of+   Right string ->+     Just $ Zlib.decompress string+   _ -> Nothing++rest :: String -> Data.YQLM ()+rest url = do+  req <- parseUrl url+  Data.rest . Data.httpRequest .= req
+ yql.cabal view
@@ -0,0 +1,89 @@+name:              yql+version:           0.0.0+synopsis:          A YQL engine to execute Open Data Tables+description:       A YQL engine that provides a Haskell backbone+                   library for the YQL specification, and a Javascript+                   host environment to execute Open Data Tables.+homepage:          https://github.com/fabianbergmark/YQL+category:          Web+author:            Fabian Bergmark+maintainer:        fabian.bergmark@gmail.com+license:           BSD2+license-file:      LICENSE+cabal-version:     >= 1.10+build-type:        Simple++extra-source-files: LICENSE++source-repository head+  type:     git+  location: https://github.com/fabianbergmark/YQL.git++library+    default-language: Haskell2010++    hs-source-dirs: src/++    exposed-modules: Data.YQL+                     Data.YQL.Cache+                     Data.YQL.Context+                     Data.YQL.Crypto+                     Data.YQL.Response+                     Data.YQL.Rest+                     Data.YQL.Result+                     Data.YQL.Y+                     Language.JavaScript.Host.YQL+                     Language.JavaScript.Host.YQL.Inputs+                     Language.JavaScript.Host.YQL.Rest+                     Language.JavaScript.Host.YQL.Response+                     Language.JavaScript.Host.YQL.Y+                     YQL+                     YQL.Date+                     YQL.Crypto+                     YQL.Rest+                     YQL.Y++    ghc-options: -fno-warn-orphans -fno-warn-unused-binds -fno-warn-unused-do-bind -fno-warn-unused-matches++    extensions:++    build-depends: aeson                == 0.8.*+                 , base                 == 4.*+                 , base64-bytestring    == 1.0.*+                 , bytestring           == 0.10.*+                 , containers           == 0.4.* || == 0.5.*+                 , cryptohash           == 0.11.*+                 , data-default         == 0.5.*+                 , ecma262              == 0.0.*+                 , exceptions           == 0.6.*+                 , hslogger             == 1.2.*+                 , http-conduit         == 2.1.*+                 , http-types           == 0.8.*+                 , lens                 == 4.6.*+                 , opendatatable        == 0.0.*+                 , parsec               == 3.1.*+                 , SHA                  == 1.6.*+                 , text                 == 1.1.*+                 , transformers         == 0.4.*+                 , unordered-containers == 0.2.*+                 , uri-template         == 0.2.*+                 , utf8-string          == 0.3.*+                 , uuid                 == 1.3.*+                 , vector               == 0.10.*+                 , zlib                 == 0.5.*++executable yql+    default-language: Haskell2010++    main-is: Main.hs++    ghc-options: -fno-warn-orphans -fno-warn-unused-binds -fno-warn-unused-matches++    other-modules: Main+    build-depends: base          == 4.*+                 , yql           == 0.0.0+                 , containers    == 0.4.* || == 0.5.*+                 , ecma262       == 0.0.*+                 , exceptions    == 0.6.*+                 , opendatatable == 0.0.*+                 , hxt           == 9.3.*