git.iko.soy/rowtype-yoga/purescript-web-proletarian
on e5bdd5f help sign in
16 files changed+12−1485
since splitsnapshots
unifiedsplit
LICENSE-MIT−21 README.md+2−20 spago.dhall+1−1 spago.lock−1265 spago.yaml−19 src/Yoga/WebBoss.js+3−18 src/Yoga/WebBoss.purs+1−12 src/Yoga/WebProletarian/Runtime.js−5 src/Yoga/WebProletarian/Runtime.purs−17 src/Yoga/WebProletarian/Transferable.js−4 src/Yoga/WebProletarian/Transferable.purs−22 src/Yoga/WebProletarian/Vite.js−11 src/Yoga/WebProletarian/Vite.purs−9 src/Yoga/WebWorker.js+4−22 src/Yoga/WebWorker.purs+1−5 vite.mjs−34
LICENSE-MITdeleted−21
@@ -1,21 +0,0 @@
1−MIT License
2−
3−Copyright (c) 2026 Mark Eibes
4−
5−Permission is hereby granted, free of charge, to any person obtaining a copy
6−of this software and associated documentation files (the "Software"), to deal
7−in the Software without restriction, including without limitation the rights
8−to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9−copies of the Software, and to permit persons to whom the Software is
10−furnished to do so, subject to the following conditions:
11−
12−The above copyright notice and this permission notice shall be included in all
13−copies or substantial portions of the Software.
14−
15−THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16−IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17−FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18−AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19−LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20−OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21−SOFTWARE.
README.md+2−20
@@ -24,7 +24,7 @@ import Yoga.WebProletarian.Types (Worker)
2424import Yoga.WebWorker (postMessageToBoss, subscribe)
2525
2626main ∷ Effect Unit
27−main = void $ subscribe (\(i :: Int) -> postMessageToBoss (show i))
27+main = subscribe (\int -> postMessageToBoss (show int))
2828
2929foreign import newWorker ∷ Effect (Worker Int String)
3030```
@@ -66,28 +66,10 @@ import Worker.Echo as Echo
6666main :: Effect Unit
6767main = do
6868 worker ← Echo.newWorker
69− void $ worker # onMessageFromWorker \msg -> do
69+ worker # onMessageFromWorker \msg -> do
7070 Console.log msg
7171 worker # terminate
7272 worker # postMessageToWorker 42
7373```
7474
75−### Transferables / OffscreenCanvas
76−
77−To hand a canvas to a worker for off-main-thread rendering, transfer control of it
78−and post it across via a transfer list:
79−
80−```purs
81−import Yoga.WebBoss (postMessageToWorkerWithTransfer)
82−import Yoga.WebProletarian.Transferable (offscreenCanvasToTransferable, transferControlToOffscreen)
83−
84−main = do
85− worker ← Render.newWorker
86− offscreen ← transferControlToOffscreen canvas
87− worker # postMessageToWorkerWithTransfer offscreen [ offscreenCanvasToTransferable offscreen ]
88−```
89−
90−Use `unsafeToTransferable` for other transferables (`ArrayBuffer`, `MessagePort`, ...),
91−and `onErrorFromWorker` to observe worker errors for diagnostics.
92−
9375### Bundle it up and have fun
spago.dhall+1−1
@@ -1,7 +1,7 @@
11{ name = "web-proletarian"
22, license = "MIT"
33, repository = "https://github.com/rowtype-yoga/purescript-web-proletarian"
4−, dependencies = [ "effect", "prelude", "web-html", "unsafe-coerce" ]
4+, dependencies = [ "effect", "prelude" ]
55, packages = ./packages.dhall
66, sources = [ "src/**/*.purs" ]
77}
spago.lockdeleted−1265
@@ -1,1265 +0,0 @@
1−{
2− "workspace": {
3− "packages": {
4− "web-proletarian": {
5− "path": "./",
6− "core": {
7− "dependencies": [
8− {
9− "effect": ">=4.0.0 <5.0.0"
10− },
11− {
12− "prelude": ">=6.0.2 <7.0.0"
13− },
14− {
15− "unsafe-coerce": ">=6.0.0 <7.0.0"
16− },
17− {
18− "web-dom": ">=6.0.0 <7.0.0"
19− },
20− {
21− "web-html": ">=4.1.1 <5.0.0"
22− }
23− ]
24− },
25− "test": {
26− "dependencies": []
27− }
28− }
29− },
30− "package_set": {
31− "address": {
32− "registry": "73.2.0"
33− },
34− "compiler": ">=0.15.15 <0.16.0",
35− "content": {
36− "abc-parser": "2.1.0",
37− "ace": "9.1.0",
38− "address-rfc2821": "0.1.1",
39− "aff": "8.0.0",
40− "aff-bus": "6.0.0",
41− "aff-coroutines": "9.0.0",
42− "aff-promise": "4.0.0",
43− "aff-retry": "2.0.0",
44− "affjax": "13.0.0",
45− "affjax-node": "1.0.0",
46− "affjax-web": "1.0.0",
47− "ansi": "7.0.0",
48− "apexcharts": "0.5.0",
49− "applicative-phases": "1.0.0",
50− "argonaut": "9.0.0",
51− "argonaut-aeson-generic": "0.4.1",
52− "argonaut-codecs": "9.1.0",
53− "argonaut-core": "7.0.0",
54− "argonaut-generic": "8.0.0",
55− "argonaut-traversals": "10.0.0",
56− "argparse-basic": "2.0.0",
57− "array-builder": "0.1.2",
58− "array-search": "0.6.0",
59− "arraybuffer": "13.2.0",
60− "arraybuffer-builder": "3.1.0",
61− "arraybuffer-types": "3.0.2",
62− "arrays": "7.3.0",
63− "arrays-extra": "0.6.1",
64− "arrays-zipper": "2.0.1",
65− "ask": "1.0.0",
66− "assert": "6.0.0",
67− "assert-multiple": "0.4.0",
68− "avar": "5.0.1",
69− "axon": "0.0.3",
70− "b64": "0.0.8",
71− "barbies": "1.0.1",
72− "barlow-lens": "0.9.0",
73− "benchlib": "0.0.4",
74− "bifunctors": "6.1.0",
75− "bigints": "7.0.1",
76− "blessed": "1.0.0",
77− "bolson": "0.3.9",
78− "bookhound": "0.1.7",
79− "bower-json": "3.0.0",
80− "call-by-name": "4.0.1",
81− "canvas": "6.0.0",
82− "canvas-action": "9.0.0",
83− "cartesian": "1.0.6",
84− "catenable-lists": "7.0.0",
85− "cbor-stream": "1.3.0",
86− "chameleon": "1.0.0",
87− "chameleon-halogen": "1.0.3",
88− "chameleon-react-basic": "1.1.0",
89− "chameleon-styled": "2.5.0",
90− "chameleon-transformers": "1.0.0",
91− "channel": "1.0.0",
92− "checked-exceptions": "3.1.1",
93− "choku": "1.0.2",
94− "classless": "0.1.1",
95− "classless-arbitrary": "0.1.1",
96− "classless-decode-json": "0.1.1",
97− "classless-encode-json": "0.1.3",
98− "classnames": "2.0.0",
99− "codec": "6.1.0",
100− "codec-argonaut": "10.0.0",
101− "codec-json": "2.0.0",
102− "colors": "7.0.1",
103− "concur-core": "0.5.0",
104− "concur-react": "0.5.0",
105− "concurrent-queues": "3.0.0",
106− "console": "6.1.0",
107− "const": "6.0.0",
108− "contravariant": "6.0.0",
109− "control": "6.0.0",
110− "convertable-options": "1.0.0",
111− "coroutines": "7.0.0",
112− "css": "6.0.0",
113− "css-class-name-extractor": "0.0.4",
114− "css-frameworks": "1.1.0",
115− "csv-stream": "2.3.0",
116− "data-mvc": "0.0.2",
117− "datetime": "6.1.0",
118− "datetime-parsing": "0.2.0",
119− "debounce": "0.1.0",
120− "debug": "6.0.2",
121− "decimals": "7.1.0",
122− "default-values": "1.0.1",
123− "deku": "0.9.23",
124− "deno": "0.0.5",
125− "dissect": "1.0.0",
126− "distributive": "6.0.0",
127− "dodo-printer": "2.2.3",
128− "dom-filereader": "7.0.0",
129− "dom-indexed": "13.0.0",
130− "dom-simple": "0.4.0",
131− "dotenv": "4.0.3",
132− "droplet": "0.6.0",
133− "dts": "1.0.0",
134− "dual-numbers": "1.0.3",
135− "dynamic-buffer": "3.0.1",
136− "echarts-simple": "0.0.1",
137− "effect": "4.0.0",
138− "either": "6.1.0",
139− "elmish": "0.13.0",
140− "elmish-enzyme": "0.1.1",
141− "elmish-hooks": "0.11.0",
142− "elmish-html": "0.10.0",
143− "elmish-testing-library": "0.3.2",
144− "elmish-time-machine": "0.4.2",
145− "email-validate": "7.0.0",
146− "encoding": "0.0.9",
147− "enums": "6.0.1",
148− "env-names": "0.4.0",
149− "environment": "2.0.0",
150− "error": "2.0.0",
151− "eta-conversion": "0.3.2",
152− "exceptions": "6.1.0",
153− "exists": "6.0.0",
154− "exitcodes": "4.0.0",
155− "expect-inferred": "3.0.0",
156− "express": "0.9.1",
157− "ezfetch": "1.1.1",
158− "fahrtwind": "2.0.0",
159− "fakerjs": "0.0.1",
160− "fallback": "0.1.0",
161− "fast-vect": "1.2.0",
162− "fetch": "4.1.0",
163− "fetch-argonaut": "1.0.1",
164− "fetch-core": "5.1.0",
165− "fetch-yoga-json": "1.1.0",
166− "ffi-simple": "0.5.1",
167− "fft": "0.3.0",
168− "fft-js": "0.1.0",
169− "filterable": "5.0.0",
170− "fix-functor": "0.1.0",
171− "fixed-points": "7.0.0",
172− "fixed-precision": "5.0.0",
173− "flame": "1.6.0",
174− "float32": "2.0.0",
175− "fmt": "0.2.1",
176− "foldable-traversable": "6.0.0",
177− "foldable-traversable-extra": "0.0.6",
178− "foreign": "7.0.0",
179− "foreign-object": "4.1.0",
180− "foreign-readwrite": "3.4.0",
181− "forgetmenot": "0.1.0",
182− "fork": "6.0.0",
183− "form-urlencoded": "7.0.0",
184− "formatters": "7.0.0",
185− "framer-motion": "2.0.1",
186− "free": "7.1.0",
187− "freeap": "7.0.0",
188− "freer-free": "0.0.1",
189− "freet": "7.0.0",
190− "functions": "6.0.0",
191− "functor1": "3.0.0",
192− "functors": "5.0.0",
193− "fuzzy": "0.4.0",
194− "gen": "4.0.0",
195− "generate-values": "1.0.1",
196− "generic-router": "0.0.1",
197− "geojson": "0.0.5",
198− "geometria": "2.2.0",
199− "gesso": "1.0.1",
200− "gojs": "0.1.1",
201− "golem-fetch": "0.1.0",
202− "grain": "3.0.0",
203− "grain-router": "3.0.0",
204− "grain-virtualized": "3.0.0",
205− "graphql-client": "10.1.1",
206− "graphs": "8.1.0",
207− "group": "4.1.1",
208− "halogen": "7.0.0",
209− "halogen-bootstrap5": "5.3.2",
210− "halogen-canvas": "1.0.0",
211− "halogen-css": "10.0.0",
212− "halogen-declarative-canvas": "0.0.8",
213− "halogen-echarts-simple": "0.0.4",
214− "halogen-formless": "4.0.3",
215− "halogen-helix": "1.1.0",
216− "halogen-hooks": "0.6.3",
217− "halogen-hooks-extra": "0.9.0",
218− "halogen-infinite-scroll": "1.1.0",
219− "halogen-store": "0.5.4",
220− "halogen-storybook": "2.0.0",
221− "halogen-subscriptions": "2.0.0",
222− "halogen-svg-elems": "8.0.0",
223− "halogen-typewriter": "1.0.4",
224− "halogen-use-trigger-hooks": "1.0.0",
225− "halogen-vdom": "8.0.0",
226− "halogen-vdom-string-renderer": "0.5.0",
227− "halogen-xterm": "2.0.0",
228− "heckin": "2.0.1",
229− "heterogeneous": "0.7.0",
230− "homogeneous": "0.4.0",
231− "http-methods": "6.0.0",
232− "httpurple": "4.0.0",
233− "huffman": "0.4.0",
234− "humdrum": "0.0.1",
235− "hylograph-canvas": "0.1.0",
236− "hylograph-d3-kernel": "0.1.0",
237− "hylograph-graph": "0.1.0",
238− "hylograph-layout": "0.1.0",
239− "hylograph-music": "0.1.0",
240− "hylograph-optics": "0.1.0",
241− "hylograph-selection": "0.1.1",
242− "hylograph-simulation": "0.1.0",
243− "hylograph-simulation-core": "0.1.0",
244− "hylograph-simulation-halogen": "0.1.0",
245− "hylograph-transitions": "0.1.0",
246− "hylograph-wasm-kernel": "0.1.0",
247− "hyrule": "2.3.8",
248− "identity": "6.0.0",
249− "identy": "4.0.1",
250− "indexed-db": "1.0.0",
251− "indexed-monad": "3.0.0",
252− "ink": "0.0.1",
253− "int64": "3.0.0",
254− "integers": "6.0.0",
255− "interpolate": "5.0.2",
256− "intersection-observer": "1.0.1",
257− "invariant": "6.0.0",
258− "jarilo": "1.0.1",
259− "jelly": "0.10.0",
260− "jelly-router": "0.3.0",
261− "jelly-signal": "0.4.0",
262− "jest": "1.0.0",
263− "js-abort-controller": "1.0.0",
264− "js-bigints": "2.2.1",
265− "js-date": "8.0.0",
266− "js-fetch": "0.2.1",
267− "js-fileio": "3.0.0",
268− "js-intl": "1.1.4",
269− "js-iterators": "0.1.1",
270− "js-maps": "0.1.2",
271− "js-promise": "1.0.0",
272− "js-promise-aff": "1.0.0",
273− "js-timers": "6.1.0",
274− "js-uri": "3.1.0",
275− "jsdom": "1.0.0",
276− "json": "1.1.0",
277− "json-codecs": "5.0.0",
278− "justifill": "0.5.0",
279− "jwt": "0.0.9",
280− "labeled-data": "0.2.0",
281− "language-cst-parser": "0.14.1",
282− "lazy": "6.0.0",
283− "lazy-joe": "1.0.0",
284− "lcg": "4.0.0",
285− "leibniz": "5.0.0",
286− "leveldb": "1.0.1",
287− "liminal": "1.0.1",
288− "linalg": "6.0.0",
289− "lists": "7.0.0",
290− "literals": "1.0.2",
291− "logging": "3.0.0",
292− "logging-journald": "0.4.0",
293− "lumi-components": "18.0.0",
294− "machines": "7.0.0",
295− "maps-eager": "0.5.0",
296− "marionette": "1.0.0",
297− "marionette-react-basic-hooks": "0.1.1",
298− "marked": "0.1.0",
299− "matrices": "5.0.1",
300− "matryoshka": "1.0.0",
301− "maybe": "6.0.0",
302− "media-types": "6.0.0",
303− "meowclient": "1.0.0",
304− "midi": "4.0.0",
305− "milkis": "9.0.0",
306− "mimetype": "0.0.1",
307− "minibench": "4.0.1",
308− "mmorph": "7.0.0",
309− "monad-control": "5.0.0",
310− "monad-logger": "1.3.1",
311− "monad-loops": "0.5.0",
312− "monad-unlift": "1.0.1",
313− "monoid-extras": "0.0.1",
314− "monoidal": "0.16.0",
315− "morello": "0.4.0",
316− "mote": "3.0.0",
317− "motsunabe": "2.0.0",
318− "mvc": "0.0.1",
319− "mysql": "6.0.1",
320− "n3": "0.1.0",
321− "nano-id": "1.1.0",
322− "nanoid": "0.1.0",
323− "naturals": "3.0.0",
324− "nested-functor": "0.2.1",
325− "newtype": "5.0.0",
326− "nextjs": "0.1.1",
327− "nextui": "0.2.0",
328− "node-buffer": "9.0.0",
329− "node-child-process": "11.1.0",
330− "node-event-emitter": "3.0.0",
331− "node-execa": "5.0.0",
332− "node-fs": "9.2.0",
333− "node-glob-basic": "2.0.0",
334− "node-http": "9.1.0",
335− "node-http2": "1.1.1",
336− "node-human-signals": "1.0.0",
337− "node-net": "5.1.0",
338− "node-os": "5.1.0",
339− "node-path": "5.0.1",
340− "node-process": "11.2.0",
341− "node-readline": "8.1.1",
342− "node-sqlite3": "8.0.0",
343− "node-stream-pipes": "2.1.6",
344− "node-streams": "9.0.1",
345− "node-tls": "0.3.1",
346− "node-url": "7.0.1",
347− "node-workerbees": "0.3.1",
348− "node-zlib": "0.4.0",
349− "nonempty": "7.0.0",
350− "now": "6.0.0",
351− "npm-package-json": "2.0.0",
352− "nullable": "6.0.0",
353− "numberfield": "0.2.2",
354− "numbers": "9.0.1",
355− "oak": "3.1.1",
356− "oak-debug": "1.2.2",
357− "object-maps": "0.3.0",
358− "ocarina": "1.5.4",
359− "oooooooooorrrrrrrmm-lib": "0.0.1",
360− "open-colors-scales-and-schemes": "1.0.0",
361− "open-drawing": "6.0.4",
362− "open-folds": "6.4.0",
363− "open-foreign-generic": "11.0.3",
364− "open-memoize": "6.2.0",
365− "open-mkdirp-aff": "1.2.0",
366− "open-pairing": "6.2.0",
367− "open-smolder": "12.0.2",
368− "options": "7.0.0",
369− "optparse": "5.0.1",
370− "ordered-collections": "3.2.0",
371− "ordered-set": "0.5.0",
372− "orders": "6.0.0",
373− "org-doc": "0.1.0",
374− "owoify": "1.2.0",
375− "pairs": "9.0.1",
376− "parallel": "7.0.0",
377− "parsing": "11.0.0",
378− "parsing-dataview": "3.2.4",
379− "partial": "4.0.0",
380− "pathy": "9.0.0",
381− "pha": "0.13.0",
382− "phaser": "0.7.0",
383− "phylio": "1.1.2",
384− "pipes": "8.0.0",
385− "pirates-charm": "0.0.1",
386− "play": "1.0.0",
387− "pmock": "0.9.0",
388− "point-free": "1.0.0",
389− "pointed-list": "0.5.1",
390− "polymorphic-vectors": "4.0.0",
391− "posix-types": "6.0.0",
392− "postgresql": "2.0.21",
393− "precise": "6.0.0",
394− "precise-datetime": "7.0.0",
395− "prelude": "6.0.2",
396− "prettier-printer": "3.0.0",
397− "printf": "0.1.0",
398− "priority-queue": "0.1.2",
399− "profunctor": "6.0.1",
400− "profunctor-lenses": "8.0.0",
401− "protobuf": "4.4.0",
402− "psa-utils": "8.0.0",
403− "psci-support": "6.0.0",
404− "punycode": "1.0.0",
405− "pursfmt": "0.17.0",
406− "qualified-do": "2.2.0",
407− "quantities": "12.2.0",
408− "quickcheck": "8.0.1",
409− "quickcheck-combinators": "0.1.3",
410− "quickcheck-laws": "7.0.0",
411− "quickcheck-utf8": "0.0.0",
412− "random": "6.0.0",
413− "rationals": "6.0.0",
414− "rdf": "0.1.0",
415− "react": "11.0.0",
416− "react-aria": "0.2.0",
417− "react-basic": "17.0.0",
418− "react-basic-classic": "3.0.0",
419− "react-basic-dnd": "10.1.0",
420− "react-basic-dom": "7.0.0",
421− "react-basic-dom-beta": "0.1.1",
422− "react-basic-emotion": "7.1.0",
423− "react-basic-hooks": "9.0.0",
424− "react-basic-storybook": "2.0.0",
425− "react-dom": "8.0.0",
426− "react-halo": "3.0.0",
427− "react-icons": "1.1.5",
428− "react-markdown": "0.1.0",
429− "react-testing-library": "4.0.1",
430− "react-virtuoso": "1.0.0",
431− "reactix": "0.6.1",
432− "read": "1.0.1",
433− "recharts": "1.1.0",
434− "record": "4.0.0",
435− "record-extra": "5.0.1",
436− "record-extra-srghma": "0.2.8",
437− "record-ptional-fields": "0.1.2",
438− "record-studio": "1.0.4",
439− "refs": "6.0.0",
440− "remotedata": "5.0.1",
441− "repr": "0.5.0",
442− "resize-arrays": "0.0.1",
443− "resize-observer": "1.0.0",
444− "resource": "2.0.1",
445− "resourcet": "1.0.0",
446− "result": "1.0.3",
447− "return": "0.2.0",
448− "ring-modules": "5.0.1",
449− "rito": "0.3.4",
450− "roman": "0.4.0",
451− "rough-notation": "1.0.2",
452− "routing": "11.0.0",
453− "routing-duplex": "0.7.0",
454− "run": "5.0.0",
455− "safe-coerce": "2.0.0",
456− "safely": "4.0.1",
457− "school-of-music": "1.3.0",
458− "selection-foldable": "0.2.0",
459− "selective-functors": "1.0.1",
460− "semirings": "7.0.0",
461− "shuffle": "2.0.0",
462− "sigil": "0.2.0",
463− "signal": "13.0.0",
464− "simple-emitter": "3.0.1",
465− "simple-i18n": "2.0.1",
466− "simple-json": "9.0.0",
467− "simple-json-generics": "0.2.1",
468− "simple-ulid": "3.0.0",
469− "sized-matrices": "1.0.0",
470− "sized-vectors": "5.0.2",
471− "slug": "3.2.0",
472− "small-ffi": "4.0.1",
473− "soundfonts": "4.1.0",
474− "sparse-matrices": "2.0.1",
475− "sparse-polynomials": "3.0.1",
476− "spec": "8.1.1",
477− "spec-discovery": "8.4.1",
478− "spec-mocha": "5.1.1",
479− "spec-node": "0.0.3",
480− "spec-quickcheck": "5.0.2",
481− "spec-reporter-xunit": "0.7.1",
482− "splitmix": "2.1.0",
483− "ssrs": "1.0.0",
484− "st": "6.2.0",
485− "statistics": "0.3.2",
486− "strictlypositiveint": "1.0.1",
487− "string-parsers": "8.0.0",
488− "strings": "6.0.1",
489− "strings-extra": "4.0.0",
490− "stringutils": "0.0.12",
491− "structured-logging": "1.0.0",
492− "substitute": "0.2.3",
493− "supply": "0.2.0",
494− "svg-parser": "3.0.0",
495− "systemd-journald": "0.3.0",
496− "tagged": "4.0.2",
497− "tailrec": "6.1.0",
498− "tanstack-query": "2.0.0",
499− "tecton": "0.2.1",
500− "tecton-halogen": "0.2.0",
501− "test-unit": "17.0.0",
502− "text-formatting": "0.1.0",
503− "thermite": "6.3.1",
504− "thermite-dom": "0.3.1",
505− "these": "6.0.0",
506− "threading": "0.0.3",
507− "tidy": "0.11.1",
508− "tidy-codegen": "4.0.1",
509− "tldr": "0.0.0",
510− "toestand": "0.9.0",
511− "transformation-matrix": "1.0.1",
512− "transformers": "6.1.0",
513− "transit": "1.0.0",
514− "tree-rose": "4.0.2",
515− "trivial-unfold": "0.5.0",
516− "ts-bridge": "4.0.0",
517− "tuples": "7.0.0",
518− "two-or-more": "1.0.0",
519− "type-equality": "4.0.1",
520− "typedenv": "2.0.1",
521− "typelevel": "6.0.0",
522− "typelevel-lists": "2.1.0",
523− "typelevel-peano": "1.0.1",
524− "typelevel-prelude": "7.0.0",
525− "typelevel-regex": "0.0.3",
526− "typelevel-rows": "0.1.0",
527− "typisch": "0.4.0",
528− "uint": "7.0.0",
529− "ulid": "3.0.1",
530− "uncurried-transformers": "1.1.0",
531− "undefined": "2.0.0",
532− "undefined-is-not-a-problem": "1.1.0",
533− "unfoldable": "6.0.0",
534− "unicode": "6.0.0",
535− "unique": "0.6.1",
536− "unlift": "1.0.1",
537− "unordered-collections": "3.1.0",
538− "unsafe-coerce": "6.0.0",
539− "unsafe-reference": "5.0.0",
540− "untagged-to-tagged": "0.1.4",
541− "untagged-union": "1.0.0",
542− "uri": "9.0.0",
543− "url-immutable": "1.0.0",
544− "url-regex-safe": "0.1.1",
545− "uuid": "9.0.0",
546− "uuidv4": "1.0.0",
547− "validation": "6.0.0",
548− "variant": "8.0.0",
549− "variant-encodings": "2.0.0",
550− "variant-gen": "1.0.0",
551− "vectorfield": "1.0.1",
552− "vectors": "2.1.0",
553− "versions": "7.0.0",
554− "visx": "0.0.2",
555− "vitest": "2.0.0",
556− "web-clipboard": "6.0.0",
557− "web-cssom": "2.0.0",
558− "web-cssom-view": "0.1.0",
559− "web-dom": "6.0.0",
560− "web-dom-parser": "8.0.0",
561− "web-dom-xpath": "3.0.0",
562− "web-encoding": "3.0.0",
563− "web-events": "4.0.0",
564− "web-fetch": "4.0.1",
565− "web-file": "4.0.0",
566− "web-geometry": "0.1.0",
567− "web-html": "4.1.1",
568− "web-pointerevents": "2.0.0",
569− "web-proletarian": "1.0.0",
570− "web-promise": "3.2.0",
571− "web-resize-observer": "2.1.0",
572− "web-router": "1.0.0",
573− "web-socket": "4.0.0",
574− "web-storage": "5.0.0",
575− "web-streams": "4.0.0",
576− "web-touchevents": "4.0.0",
577− "web-uievents": "5.0.0",
578− "web-url": "2.0.0",
579− "web-workers": "1.1.0",
580− "web-xhr": "5.0.1",
581− "webb-aff-list": "0.0.2",
582− "webb-array": "0.0.2",
583− "webb-channel": "0.0.3",
584− "webb-commandline": "0.0.3",
585− "webb-directory": "0.0.7",
586− "webb-file": "0.0.1",
587− "webb-map": "0.0.1",
588− "webb-monad": "0.0.2",
589− "webb-mutex": "0.0.7",
590− "webb-parsing": "0.0.5",
591− "webb-random": "0.0.1",
592− "webb-refer": "0.0.3",
593− "webb-set": "0.0.1",
594− "webb-slot": "0.0.1",
595− "webb-stateful": "0.0.3",
596− "webb-string": "0.0.1",
597− "webb-test": "0.0.1",
598− "webb-thread": "0.0.2",
599− "webb-writer": "0.0.3",
600− "webextension-polyfill": "0.1.0",
601− "webgpu": "0.0.1",
602− "which": "2.0.0",
603− "whine-core": "0.0.33",
604− "xterm": "1.0.0",
605− "yaml-next": "3.1.1",
606− "yoga-fetch": "1.0.1",
607− "yoga-json": "5.1.0",
608− "yoga-om": "0.1.0",
609− "yoga-postgres": "6.0.0",
610− "yoga-react-dom": "1.0.1",
611− "yoga-redis": "0.1.0",
612− "yoga-sql-types": "0.1.0",
613− "yoga-subtlecrypto": "0.1.0",
614− "yoga-test-docker": "0.1.0",
615− "yoga-tree": "1.0.0",
616− "yoga-tree-svg": "0.1.0",
617− "yoga-tree-utils": "1.0.0",
618− "z3": "0.0.2",
619− "zipperarray": "2.0.0"
620− }
621− },
622− "extra_packages": {}
623− },
624− "packages": {
625− "arrays": {
626− "type": "registry",
627− "version": "7.3.0",
628− "integrity": "sha256-GD4z7LCi9wzi7FCQqbWhvs8paoUK9NO+HwgXZ+KP8Rk=",
629− "dependencies": [
630− "bifunctors",
631− "control",
632− "foldable-traversable",
633− "functions",
634− "maybe",
635− "nonempty",
636− "partial",
637− "prelude",
638− "safe-coerce",
639− "st",
640− "tailrec",
641− "tuples",
642− "unfoldable",
643− "unsafe-coerce"
644− ]
645− },
646− "bifunctors": {
647− "type": "registry",
648− "version": "6.1.0",
649− "integrity": "sha256-CvZRb8uI75eKIqiYntR+k05Wk6tKlMS5w8sCA2AFna0=",
650− "dependencies": [
651− "const",
652− "either",
653− "newtype",
654− "prelude",
655− "tuples"
656− ]
657− },
658− "const": {
659− "type": "registry",
660− "version": "6.0.0",
661− "integrity": "sha256-S+m0lQsxnji0z1XRUmkn+3RFuWJ5CXWuIr1u3i8Bfoc=",
662− "dependencies": [
663− "invariant",
664− "newtype",
665− "prelude"
666− ]
667− },
668− "contravariant": {
669− "type": "registry",
670− "version": "6.0.0",
671− "integrity": "sha256-nuckEWqL80NaPmR/l9AUyrfycNh18XcvlZV9PAamwqc=",
672− "dependencies": [
673− "const",
674− "either",
675− "newtype",
676− "prelude",
677− "tuples"
678− ]
679− },
680− "control": {
681− "type": "registry",
682− "version": "6.0.0",
683− "integrity": "sha256-0vxyYh5FL+ilxgLo954w1LqCUC0RSIivNNlb9CaNUQg=",
684− "dependencies": [
685− "newtype",
686− "prelude"
687− ]
688− },
689− "datetime": {
690− "type": "registry",
691− "version": "6.1.0",
692− "integrity": "sha256-tbv6eDXy6QOD7YSknxYSbsDF32OC2JrNbSBpzMs7Doc=",
693− "dependencies": [
694− "bifunctors",
695− "control",
696− "either",
697− "enums",
698− "foldable-traversable",
699− "functions",
700− "gen",
701− "integers",
702− "lists",
703− "maybe",
704− "newtype",
705− "numbers",
706− "ordered-collections",
707− "partial",
708− "prelude",
709− "tuples"
710− ]
711− },
712− "distributive": {
713− "type": "registry",
714− "version": "6.0.0",
715− "integrity": "sha256-netyJK4B32PDYHD0tF2AenKgo3urzbI770ycM0pArAo=",
716− "dependencies": [
717− "identity",
718− "newtype",
719− "prelude",
720− "tuples",
721− "type-equality"
722− ]
723− },
724− "effect": {
725− "type": "registry",
726− "version": "4.0.0",
727− "integrity": "sha256-DdqU3bncRTjgMVPPRlAuGHVeajSPEcRaRhNuio7if6s=",
728− "dependencies": [
729− "prelude"
730− ]
731− },
732− "either": {
733− "type": "registry",
734− "version": "6.1.0",
735− "integrity": "sha256-tBHx3PgtH4GZOApZCDkcM7szRTYJinrUrVGWazQCUUg=",
736− "dependencies": [
737− "control",
738− "invariant",
739− "maybe",
740− "prelude"
741− ]
742− },
743− "enums": {
744− "type": "registry",
745− "version": "6.0.1",
746− "integrity": "sha256-sdZOmLX5+5pASGpvVyT0vSD5BBYQjZiayjV5XiPutso=",
747− "dependencies": [
748− "control",
749− "either",
750− "gen",
751− "maybe",
752− "newtype",
753− "nonempty",
754− "partial",
755− "prelude",
756− "tuples",
757− "unfoldable"
758− ]
759− },
760− "exceptions": {
761− "type": "registry",
762− "version": "6.1.0",
763− "integrity": "sha256-nRrr+N0wk0TUFOWLR7e1n1oxcXo/X345bQUtoY9lW6A=",
764− "dependencies": [
765− "effect",
766− "either",
767− "maybe",
768− "prelude"
769− ]
770− },
771− "exists": {
772− "type": "registry",
773− "version": "6.0.0",
774− "integrity": "sha256-vtLbrWNaI+pzx/2fw2AQnCovoLtcosClIhjO26QKkh8=",
775− "dependencies": [
776− "unsafe-coerce"
777− ]
778− },
779− "foldable-traversable": {
780− "type": "registry",
781− "version": "6.0.0",
782− "integrity": "sha256-NGGWyCio/xjce6fPP7y3wwg7CheqllID6aJudDxbWhA=",
783− "dependencies": [
784− "bifunctors",
785− "const",
786− "control",
787− "either",
788− "functors",
789− "identity",
790− "maybe",
791− "newtype",
792− "orders",
793− "prelude",
794− "tuples"
795− ]
796− },
797− "foreign": {
798− "type": "registry",
799− "version": "7.0.0",
800− "integrity": "sha256-jiDRMVQfovGsbbA/FzbzYf6iWk9i2b5gNrIjz+gFfsI=",
801− "dependencies": [
802− "either",
803− "functions",
804− "integers",
805− "lists",
806− "maybe",
807− "prelude",
808− "strings",
809− "transformers",
810− "unsafe-coerce"
811− ]
812− },
813− "functions": {
814− "type": "registry",
815− "version": "6.0.0",
816− "integrity": "sha256-0jgtOr+SFO4UScKc40oA/9Vdcf2rLn3h3vZlY0KfqVo=",
817− "dependencies": [
818− "prelude"
819− ]
820− },
821− "functors": {
822− "type": "registry",
823− "version": "5.0.0",
824− "integrity": "sha256-W1o/4wcp6S3chodYL8uixlXK2mfr1L+SzM1R+whqUco=",
825− "dependencies": [
826− "bifunctors",
827− "const",
828− "contravariant",
829− "control",
830− "distributive",
831− "either",
832− "invariant",
833− "maybe",
834− "newtype",
835− "prelude",
836− "profunctor",
837− "tuples",
838− "unsafe-coerce"
839− ]
840− },
841− "gen": {
842− "type": "registry",
843− "version": "4.0.0",
844− "integrity": "sha256-kyOateeOtQa07vfTMYeSuCKdelgKE1R65fwKkZ10wsY=",
845− "dependencies": [
846− "either",
847− "foldable-traversable",
848− "identity",
849− "maybe",
850− "newtype",
851− "nonempty",
852− "prelude",
853− "tailrec",
854− "tuples",
855− "unfoldable"
856− ]
857− },
858− "identity": {
859− "type": "registry",
860− "version": "6.0.0",
861− "integrity": "sha256-RY/iXPpxpqvKHYfJeFVNI1J06kohB9rbtWYuha8t0LE=",
862− "dependencies": [
863− "control",
864− "invariant",
865− "newtype",
866− "prelude"
867− ]
868− },
869− "integers": {
870− "type": "registry",
871− "version": "6.0.0",
872− "integrity": "sha256-Y8yozC1uHRLcruobEyv5/bMKzE1BoKJ/olHv6o+bgm8=",
873− "dependencies": [
874− "maybe",
875− "numbers",
876− "prelude"
877− ]
878− },
879− "invariant": {
880− "type": "registry",
881− "version": "6.0.0",
882− "integrity": "sha256-HyoT1I5qIHRq8RSZji6zZDvqnpVjLw748utrKwZtqsw=",
883− "dependencies": [
884− "control",
885− "prelude"
886− ]
887− },
888− "js-date": {
889− "type": "registry",
890− "version": "8.0.0",
891− "integrity": "sha256-DNQrp4xYc8o80jtxo0aOkUeXGi6h0Xidkk2ZQ8Y4l5Y=",
892− "dependencies": [
893− "datetime",
894− "effect",
895− "enums",
896− "foreign",
897− "functions",
898− "integers",
899− "maybe",
900− "prelude"
901− ]
902− },
903− "lazy": {
904− "type": "registry",
905− "version": "6.0.0",
906− "integrity": "sha256-MHRC+1Pc+AjortBp4b/e1e6KpEpsDwaJBNBB7TOL+1I=",
907− "dependencies": [
908− "control",
909− "foldable-traversable",
910− "invariant",
911− "prelude"
912− ]
913− },
914− "lists": {
915− "type": "registry",
916− "version": "7.0.0",
917− "integrity": "sha256-/mGd7wLoU+wsTcqii7SSUByxsvwvjnu2PjwAD47yYb4=",
918− "dependencies": [
919− "bifunctors",
920− "control",
921− "foldable-traversable",
922− "lazy",
923− "maybe",
924− "newtype",
925− "nonempty",
926− "partial",
927− "prelude",
928− "tailrec",
929− "tuples",
930− "unfoldable"
931− ]
932− },
933− "maybe": {
934− "type": "registry",
935− "version": "6.0.0",
936− "integrity": "sha256-8X6XEgtZ5lqfkEuc1hWOofnL6mwhk8gSJTxwvbR/SbY=",
937− "dependencies": [
938− "control",
939− "invariant",
940− "newtype",
941− "prelude"
942− ]
943− },
944− "media-types": {
945− "type": "registry",
946− "version": "6.0.0",
947− "integrity": "sha256-3Wyq+vfqJFTmy1k6DGVnXStxtZxgK631wusDPzlFVxg=",
948− "dependencies": [
949− "newtype",
950− "prelude"
951− ]
952− },
953− "newtype": {
954− "type": "registry",
955− "version": "5.0.0",
956− "integrity": "sha256-dt6w0cty4OS+Pjt9fsh3iU6ottqSU83mdAZkaEEvo6c=",
957− "dependencies": [
958− "prelude",
959− "safe-coerce"
960− ]
961− },
962− "nonempty": {
963− "type": "registry",
964− "version": "7.0.0",
965− "integrity": "sha256-Ctkq8/+KiGqCE53Y/LvibA/coy7ev9HtRZU+GYS7yfQ=",
966− "dependencies": [
967− "control",
968− "foldable-traversable",
969− "maybe",
970− "prelude",
971− "tuples",
972− "unfoldable"
973− ]
974− },
975− "nullable": {
976− "type": "registry",
977− "version": "6.0.0",
978− "integrity": "sha256-CDAZk+L9Sc0GCFTkE8n+qdp4Ys8avvnkU+m2hVALt7M=",
979− "dependencies": [
980− "functions",
981− "maybe",
982− "prelude"
983− ]
984− },
985− "numbers": {
986− "type": "registry",
987− "version": "9.0.1",
988− "integrity": "sha256-ZydYckgwRAnRaFC7pu6fADhzdwX+UqHZrfJyet64zls=",
989− "dependencies": [
990− "functions",
991− "maybe",
992− "prelude"
993− ]
994− },
995− "ordered-collections": {
996− "type": "registry",
997− "version": "3.2.0",
998− "integrity": "sha256-NaEXc2cz/7lJfxPWEja4XlZbGxuRqJwFKQJjsJf51kQ=",
999− "dependencies": [
1000− "arrays",
1001− "control",
1002− "foldable-traversable",
1003− "functions",
1004− "gen",
1005− "lists",
1006− "maybe",
1007− "newtype",
1008− "partial",
1009− "prelude",
1010− "safe-coerce",
1011− "tailrec",
1012− "tuples",
1013− "unfoldable"
1014− ]
1015− },
1016− "orders": {
1017− "type": "registry",
1018− "version": "6.0.0",
1019− "integrity": "sha256-nSMxZK7wxyDULkjZqvMyB71mVo6b0AyLLHosDVbv1XM=",
1020− "dependencies": [
1021− "newtype",
1022− "prelude"
1023− ]
1024− },
1025− "partial": {
1026− "type": "registry",
1027− "version": "4.0.0",
1028− "integrity": "sha256-mdrlJBAgFMh79hNRW39uv7c+BwnnaOrAMmdh7+VhEhs=",
1029− "dependencies": []
1030− },
1031− "prelude": {
1032− "type": "registry",
1033− "version": "6.0.2",
1034− "integrity": "sha256-IqykrDRquGUD/LRSad7y75hZv3bUsGQ4knc8tdez8Qw=",
1035− "dependencies": []
1036− },
1037− "profunctor": {
1038− "type": "registry",
1039− "version": "6.0.1",
1040− "integrity": "sha256-Ow0mJC+PIIRq/a3mzCWY5vxuTgR/e+Ee68+mWeSRnWY=",
1041− "dependencies": [
1042− "control",
1043− "distributive",
1044− "either",
1045− "exists",
1046− "invariant",
1047− "newtype",
1048− "prelude",
1049− "tuples"
1050− ]
1051− },
1052− "refs": {
1053− "type": "registry",
1054− "version": "6.0.0",
1055− "integrity": "sha256-KKD5G9dR2SauuDGULUJsxjqDOEi1Jqm+2Sq5U2mY8YU=",
1056− "dependencies": [
1057− "effect",
1058− "prelude"
1059− ]
1060− },
1061− "safe-coerce": {
1062− "type": "registry",
1063− "version": "2.0.0",
1064− "integrity": "sha256-EJrxtKt5xC7TYjBZrSBO/J7Aw3DmtilYjt4olpAXWVc=",
1065− "dependencies": [
1066− "unsafe-coerce"
1067− ]
1068− },
1069− "st": {
1070− "type": "registry",
1071− "version": "6.2.0",
1072− "integrity": "sha256-WI4MEkkwUd4pnwZQ3G8VKWgX5t1RSNJludm5e9boaRo=",
1073− "dependencies": [
1074− "effect",
1075− "partial",
1076− "prelude",
1077− "tailrec",
1078− "unsafe-coerce"
1079− ]
1080− },
1081− "strings": {
1082− "type": "registry",
1083− "version": "6.0.1",
1084− "integrity": "sha256-FNto2hoNW5Da6W6crIk77YXMagBvOGHZE1kO7eZ1vLM=",
1085− "dependencies": [
1086− "arrays",
1087− "control",
1088− "either",
1089− "enums",
1090− "foldable-traversable",
1091− "gen",
1092− "integers",
1093− "maybe",
1094− "newtype",
1095− "nonempty",
1096− "partial",
1097− "prelude",
1098− "tailrec",
1099− "tuples",
1100− "unfoldable",
1101− "unsafe-coerce"
1102− ]
1103− },
1104− "tailrec": {
1105− "type": "registry",
1106− "version": "6.1.0",
1107− "integrity": "sha256-xrorCfP0xV1wubs27idQCHQqdvSUuqmmL/am7Ji1wVU=",
1108− "dependencies": [
1109− "bifunctors",
1110− "effect",
1111− "either",
1112− "identity",
1113− "maybe",
1114− "partial",
1115− "prelude",
1116− "refs"
1117− ]
1118− },
1119− "transformers": {
1120− "type": "registry",
1121− "version": "6.1.0",
1122− "integrity": "sha256-QJmgNT/y7ljPHSsXaW4zxF/982BFiQ90KNL1g/NtEOQ=",
1123− "dependencies": [
1124− "control",
1125− "distributive",
1126− "effect",
1127− "either",
1128− "exceptions",
1129− "foldable-traversable",
1130− "identity",
1131− "lazy",
1132− "maybe",
1133− "newtype",
1134− "prelude",
1135− "st",
1136− "tailrec",
1137− "tuples",
1138− "unfoldable"
1139− ]
1140− },
1141− "tuples": {
1142− "type": "registry",
1143− "version": "7.0.0",
1144− "integrity": "sha256-BKy7EfK8S1KeTCwyWqyW1wwcpSAQuh3IsczSVgS6fzY=",
1145− "dependencies": [
1146− "control",
1147− "invariant",
1148− "prelude"
1149− ]
1150− },
1151− "type-equality": {
1152− "type": "registry",
1153− "version": "4.0.1",
1154− "integrity": "sha256-BBqYOSnAKmayRvR5mtZoCf4SlYs2ipatD/+5nQx73aw=",
1155− "dependencies": []
1156− },
1157− "unfoldable": {
1158− "type": "registry",
1159− "version": "6.0.0",
1160− "integrity": "sha256-BK/6By1sKp/ztk+9CF3q43SV0QDTLVdsGqFerKHSmbg=",
1161− "dependencies": [
1162− "foldable-traversable",
1163− "maybe",
1164− "partial",
1165− "prelude",
1166− "tuples"
1167− ]
1168− },
1169− "unsafe-coerce": {
1170− "type": "registry",
1171− "version": "6.0.0",
1172− "integrity": "sha256-0L1QsaY20OILjfU5TV72d3U/tSjhmL9hJ32WMp857Lk=",
1173− "dependencies": []
1174− },
1175− "web-dom": {
1176− "type": "registry",
1177− "version": "6.0.0",
1178− "integrity": "sha256-rVeqkxChkjqisDvOujy9BMEgGqJkwX3t6g21bXfiG5o=",
1179− "dependencies": [
1180− "effect",
1181− "enums",
1182− "maybe",
1183− "newtype",
1184− "nullable",
1185− "prelude",
1186− "unsafe-coerce",
1187− "web-events"
1188− ]
1189− },
1190− "web-events": {
1191− "type": "registry",
1192− "version": "4.0.0",
1193− "integrity": "sha256-wZNeldG0OU+8qGycUJ9e6vxf1/GC4Ep4OlRMhvjs9LA=",
1194− "dependencies": [
1195− "datetime",
1196− "effect",
1197− "enums",
1198− "foreign",
1199− "functions",
1200− "maybe",
1201− "newtype",
1202− "nullable",
1203− "prelude",
1204− "unsafe-coerce"
1205− ]
1206− },
1207− "web-file": {
1208− "type": "registry",
1209− "version": "4.0.0",
1210− "integrity": "sha256-txsdkeWBKU/+5v9m5c6kysgJQSDyV1r7MHaeT4STpjQ=",
1211− "dependencies": [
1212− "datetime",
1213− "effect",
1214− "enums",
1215− "foreign",
1216− "integers",
1217− "maybe",
1218− "media-types",
1219− "nullable",
1220− "numbers",
1221− "partial",
1222− "prelude",
1223− "tuples",
1224− "unfoldable",
1225− "unsafe-coerce",
1226− "web-events"
1227− ]
1228− },
1229− "web-html": {
1230− "type": "registry",
1231− "version": "4.1.1",
1232− "integrity": "sha256-yOuZJGUxFrivHKpo/jKuKzFZaq6PPPE64ftSysXFssk=",
1233− "dependencies": [
1234− "effect",
1235− "enums",
1236− "foreign",
1237− "functions",
1238− "js-date",
1239− "maybe",
1240− "media-types",
1241− "newtype",
1242− "nullable",
1243− "prelude",
1244− "unsafe-coerce",
1245− "web-dom",
1246− "web-events",
1247− "web-file",
1248− "web-storage"
1249− ]
1250− },
1251− "web-storage": {
1252− "type": "registry",
1253− "version": "5.0.0",
1254− "integrity": "sha256-YJfos55oeKtBStNfoWfeflSy8j+4IDym5eaZtIY7YM4=",
1255− "dependencies": [
1256− "effect",
1257− "maybe",
1258− "nullable",
1259− "prelude",
1260− "unsafe-coerce",
1261− "web-events"
1262− ]
1263− }
1264− }
1265−}
spago.yamldeleted−19
@@ -1,19 +0,0 @@
1−package:
2− name: web-proletarian
3− dependencies:
4− - effect: ">=4.0.0 <5.0.0"
5− - prelude: ">=6.0.2 <7.0.0"
6− - web-dom: ">=6.0.0 <7.0.0"
7− - web-html: ">=4.1.1 <5.0.0"
8− - unsafe-coerce: ">=6.0.0 <7.0.0"
9− publish:
10− version: 2.0.0
11− license: MIT-0 AND MIT
12− location:
13− githubOwner: rowtype-yoga
14− githubRepo: purescript-web-proletarian
15− include:
16− - vite.mjs
17−workspace:
18− packageSet:
19− registry: 73.2.0
src/Yoga/WebBoss.js+3−18
@@ -1,22 +1,7 @@
1−export const onMessageFromWorker = handler => worker => () => {
2− const listener = event => handler(event.data)();
3− worker.addEventListener("message", listener);
4− return () => worker.removeEventListener("message", listener);
5−};
6−
7−export const onErrorFromWorker = handler => worker => () => {
8− const listener = event => handler(event)();
9− worker.addEventListener("error", listener);
10− return () => worker.removeEventListener("error", listener);
11−};
12−
13−export const onMessageErrorFromWorker = handler => worker => () => {
14− worker.addEventListener("messageerror", handler);
15− return () => worker.removeEventListener("messageerror", handler);
16−};
1+export const onMessageFromWorker = handler => worker => () => {
2+ worker.onmessage = (msg => handler(msg.data)())
3+}
174
185export const postMessageToWorker = msg => worker => () => worker.postMessage(msg)
196
20−export const postMessageToWorkerWithTransfer = msg => transfer => worker => () => worker.postMessage(msg, transfer)
21−
227export const terminate = worker => () => worker.terminate()
src/Yoga/WebBoss.purs+1−12
@@ -3,22 +3,11 @@ module Yoga.WebBoss where
33import Prelude
44
55import Effect (Effect)
6−import Web.HTML.Event.ErrorEvent (ErrorEvent)
7−import Yoga.WebProletarian.Transferable (Transferable)
86import Yoga.WebProletarian.Types (Worker)
97
108foreign import onMessageFromWorker
11− ∷ ∀ toWorker toBoss. (toBoss → Effect Unit) → Worker toWorker toBoss → Effect (Effect Unit)
12−
13−foreign import onErrorFromWorker
14− ∷ ∀ toWorker toBoss. (ErrorEvent → Effect Unit) → Worker toWorker toBoss → Effect (Effect Unit)
15−
16−foreign import onMessageErrorFromWorker
17− ∷ ∀ toWorker toBoss. Effect Unit → Worker toWorker toBoss → Effect (Effect Unit)
9+ ∷ ∀ toWorker toBoss. (toBoss → Effect Unit) → Worker toWorker toBoss → Effect Unit
1810
1911foreign import postMessageToWorker ∷ ∀ toBoss toWorker. toWorker → Worker toWorker toBoss → Effect Unit
2012
21−foreign import postMessageToWorkerWithTransfer
22− ∷ ∀ toWorker toBoss. toWorker → Array Transferable → Worker toWorker toBoss → Effect Unit
23−
2413foreign import terminate ∷ ∀ toWorker toBoss. Worker toWorker toBoss → Effect Unit
src/Yoga/WebProletarian/Runtime.jsdeleted−5
@@ -1,5 +0,0 @@
1−export const requestAnimationFrame = callback => () => globalThis.requestAnimationFrame(callback);
2−export const cancelAnimationFrame = handle => () => globalThis.cancelAnimationFrame(handle);
3−export const supportsAnimationFrame = () => typeof globalThis.requestAnimationFrame === "function";
4−export const monotonicNowMilliseconds = () => globalThis.performance.now();
5−export const supportsWorkers = () => typeof globalThis.Worker === "function";
src/Yoga/WebProletarian/Runtime.pursdeleted−17
@@ -1,17 +0,0 @@
1−module Yoga.WebProletarian.Runtime
2− ( requestAnimationFrame
3− , cancelAnimationFrame
4− , supportsAnimationFrame
5− , monotonicNowMilliseconds
6− , supportsWorkers
7− ) where
8−
9−import Prelude
10−
11−import Effect (Effect)
12−
13−foreign import requestAnimationFrame :: Effect Unit -> Effect Int
14−foreign import cancelAnimationFrame :: Int -> Effect Unit
15−foreign import supportsAnimationFrame :: Effect Boolean
16−foreign import monotonicNowMilliseconds :: Effect Number
17−foreign import supportsWorkers :: Effect Boolean
src/Yoga/WebProletarian/Transferable.jsdeleted−4
@@ -1,4 +0,0 @@
1−export const transferControlToOffscreenImpl = (canvas) => () => canvas.transferControlToOffscreen()
2−
3−export const supportsTransferControlToOffscreen = element => () =>
4− typeof element.transferControlToOffscreen === "function";
src/Yoga/WebProletarian/Transferable.pursdeleted−22
@@ -1,22 +0,0 @@
1−module Yoga.WebProletarian.Transferable where
2−
3−import Effect (Effect)
4−import Unsafe.Coerce (unsafeCoerce)
5−import Web.DOM.Element (Element)
6−import Web.HTML.HTMLCanvasElement (HTMLCanvasElement)
7−
8−foreign import data Transferable ∷ Type
9−foreign import data OffscreenCanvas ∷ Type
10−
11−transferControlToOffscreen ∷ HTMLCanvasElement → Effect OffscreenCanvas
12−transferControlToOffscreen = transferControlToOffscreenImpl
13−
14−foreign import transferControlToOffscreenImpl ∷ HTMLCanvasElement → Effect OffscreenCanvas
15−
16−offscreenCanvasToTransferable ∷ OffscreenCanvas → Transferable
17−offscreenCanvasToTransferable = unsafeCoerce
18−
19−unsafeToTransferable ∷ ∀ a. a → Transferable
20−unsafeToTransferable = unsafeCoerce
21−
22−foreign import supportsTransferControlToOffscreen ∷ Element → Effect Boolean
src/Yoga/WebProletarian/Vite.jsdeleted−11
@@ -1,11 +0,0 @@
1−import { workers, textAssets } from "virtual:yoga-web-proletarian";
2−
3−export const createWorker = key => options => () => {
4− if (!Object.prototype.hasOwnProperty.call(workers, key)) throw new Error(`Unknown configured worker: ${key}`);
5− return new workers[key](options);
6−};
7−
8−export const textAsset = key => {
9− if (!Object.prototype.hasOwnProperty.call(textAssets, key)) throw new Error(`Unknown configured text asset: ${key}`);
10− return textAssets[key];
11−};
src/Yoga/WebProletarian/Vite.pursdeleted−9
@@ -1,9 +0,0 @@
1−-- | Factories and immutable text assets supplied by the package's Vite plugin.
2−-- | The application configures entry points and assets in its bundler config.
3−module Yoga.WebProletarian.Vite (createWorker, textAsset) where
4−
5−import Effect (Effect)
6−import Yoga.WebProletarian.Types (Worker)
7−
8−foreign import createWorker :: forall request response. String -> { name :: String } -> Effect (Worker request response)
9−foreign import textAsset :: String -> String
src/Yoga/WebWorker.js+4−22
@@ -1,28 +1,10 @@
11export const subscribe = handler => () => {
2− const listener = event => handler(event.data)();
3− addEventListener("message", listener);
4− return () => removeEventListener("message", listener);
5−};
2+ addEventListener("message", (event) => {
3+ handler(event.data)();
4+ })
5+}
66
77export const quit = () => close()
88
99export const postMessageToBoss = data => () => postMessage(data)
1010
11−export const onFailure = handler => () => {
12− const onError = event => {
13− event.preventDefault();
14− handler(event.message || "Worker execution failed")();
15− };
16− const onRejection = event => {
17− event.preventDefault();
18− const reason = event.reason;
19− handler(reason instanceof Error ? reason.message : String(reason))();
20− };
21− addEventListener("error", onError);
22− addEventListener("unhandledrejection", onRejection);
23− return () => {
24− removeEventListener("error", onError);
25− removeEventListener("unhandledrejection", onRejection);
26− };
27−};
28−
src/Yoga/WebWorker.purs+1−5
@@ -3,13 +3,9 @@ module Yoga.WebWorker where
33import Prelude
44import Effect (Effect)
55
6−foreign import subscribe :: forall toWorker. (toWorker -> Effect Unit) -> Effect (Effect Unit)
6+foreign import subscribe :: forall toWorker. (toWorker -> Effect Unit) -> Effect Unit
77
88foreign import quit :: Effect Unit
99
1010foreign import postMessageToBoss :: forall toBoss. toBoss -> Effect Unit
1111
12−-- | Handle worker-global exceptions and rejected promises. Installing this
13−-- | handler consumes their default reporting; disposing restores it.
14−foreign import onFailure :: (String -> Effect Unit) -> Effect (Effect Unit)
15−
vite.mjsdeleted−34
@@ -1,34 +0,0 @@
1−import { readFileSync } from "node:fs";
2−import { resolve } from "node:path";
3−
4−// Entries are ordinary compiled-main boot files. No application source is
5−// interpreted here; Vite owns worker bundling, including its inline fallback.
6−export function webProletarian({ workers = {}, textAssets = {}, inline = true } = {}) {
7− const virtualId = "virtual:yoga-web-proletarian";
8− const resolvedId = `\0${virtualId}`;
9− return {
10− name: "yoga-web-proletarian",
11− resolveId(id) {
12− if (id === virtualId) return resolvedId;
13− },
14− load(id) {
15− if (id !== resolvedId) return;
16− const imports = [];
17− const constructors = [];
18− for (const [key, entry] of Object.entries(workers)) {
19− const path = resolve(entry);
20− this.addWatchFile(path);
21− const local = `Worker${imports.length}`;
22− imports.push(`import ${local} from ${JSON.stringify(`${path}?worker${inline ? "&inline" : ""}`)};`);
23− constructors.push(`[${JSON.stringify(key)}]: ${local}`);
24− }
25− const texts = [];
26− for (const [key, entry] of Object.entries(textAssets)) {
27− const path = resolve(entry);
28− this.addWatchFile(path);
29− texts.push(`[${JSON.stringify(key)}]: ${JSON.stringify(readFileSync(path, "utf8"))}`);
30− }
31− return `${imports.join("\n")}\nexport const workers = {${constructors.join(",")}};\nexport const textAssets = {${texts.join(",")}};`;
32− },
33− };
34−}