@explorable-viz/fluid 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ }