0 | module Node.Console.Console
  1 |
  2 | import Data.Buffer
  3 | import Node
  4 | import Node.Error
  5 | import Node.Console.Module
  6 | import Node.Stream.Writeable
  7 |
  8 | export
  9 | data Console : Type where [external]
 10 |
 11 | public export
 12 | data ColorMode
 13 |   = Enabled
 14 |   | Disabled
 15 |   | Auto
 16 |
 17 | %foreign "node:lambda: () => true"
 18 | ffi_colorMode_enabled : Node ColorMode
 19 |
 20 | %foreign "node:lambda: () => false"
 21 | ffi_colorMode_disabled : Node ColorMode
 22 |
 23 | %foreign "node:lambda: () => 'auto'"
 24 | ffi_colorMode_auto : Node ColorMode
 25 |
 26 | convertColorMode : ColorMode -> Node ColorMode
 27 | convertColorMode = \case
 28 |   Enabled => ffi_colorMode_enabled
 29 |   Disabled => ffi_colorMode_disabled
 30 |   Auto => ffi_colorMode_auto
 31 |
 32 | public export
 33 | record Options (out : Type) (err : Type) where
 34 |   constructor MkOptions
 35 |   stdout: out
 36 |   stderr: err
 37 |   ignoreErrors: Bool
 38 |   colorMode: ColorMode
 39 |   -- TODO: inspectOptions
 40 |   groupIndentation: Int
 41 |
 42 | export
 43 | defaultOptions : WriteableClass Buffer Error out => WriteableClass Buffer Error err => out -> err -> Options out err
 44 | defaultOptions stdout stderr = MkOptions
 45 |   { stdout = stdout
 46 |   , stderr = stderr
 47 |   , ignoreErrors = True
 48 |   , colorMode = Auto
 49 |   , groupIndentation = 2
 50 |   }
 51 |
 52 | %foreign """
 53 |   node:lambda:
 54 |   ( tyo
 55 |   , tye
 56 |   , stdout
 57 |   , stderr
 58 |   , ignoreErrors
 59 |   , colorMode
 60 |   , groupIndentation
 61 |   ) => ({
 62 |     stdout,
 63 |     stderr,
 64 |     ignoreErrors,
 65 |     colorMode,
 66 |     groupIndentation
 67 |   })
 68 |   """
 69 | ffi_convertOptions :
 70 |   (stdout: out)
 71 |   -> (stderr: err)
 72 |   -> (ignoreErrors: Bool)
 73 |   -> (colorMode: Node ColorMode)
 74 |   -> (groupIndentation: Int)
 75 |   -> Node $ Options out err
 76 |
 77 | export
 78 | convertOptions : Options out err -> Node $ Options out err
 79 | convertOptions o = ffi_convertOptions
 80 |   o.stdout
 81 |   o.stderr
 82 |   o.ignoreErrors
 83 |   (convertColorMode o.colorMode)
 84 |   o.groupIndentation
 85 |
 86 | %foreign "node:lambda: (tya, c, a) => c.log(a)"
 87 | ffi_log : Console -> a -> PrimIO ()
 88 |
 89 | export
 90 | (.log) : HasIO io => Console -> a -> io ()
 91 | (.log) c a = primIO $ ffi_log c a
 92 |
 93 | %foreign "node:lambda: (tya, c, a) => c.debug(a)"
 94 | ffi_debug : Console -> a -> PrimIO ()
 95 |
 96 | export
 97 | (.debug) : HasIO io => Console -> a -> io ()
 98 | (.debug) c a = primIO $ ffi_debug c a
 99 |
100 | %foreign "node:lambda: (tya, c, a) => c.error(a)"
101 | ffi_error : Console -> a -> PrimIO ()
102 |
103 | export
104 | (.error) : HasIO io => Console -> a -> io ()
105 | (.error) c a = primIO $ ffi_error c a
106 |
107 | %foreign "node:lambda: (tya, c, a) => c.info(a)"
108 | ffi_info : Console -> a -> PrimIO ()
109 |
110 | export
111 | (.info) : HasIO io => Console -> a -> io ()
112 | (.info) c a = primIO $ ffi_info c a
113 |
114 | %foreign "node:lambda: (tya, c, a) => c.trace(a)"
115 | ffi_trace : Console -> a -> PrimIO ()
116 |
117 | export
118 | (.trace) : HasIO io => Console -> a -> io ()
119 | (.trace) c a = primIO $ ffi_trace c a
120 |
121 | %foreign "node:lambda: (tya, c, a) => c.warn(a)"
122 | ffi_warn : Console -> a -> PrimIO ()
123 |
124 | export
125 | (.warn) : HasIO io => Console -> a -> io ()
126 | (.warn) c a = primIO $ ffi_warn c a
127 |
128 |