@explorable-viz/fluid 0.0.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +36 -0
  3. package/dist/article/app.js +40580 -0
  4. package/dist/article/css/styles.css +191 -0
  5. package/dist/article/css/view-styles.css +141 -0
  6. package/dist/article/fluid/dataset/renewables-restricted.fld +139 -0
  7. package/dist/article/fluid/example/arithmetic.fld +1 -0
  8. package/dist/article/fluid/example/array.fld +2 -0
  9. package/dist/article/fluid/example/compose.fld +2 -0
  10. package/dist/article/fluid/example/desugar/list-comp-1.fld +1 -0
  11. package/dist/article/fluid/example/desugar/list-comp-10.fld +1 -0
  12. package/dist/article/fluid/example/desugar/list-comp-2.fld +1 -0
  13. package/dist/article/fluid/example/desugar/list-comp-3.fld +1 -0
  14. package/dist/article/fluid/example/desugar/list-comp-4.fld +1 -0
  15. package/dist/article/fluid/example/desugar/list-comp-5.fld +1 -0
  16. package/dist/article/fluid/example/desugar/list-comp-6.fld +1 -0
  17. package/dist/article/fluid/example/desugar/list-comp-7.fld +1 -0
  18. package/dist/article/fluid/example/desugar/list-comp-8.fld +1 -0
  19. package/dist/article/fluid/example/desugar/list-comp-9.fld +1 -0
  20. package/dist/article/fluid/example/desugar/list-enum.fld +1 -0
  21. package/dist/article/fluid/example/dicts.fld +11 -0
  22. package/dist/article/fluid/example/div-mod-quot-rem.fld +4 -0
  23. package/dist/article/fluid/example/factorial.fld +6 -0
  24. package/dist/article/fluid/example/filter.fld +1 -0
  25. package/dist/article/fluid/example/first-class-constr.fld +1 -0
  26. package/dist/article/fluid/example/flatten.fld +12 -0
  27. package/dist/article/fluid/example/foldr-sumSquares.fld +1 -0
  28. package/dist/article/fluid/example/graphics/background.fld +7 -0
  29. package/dist/article/fluid/example/graphics/grouped-bar-chart.fld +9 -0
  30. package/dist/article/fluid/example/graphics/line-chart.fld +13 -0
  31. package/dist/article/fluid/example/graphics/small-barchart.fld +5 -0
  32. package/dist/article/fluid/example/graphics/stacked-bar-chart.fld +3 -0
  33. package/dist/article/fluid/example/include-input-into-output.fld +1 -0
  34. package/dist/article/fluid/example/length.fld +1 -0
  35. package/dist/article/fluid/example/lexicalScoping.fld +3 -0
  36. package/dist/article/fluid/example/lib/some-constants.fld +1 -0
  37. package/dist/article/fluid/example/linked-inputs/energyscatter.fld +24 -0
  38. package/dist/article/fluid/example/linked-inputs/mini-energyscatter.fld +30 -0
  39. package/dist/article/fluid/example/linked-inputs/mini-non-renewables.fld +3 -0
  40. package/dist/article/fluid/example/linked-inputs/mini-renewables.fld +6 -0
  41. package/dist/article/fluid/example/linked-inputs/non-renewables.fld +67 -0
  42. package/dist/article/fluid/example/linked-inputs/renewables.fld +301 -0
  43. package/dist/article/fluid/example/linked-outputs/bar-chart-line-chart.expect.fld +0 -0
  44. package/dist/article/fluid/example/linked-outputs/bar-chart-line-chart.fld +26 -0
  45. package/dist/article/fluid/example/linked-outputs/convolution-data.fld +5 -0
  46. package/dist/article/fluid/example/linked-outputs/convolution.fld +12 -0
  47. package/dist/article/fluid/example/linked-outputs/line-chart.fld +13 -0
  48. package/dist/article/fluid/example/linked-outputs/moving-average-data.fld +9 -0
  49. package/dist/article/fluid/example/linked-outputs/moving-average.fld +15 -0
  50. package/dist/article/fluid/example/linked-outputs/pairs-data.fld +1 -0
  51. package/dist/article/fluid/example/linked-outputs/pairs.fld +3 -0
  52. package/dist/article/fluid/example/linked-outputs/renewables.fld +100 -0
  53. package/dist/article/fluid/example/linked-outputs/stacked-bar-chart-scatter-plot.fld +38 -0
  54. package/dist/article/fluid/example/lookup.fld +15 -0
  55. package/dist/article/fluid/example/map.fld +1 -0
  56. package/dist/article/fluid/example/mergeSort.fld +22 -0
  57. package/dist/article/fluid/example/normalise.fld +3 -0
  58. package/dist/article/fluid/example/nub.fld +1 -0
  59. package/dist/article/fluid/example/pattern-match.fld +12 -0
  60. package/dist/article/fluid/example/range.fld +4 -0
  61. package/dist/article/fluid/example/record-lookup.fld +3 -0
  62. package/dist/article/fluid/example/records.fld +11 -0
  63. package/dist/article/fluid/example/reverse.fld +1 -0
  64. package/dist/article/fluid/example/scratchpad.fld +6 -0
  65. package/dist/article/fluid/example/slicing/add.expect.fld +1 -0
  66. package/dist/article/fluid/example/slicing/add.fld +1 -0
  67. package/dist/article/fluid/example/slicing/array/array.expect.fld +2 -0
  68. package/dist/article/fluid/example/slicing/array/array.fld +4 -0
  69. package/dist/article/fluid/example/slicing/array/dims.expect.fld +3 -0
  70. package/dist/article/fluid/example/slicing/array/dims.fld +3 -0
  71. package/dist/article/fluid/example/slicing/array/lookup.expect.fld +3 -0
  72. package/dist/article/fluid/example/slicing/array/lookup.fld +5 -0
  73. package/dist/article/fluid/example/slicing/convolution/edgeDetect.expect.fld +1 -0
  74. package/dist/article/fluid/example/slicing/convolution/edgeDetect.fld +1 -0
  75. package/dist/article/fluid/example/slicing/convolution/emboss-wrap.fld +1 -0
  76. package/dist/article/fluid/example/slicing/convolution/emboss.expect.fld +1 -0
  77. package/dist/article/fluid/example/slicing/convolution/emboss.fld +1 -0
  78. package/dist/article/fluid/example/slicing/convolution/filter/edge-detect.fld +5 -0
  79. package/dist/article/fluid/example/slicing/convolution/filter/emboss.fld +5 -0
  80. package/dist/article/fluid/example/slicing/convolution/filter/gaussian.fld +5 -0
  81. package/dist/article/fluid/example/slicing/convolution/gaussian.expect.fld +1 -0
  82. package/dist/article/fluid/example/slicing/convolution/gaussian.fld +1 -0
  83. package/dist/article/fluid/example/slicing/convolution/test-image.fld +7 -0
  84. package/dist/article/fluid/example/slicing/dict/create.expect.fld +1 -0
  85. package/dist/article/fluid/example/slicing/dict/create.fld +1 -0
  86. package/dist/article/fluid/example/slicing/dict/difference.expect.fld +3 -0
  87. package/dist/article/fluid/example/slicing/dict/difference.fld +3 -0
  88. package/dist/article/fluid/example/slicing/dict/disjointUnion.expect.fld +1 -0
  89. package/dist/article/fluid/example/slicing/dict/disjointUnion.fld +1 -0
  90. package/dist/article/fluid/example/slicing/dict/foldl.expect.fld +1 -0
  91. package/dist/article/fluid/example/slicing/dict/foldl.fld +1 -0
  92. package/dist/article/fluid/example/slicing/dict/fromRecord.expect.fld +2 -0
  93. package/dist/article/fluid/example/slicing/dict/fromRecord.fld +1 -0
  94. package/dist/article/fluid/example/slicing/dict/get.expect.fld +3 -0
  95. package/dist/article/fluid/example/slicing/dict/get.fld +2 -0
  96. package/dist/article/fluid/example/slicing/dict/intersectionWith.expect.fld +2 -0
  97. package/dist/article/fluid/example/slicing/dict/intersectionWith.fld +4 -0
  98. package/dist/article/fluid/example/slicing/dict/map.expect.fld +6 -0
  99. package/dist/article/fluid/example/slicing/dict/map.fld +5 -0
  100. package/dist/article/fluid/example/slicing/divide.expect.fld +1 -0
  101. package/dist/article/fluid/example/slicing/divide.fld +1 -0
  102. package/dist/article/fluid/example/slicing/dtw/average-series.expect.fld +8 -0
  103. package/dist/article/fluid/example/slicing/dtw/average-series.fld +8 -0
  104. package/dist/article/fluid/example/slicing/dtw/compute-dtw.expect.fld +6 -0
  105. package/dist/article/fluid/example/slicing/dtw/compute-dtw.fld +6 -0
  106. package/dist/article/fluid/example/slicing/filter.expect.fld +4 -0
  107. package/dist/article/fluid/example/slicing/filter.fld +6 -0
  108. package/dist/article/fluid/example/slicing/intersperse-1.expect.fld +4 -0
  109. package/dist/article/fluid/example/slicing/intersperse-2.expect.fld +4 -0
  110. package/dist/article/fluid/example/slicing/intersperse.fld +5 -0
  111. package/dist/article/fluid/example/slicing/length.expect.fld +1 -0
  112. package/dist/article/fluid/example/slicing/length.fld +1 -0
  113. package/dist/article/fluid/example/slicing/linked-outputs/bar-chart-line-chart.expect.fld +0 -0
  114. package/dist/article/fluid/example/slicing/linked-outputs/bar-chart-line-chart.fld +26 -0
  115. package/dist/article/fluid/example/slicing/linked-outputs/renewables.fld +100 -0
  116. package/dist/article/fluid/example/slicing/linked-outputs/stacked-bar-scatter-plot.expect.fld +0 -0
  117. package/dist/article/fluid/example/slicing/linked-outputs/stacked-bar-scatter-plot.fld +38 -0
  118. package/dist/article/fluid/example/slicing/list-comp-1.expect.fld +6 -0
  119. package/dist/article/fluid/example/slicing/list-comp-2.expect.fld +6 -0
  120. package/dist/article/fluid/example/slicing/list-comp.fld +8 -0
  121. package/dist/article/fluid/example/slicing/lookup.expect.fld +6 -0
  122. package/dist/article/fluid/example/slicing/lookup.fld +14 -0
  123. package/dist/article/fluid/example/slicing/map.expect.fld +1 -0
  124. package/dist/article/fluid/example/slicing/map.fld +1 -0
  125. package/dist/article/fluid/example/slicing/matrix-update.expect.fld +5 -0
  126. package/dist/article/fluid/example/slicing/matrix-update.fld +10 -0
  127. package/dist/article/fluid/example/slicing/multiply.expect.fld +1 -0
  128. package/dist/article/fluid/example/slicing/multiply.fld +1 -0
  129. package/dist/article/fluid/example/slicing/nth.expect.fld +1 -0
  130. package/dist/article/fluid/example/slicing/nth.fld +1 -0
  131. package/dist/article/fluid/example/slicing/output-not-source.expect.fld +2 -0
  132. package/dist/article/fluid/example/slicing/output-not-source.fld +1 -0
  133. package/dist/article/fluid/example/slicing/section-5-example-1.expect.fld +10 -0
  134. package/dist/article/fluid/example/slicing/section-5-example-2.expect.fld +10 -0
  135. package/dist/article/fluid/example/slicing/section-5-example-3.expect.fld +10 -0
  136. package/dist/article/fluid/example/slicing/section-5-example.fld +14 -0
  137. package/dist/article/fluid/example/slicing/zeros-1.expect.fld +3 -0
  138. package/dist/article/fluid/example/slicing/zeros-2.expect.fld +3 -0
  139. package/dist/article/fluid/example/slicing/zeros.fld +4 -0
  140. package/dist/article/fluid/example/slicing/zipWith-1.expect.fld +4 -0
  141. package/dist/article/fluid/example/slicing/zipWith.fld +4 -0
  142. package/dist/article/fluid/example/text.fld +27 -0
  143. package/dist/article/fluid/lib/convolution.fld +16 -0
  144. package/dist/article/fluid/lib/dtw.fld +47 -0
  145. package/dist/article/fluid/lib/fnum.fld +22 -0
  146. package/dist/article/fluid/lib/graphics.fld +221 -0
  147. package/dist/article/fluid/lib/moving-average.fld +35 -0
  148. package/dist/article/fluid/lib/nombre.fld +14 -0
  149. package/dist/article/fluid/lib/prelude.fld +246 -0
  150. package/dist/article/index.html +44 -0
  151. package/fluid.js +46 -0
  152. package/package.json +80 -0
@@ -0,0 +1,246 @@
1
+ -- "Num" throughout means (Int + Float).
2
+
3
+ -- Bool -> Bool
4
+ let and False y = False;
5
+ and True y = y;
6
+
7
+ -- Bool -> Bool
8
+ let or True y = True;
9
+ or False y = y;
10
+
11
+ -- Bool -> Bool
12
+ let not True = False;
13
+ not False = True;
14
+
15
+ -- Int -> Int -> Ordering
16
+ let compare x y =
17
+ if x > y
18
+ then GT
19
+ else if x < y
20
+ then LT
21
+ else EQ;
22
+
23
+ -- Num -> Num
24
+ let negate = (-) 0;
25
+
26
+ -- Log of x in base y.
27
+ -- Float -> Float -> Float
28
+ let logBase x y = log y / log x;
29
+
30
+ -- Float -> Float -> Float
31
+ let ceilingToNearest n m =
32
+ ceiling (n / m) * m;
33
+
34
+ -- (b -> c) -> (a -> b) -> a -> c
35
+ -- Want infix <<<
36
+ let compose f g x = f (g x);
37
+
38
+ -- ((a, b) -> c) -> a -> b -> c
39
+ let curry f x y = f (x, y);
40
+
41
+ -- (a -> b -> c) -> (a, b) -> c
42
+ let uncurry f (x, y) = f x y;
43
+
44
+ -- a -> b -> a
45
+ let const x _ = x;
46
+
47
+ -- (a -> b) -> (a, c) -> (b, c)
48
+ let first f (a, c) = (f a, c);
49
+
50
+ -- (a, b) -> b
51
+ let snd (_, y) = y;
52
+
53
+ -- (a -> b) -> (c, a) -> (c, b)
54
+ let second f (c, a) = (c, f a);
55
+
56
+ -- (a -> b -> c) -> b -> a -> c
57
+ let flip f x y = f y x;
58
+
59
+ -- (a, b) -> a
60
+ let fst (x, _) = x;
61
+
62
+ -- a -> a
63
+ let id x = x;
64
+
65
+ -- (a -> b) -> (a -> c) -> a -> (b, c)
66
+ -- Want infix &&&
67
+ let prod f g x = (f x, g x);
68
+
69
+ -- (a, b) -> (b, a)
70
+ let swap (a, b) = (b, a);
71
+
72
+ -- List a -> a
73
+ let head [] = error "Can't take head of empty list";
74
+ head (x : _) = x;
75
+
76
+ -- List a -> List a
77
+ let tail [] = error "Can't take tail of empty list";
78
+ tail (_ : xs) = xs;
79
+
80
+ -- Int -> List Int -> Bool
81
+ let elem x [] = False;
82
+ elem x (x' : xs) = (x == x') `or` (elem x xs);
83
+
84
+ -- (a -> Bool) -> List a -> List a
85
+ let filter p [] = [];
86
+ filter p (x : xs) =
87
+ let ys = filter p xs in
88
+ if p x then x : ys else ys;
89
+
90
+ -- (a -> b -> a) -> a -> List b -> a
91
+ let foldl op z [] = z;
92
+ foldl op z (x : xs) = foldl op (op z x) xs;
93
+
94
+ -- (a -> b -> a) -> List b -> a
95
+ let foldl1 op (x : xs) = foldl op x xs;
96
+
97
+ -- (a -> b -> b) -> b -> List a -> b
98
+ let foldr op z [] = z;
99
+ foldr op z (x : xs) = op x (foldr op z xs);
100
+
101
+ -- (a -> b -> b) -> List a -> b
102
+ let foldr1 op [x] = x;
103
+ foldr1 op (x : y : xs) = op x (foldr1 op (y : xs));
104
+
105
+ -- (a -> b -> a) -> a -> List b -> List a
106
+ let scanl1 op z xs =
107
+ let go x continue acc =
108
+ let next = op acc x in
109
+ next : continue next in
110
+ foldr go (const []) xs z;
111
+
112
+ -- (a -> b -> a) -> a -> List b -> List a
113
+ let scanl op z xs =
114
+ z : scanl1 op z xs;
115
+
116
+ -- (a -> b) -> List a -> List b
117
+ let map f [] = [];
118
+ map f (x : xs) = f x : map f xs;
119
+
120
+ -- (List a, List a) -> List a
121
+ let append ([], ys) = ys;
122
+ append (x : xs, ys) = x : append (xs, ys);
123
+
124
+ -- List a -> List -> List a
125
+ -- Want infix ++
126
+ let concat2 [] ys = ys;
127
+ concat2 (x : xs) ys = x : concat2 xs ys;
128
+
129
+ -- List (List a) -> List a
130
+ let concat = foldl concat2 [];
131
+
132
+ -- (a -> List b) -> List a -> List b
133
+ let concatMap f xs = concat (map f xs);
134
+
135
+ -- List a -> a -> List a
136
+ let intersperse [] _ = [];
137
+ intersperse [x] _ = [x];
138
+ intersperse (x : y : ys) sep = x : sep : intersperse (y : ys) sep;
139
+
140
+ -- Int -> (a -> a) -> a -> List a
141
+ let iterate n f z =
142
+ if n == 0 then [] else z : map f (iterate (n - 1) f z);
143
+
144
+ -- List Int -> Int
145
+ let sum = foldr (+) 0;
146
+
147
+ -- List a -> a
148
+ let last [x] = x;
149
+ last (x : y : ys) = last (y : ys);
150
+
151
+ -- List a -> Int
152
+ let length [] = 0;
153
+ length (_ : xs) = 1 + length xs;
154
+
155
+ -- List a -> List a
156
+ let reverse [] = [];
157
+ reverse (x : xs) = append (reverse xs, [x]);
158
+
159
+ -- Int -> a -> List a
160
+ let repeat = flip iterate id;
161
+
162
+ -- Int -> List a -> List a
163
+ let take n xs =
164
+ if n <= 0
165
+ then []
166
+ else match xs as {
167
+ [] -> [];
168
+ x : xs -> x : take (n - 1) xs
169
+ };
170
+
171
+ -- Int -> List a -> List a
172
+ let drop n xs =
173
+ if n <= 0
174
+ then xs
175
+ else match xs as {
176
+ [] -> [];
177
+ _ : xs -> drop (n - 1) xs
178
+ };
179
+
180
+ -- Int -> List a -> List a
181
+ let lastN n xs =
182
+ foldl (compose const (drop 1)) xs (drop n xs);
183
+
184
+ -- Expects non-negative integer as first argument and non-empty list as second argument.
185
+ -- Int -> List a -> a
186
+ let nth n (x : xs) =
187
+ if n == 0 then x else nth (n - 1) xs;
188
+
189
+ -- Matrix Int -> Int -> Int -> Int
190
+ let nth2 i j xss =
191
+ nth (j - 1) (nth (i - 1) xss);
192
+
193
+ -- Partial; requires k to be in the map.
194
+ -- Int -> List (Int, b) -> b
195
+ let lookup k [] = error "Key not found in map";
196
+ lookup k ((k', v) : kvs) =
197
+ if k == k' then v else lookup k kvs;
198
+
199
+ -- Int -> Int -> Int
200
+ let max n m =
201
+ if n > m then n else m;
202
+
203
+ -- Int -> Int -> Int
204
+ let min n m =
205
+ if n < m then n else m;
206
+
207
+ -- List Int -> Int
208
+ let maximum = foldr1 max;
209
+
210
+ -- List Int -> Int
211
+ let minimum = foldr1 min;
212
+
213
+ -- List (a, b) -> (List a, List b)
214
+ let unzip [] = ([], []);
215
+ unzip ((x, y) : zs) =
216
+ let (xs, ys) = unzip zs in
217
+ (x : xs, y : ys);
218
+
219
+ -- (a -> b -> c) -> List a -> List b -> List c
220
+ let zipWith op [] ys = [];
221
+ zipWith op (x : xs) [] = [];
222
+ zipWith op (x : xs) (y : ys) = op x y : zipWith op xs ys;
223
+
224
+ -- List a -> List b -> List (a, b)
225
+ let zip = zipWith (curry id);
226
+
227
+ -- Int -> Int -> List Int
228
+ let enumFromTo n m =
229
+ if n <= m then n : [n + 1 .. m] else [];
230
+
231
+ let range (m1, n1) (m2, n2) =
232
+ [ (i1, i2) | i1 <- [m1 .. m2], i2 <- [n1 .. n2] ];
233
+
234
+ -- Int -> Int -> Int
235
+ let abs x y =
236
+ if x - y < 0 then negate (x - y) else (x - y);
237
+
238
+ -- Eq a => [a] -> [a]
239
+ let nub xs =
240
+ let nub' [] _ = [];
241
+ nub' (x : xs) ys = if x `elem` ys then nub' xs ys else x : nub' xs (x : ys) in
242
+ nub' xs [];
243
+
244
+ -- Int -> Int -> [a] -> [a]
245
+ let slice begin end xs =
246
+ take (end - begin) (drop begin xs);
@@ -0,0 +1,44 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <meta http-equiv="X-UA-Compatible" content="ie=edge">
7
+ <title>Fluid: Data-Linked Visualisations</title>
8
+ <link href="/css/styles.css" rel="stylesheet" type="text/css">
9
+ <link href="/css/view-styles.css" rel="stylesheet" type="text/css">
10
+ <script src="https://use.fontawesome.com/1091715d00.js"></script>
11
+ <script>
12
+ // move to PureScript
13
+ function toggle(id) {
14
+ const elem = document.getElementById(id)
15
+ if (elem.style.visibility == 'hidden')
16
+ elem.style.visibility = 'visible'
17
+ else
18
+ elem.style.visibility = 'hidden'
19
+ }
20
+ </script>
21
+ </head>
22
+ <body class="standalone">
23
+ <div class="grid-container double-size">
24
+ <div></div>
25
+ <div></div>
26
+ <div></div>
27
+ <div></div>
28
+ <div></div>
29
+ <div id="fig-input" class="flex-right-align data-pane"></div>
30
+ <div>
31
+ <div onclick="toggle('fig-input')"><span class="data-pane-button toggle-button">◀▶</span></div>
32
+ </div>
33
+ <div class="flex-left-align">
34
+ <div id="fig"></div>
35
+ </div>
36
+ </div>
37
+
38
+ <script src="app.js"></script>
39
+ <script>
40
+ // move to PureScript
41
+ toggle('fig-input')
42
+ </script>
43
+ </body>
44
+ </html>
package/fluid.js ADDED
@@ -0,0 +1,46 @@
1
+ #!/usr/bin/env node
2
+ const { program } = require('commander');
3
+ const fs = require('node:fs');
4
+ const webFS = require('fs').promises;
5
+ const filenameRegex = /\w+\.yml/ //may need to expand character set
6
+ const express = require('express');
7
+ const serve = require('express-static');
8
+
9
+ const app = express();
10
+ const host = '127.0.0.1';
11
+ const port = 8080;
12
+
13
+ program.command('load')
14
+ .arguments('<file>')
15
+ .action(function(file)
16
+ {
17
+ if (file.match(filenameRegex) != null)
18
+ {
19
+ try
20
+ {
21
+ //read data stream if file is large
22
+ //const data = fs.readFileSync(__dirname + "/" + file, 'utf8');
23
+ const data = fs.readFileSync(process.cwd() + "/" + file, 'utf8'); //assuming file is located at command line's current directory
24
+ console.log(data);
25
+
26
+ app.use(serve(__dirname + '/dist/article'));
27
+
28
+ const server = app.listen(port, host, function()
29
+ {
30
+ console.log("Server running: " + __dirname + '/dist/article\n' +
31
+ `Access on http://${host}:${port}`
32
+ );
33
+ })
34
+ }
35
+ catch (err)
36
+ {
37
+ console.error(err);
38
+ }
39
+ }
40
+ else
41
+ {
42
+ console.error("Invalid input file: Must be a .yml file.")
43
+ }
44
+ });
45
+
46
+ program.parse()
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "@explorable-viz/fluid",
3
+ "version": "0.0.23",
4
+ "description": "Fluid is an experimental programming language which integrates a bidirectional dynamic analysis to connect outputs to data sources in a fine-grained way. Fluid is implemented in PureScript and runs in the browser.",
5
+ "main": "index.js",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/explorable-viz/fluid.git#release"
9
+ },
10
+ "keywords": [
11
+ "PureScript",
12
+ "JavaScript"
13
+ ],
14
+ "author": "explorable-viz",
15
+ "license": "MIT",
16
+ "bugs": {
17
+ "url": "https://github.com/explorable-viz/fluid/issues"
18
+ },
19
+ "homepage": "https://f.luid.org",
20
+ "files": ["dist/article/"],
21
+ "scripts": {
22
+ "tidy": "./script/tidy.sh",
23
+
24
+ "build-app": "./script/build.sh app App",
25
+ "serve-app": "./script/serve.sh app",
26
+
27
+ "build-artifact": "./script/build.sh artifact Artifact",
28
+ "serve-artifact": "./script/serve.sh artifact",
29
+
30
+ "build-standalone-all": "./script/build-standalone-all.sh",
31
+ "build-standalone": "./script/build-standalone.sh",
32
+
33
+ "build-bench": "./script/build.sh bench Test.Benchmark",
34
+ "bench": "./script/serve.sh bench",
35
+
36
+ "build": "./script/build.sh test Test.Test",
37
+ "test": "./script/test.sh",
38
+ "test-browser": "./script/test.sh --browsers=Chrome --singleRun=false",
39
+
40
+ "build-puppeteer": "./script/build.sh test-puppeteer Test.Puppeteer --platform=node",
41
+ "test-puppeteer": "./script/test-puppeteer.sh",
42
+
43
+ "build-article": "./script/build-article.sh",
44
+
45
+ "npm-publish": "./script/npm-publish.sh"
46
+ },
47
+ "dependencies": {
48
+ "@codemirror/commands": "6.2.2",
49
+ "@codemirror/state": "6.2.0",
50
+ "@codemirror/view": "6.9.3",
51
+ "benchmark": "^2.1.4",
52
+ "commander": "^12.1.0",
53
+ "d3": "^7.9.0",
54
+ "datetime": "^0.0.3",
55
+ "express": "^4.19.2",
56
+ "express-static": "^1.2.6",
57
+ "http-shutdown": "^1.2.2",
58
+ "node-process": "^1.0.1",
59
+ "purescript": "^0.15.10"
60
+ },
61
+ "devDependencies": {
62
+ "esbuild": "0.15.1",
63
+ "gh-pages": "^6.1.1",
64
+ "karma": "6.4.0",
65
+ "karma-chrome-launcher": "3.1.1",
66
+ "karma-mocha": "2.0.1",
67
+ "karma-mocha-reporter": "2.2.5",
68
+ "mocha": "10.0.0",
69
+ "puppeteer": "^23.1.0",
70
+ "purescript-language-server": "0.16.6",
71
+ "purescript-psa": "0.8.2",
72
+ "purs-backend-es": "1.1.0",
73
+ "purs-tidy": "^0.9.3",
74
+ "spago": "^0.21.0",
75
+ "typescript": "^5.5.3"
76
+ },
77
+ "bin": {
78
+ "fluid": "./fluid.js"
79
+ }
80
+ }