git.iko.soy/rowtype-yoga/purescript-yoga-opentelemetry-om
on main help sign in
4 files changed+713−22
since splitsnapshots
unifiedsplit
README.md+1 spago.lock+652−11 spago.yaml+13−4 src/Yoga/OpenTelemetry/OpenTelemetryOm.purs+47−7
README.mdnew file+1
@@ -0,0 +1 @@
1+
spago.lock+652−11
@@ -18,7 +18,7 @@
1818 "yoga-om": ">=1.3.0 <2.0.0"
1919 },
2020 {
21− "yoga-opentelemetry": ">=0.1.0 <0.2.0"
21+ "yoga-opentelemetry": ">=0.2.0 <0.3.0"
2222 }
2323 ]
2424 },
@@ -27,13 +27,617 @@
2727 }
2828 }
2929 },
30− "extra_packages": {}
30+ "package_set": {
31+ "address": {
32+ "registry": "73.0.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.4.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+ "signal": "13.0.0",
463+ "simple-emitter": "3.0.1",
464+ "simple-i18n": "2.0.1",
465+ "simple-json": "9.0.0",
466+ "simple-json-generics": "0.2.1",
467+ "simple-ulid": "3.0.0",
468+ "sized-matrices": "1.0.0",
469+ "sized-vectors": "5.0.2",
470+ "slug": "3.2.0",
471+ "small-ffi": "4.0.1",
472+ "soundfonts": "4.1.0",
473+ "sparse-matrices": "2.0.1",
474+ "sparse-polynomials": "3.0.1",
475+ "spec": "8.1.1",
476+ "spec-discovery": "8.4.0",
477+ "spec-mocha": "5.1.1",
478+ "spec-node": "0.0.3",
479+ "spec-quickcheck": "5.0.2",
480+ "spec-reporter-xunit": "0.7.1",
481+ "splitmix": "2.1.0",
482+ "ssrs": "1.0.0",
483+ "st": "6.2.0",
484+ "statistics": "0.3.2",
485+ "strictlypositiveint": "1.0.1",
486+ "string-parsers": "8.0.0",
487+ "strings": "6.0.1",
488+ "strings-extra": "4.0.0",
489+ "stringutils": "0.0.12",
490+ "structured-logging": "1.0.0",
491+ "substitute": "0.2.3",
492+ "supply": "0.2.0",
493+ "svg-parser": "3.0.0",
494+ "systemd-journald": "0.3.0",
495+ "tagged": "4.0.2",
496+ "tailrec": "6.1.0",
497+ "tanstack-query": "2.0.0",
498+ "tecton": "0.2.1",
499+ "tecton-halogen": "0.2.0",
500+ "test-unit": "17.0.0",
501+ "text-formatting": "0.1.0",
502+ "thermite": "6.3.1",
503+ "thermite-dom": "0.3.1",
504+ "these": "6.0.0",
505+ "threading": "0.0.3",
506+ "tidy": "0.11.1",
507+ "tidy-codegen": "4.0.1",
508+ "tldr": "0.0.0",
509+ "toestand": "0.9.0",
510+ "transformation-matrix": "1.0.1",
511+ "transformers": "6.1.0",
512+ "transit": "1.0.0",
513+ "tree-rose": "4.0.2",
514+ "trivial-unfold": "0.5.0",
515+ "ts-bridge": "4.0.0",
516+ "tuples": "7.0.0",
517+ "two-or-more": "1.0.0",
518+ "type-equality": "4.0.1",
519+ "typedenv": "2.0.1",
520+ "typelevel": "6.0.0",
521+ "typelevel-lists": "2.1.0",
522+ "typelevel-peano": "1.0.1",
523+ "typelevel-prelude": "7.0.0",
524+ "typelevel-regex": "0.0.3",
525+ "typelevel-rows": "0.1.0",
526+ "typisch": "0.4.0",
527+ "uint": "7.0.0",
528+ "ulid": "3.0.1",
529+ "uncurried-transformers": "1.1.0",
530+ "undefined": "2.0.0",
531+ "undefined-is-not-a-problem": "1.1.0",
532+ "unfoldable": "6.0.0",
533+ "unicode": "6.0.0",
534+ "unique": "0.6.1",
535+ "unlift": "1.0.1",
536+ "unordered-collections": "3.1.0",
537+ "unsafe-coerce": "6.0.0",
538+ "unsafe-reference": "5.0.0",
539+ "untagged-to-tagged": "0.1.4",
540+ "untagged-union": "1.0.0",
541+ "uri": "9.0.0",
542+ "url-immutable": "1.0.0",
543+ "url-regex-safe": "0.1.1",
544+ "uuid": "9.0.0",
545+ "uuidv4": "1.0.0",
546+ "validation": "6.0.0",
547+ "variant": "8.0.0",
548+ "variant-encodings": "2.0.0",
549+ "variant-gen": "1.0.0",
550+ "vectorfield": "1.0.1",
551+ "vectors": "2.1.0",
552+ "versions": "7.0.0",
553+ "visx": "0.0.2",
554+ "vitest": "2.0.0",
555+ "web-clipboard": "6.0.0",
556+ "web-cssom": "2.0.0",
557+ "web-cssom-view": "0.1.0",
558+ "web-dom": "6.0.0",
559+ "web-dom-parser": "8.0.0",
560+ "web-dom-xpath": "3.0.0",
561+ "web-encoding": "3.0.0",
562+ "web-events": "4.0.0",
563+ "web-fetch": "4.0.1",
564+ "web-file": "4.0.0",
565+ "web-geometry": "0.1.0",
566+ "web-html": "4.1.1",
567+ "web-pointerevents": "2.0.0",
568+ "web-proletarian": "1.0.0",
569+ "web-promise": "3.2.0",
570+ "web-resize-observer": "2.1.0",
571+ "web-router": "1.0.0",
572+ "web-socket": "4.0.0",
573+ "web-storage": "5.0.0",
574+ "web-streams": "4.0.0",
575+ "web-touchevents": "4.0.0",
576+ "web-uievents": "5.0.0",
577+ "web-url": "2.0.0",
578+ "web-workers": "1.1.0",
579+ "web-xhr": "5.0.1",
580+ "webb-aff-list": "0.0.2",
581+ "webb-array": "0.0.2",
582+ "webb-channel": "0.0.3",
583+ "webb-commandline": "0.0.3",
584+ "webb-directory": "0.0.7",
585+ "webb-file": "0.0.1",
586+ "webb-map": "0.0.1",
587+ "webb-monad": "0.0.2",
588+ "webb-mutex": "0.0.7",
589+ "webb-parsing": "0.0.5",
590+ "webb-random": "0.0.1",
591+ "webb-refer": "0.0.3",
592+ "webb-set": "0.0.1",
593+ "webb-slot": "0.0.1",
594+ "webb-stateful": "0.0.3",
595+ "webb-string": "0.0.1",
596+ "webb-test": "0.0.1",
597+ "webb-thread": "0.0.2",
598+ "webb-writer": "0.0.3",
599+ "webextension-polyfill": "0.1.0",
600+ "webgpu": "0.0.1",
601+ "which": "2.0.0",
602+ "whine-core": "0.0.33",
603+ "xterm": "1.0.0",
604+ "yaml-next": "3.1.1",
605+ "yoga-fetch": "1.0.1",
606+ "yoga-json": "5.1.0",
607+ "yoga-om": "0.1.0",
608+ "yoga-postgres": "6.0.0",
609+ "yoga-react-dom": "1.0.1",
610+ "yoga-redis": "0.1.0",
611+ "yoga-sql-types": "0.1.0",
612+ "yoga-subtlecrypto": "0.1.0",
613+ "yoga-test-docker": "0.1.0",
614+ "yoga-tree": "1.0.0",
615+ "yoga-tree-svg": "0.1.0",
616+ "yoga-tree-utils": "1.0.0",
617+ "z3": "0.0.2",
618+ "zipperarray": "2.0.0"
619+ }
620+ },
621+ "extra_packages": {
622+ "yoga-om": {
623+ "path": "../purescript-yoga-om"
624+ },
625+ "yoga-om-layer": {
626+ "path": "../purescript-yoga-om-layer"
627+ },
628+ "yoga-opentelemetry": {
629+ "path": "../purescript-yoga-opentelemetry"
630+ },
631+ "yoga-options": {
632+ "path": "../purescript-yoga-options"
633+ }
634+ }
31635 },
32636 "packages": {
33637 "aff": {
34638 "type": "registry",
35− "version": "7.1.0",
36− "integrity": "sha256-/nOpDQVnKIoP1pQ1ZZBYpadK0TuMlG4WwufGzJpsfD0=",
639+ "version": "8.0.0",
640+ "integrity": "sha256-9BRIrSdRoYybfiUmBqgKJ66cPqxYHb277bVWQMn/9sg=",
37641 "dependencies": [
38642 "control",
39643 "datetime",
@@ -485,6 +1089,16 @@
4851089 "unfoldable"
4861090 ]
4871091 },
1092+ "nullable": {
1093+ "type": "registry",
1094+ "version": "6.0.0",
1095+ "integrity": "sha256-CDAZk+L9Sc0GCFTkE8n+qdp4Ys8avvnkU+m2hVALt7M=",
1096+ "dependencies": [
1097+ "functions",
1098+ "maybe",
1099+ "prelude"
1100+ ]
1101+ },
4881102 "numbers": {
4891103 "type": "registry",
4901104 "version": "9.0.1",
@@ -769,9 +1383,8 @@
7691383 ]
7701384 },
7711385 "yoga-om": {
772− "type": "registry",
773− "version": "1.3.0",
774− "integrity": "sha256-KWJXUgLTj7MpWTiYldF56WFYxQ/aNqyGp81T2B9fQ4k=",
1386+ "type": "local",
1387+ "path": "../purescript-yoga-om",
7751388 "dependencies": [
7761389 "aff",
7771390 "aff-retry",
@@ -783,6 +1396,7 @@
7831396 "either",
7841397 "exceptions",
7851398 "functions",
1399+ "heterogeneous",
7861400 "maybe",
7871401 "newtype",
7881402 "parallel",
@@ -799,10 +1413,35 @@
7991413 "variant"
8001414 ]
8011415 },
1416+ "yoga-om-layer": {
1417+ "type": "local",
1418+ "path": "../purescript-yoga-om-layer",
1419+ "dependencies": [
1420+ "aff",
1421+ "aff-retry",
1422+ "arrays",
1423+ "effect",
1424+ "exceptions",
1425+ "foldable-traversable",
1426+ "maybe",
1427+ "nullable",
1428+ "ordered-collections",
1429+ "parallel",
1430+ "prelude",
1431+ "record",
1432+ "record-studio",
1433+ "refs",
1434+ "transformers",
1435+ "type-equality",
1436+ "typelevel-prelude",
1437+ "unsafe-coerce",
1438+ "variant",
1439+ "yoga-om"
1440+ ]
1441+ },
8021442 "yoga-opentelemetry": {
803− "type": "registry",
804− "version": "0.1.0",
805− "integrity": "sha256-ZefPa6l1sMBaihxFGXyAzTgLYIPT9yGq8SmLozWsJSo=",
1443+ "type": "local",
1444+ "path": "../purescript-yoga-opentelemetry",
8061445 "dependencies": [
8071446 "aff",
8081447 "datetime",
@@ -814,7 +1453,9 @@
8141453 "newtype",
8151454 "prelude",
8161455 "typelevel-prelude",
817− "unsafe-coerce"
1456+ "unsafe-coerce",
1457+ "yoga-om",
1458+ "yoga-om-layer"
8181459 ]
8191460 }
8201461 }
spago.yaml+13−4
@@ -1,4 +1,15 @@
1−workspace: {}
1+workspace:
2+ packageSet:
3+ registry: 73.0.0
4+ extraPackages:
5+ yoga-om:
6+ path: ../purescript-yoga-om
7+ yoga-opentelemetry:
8+ path: ../purescript-yoga-opentelemetry
9+ yoga-om-layer:
10+ path: ../purescript-yoga-om-layer
11+ yoga-options:
12+ path: ../purescript-yoga-options
213
314package:
415 name: yoga-opentelemetry-om
@@ -9,10 +20,8 @@ package:
920 githubOwner: rowtype-yoga
1021 githubRepo: purescript-yoga-opentelemetry-om
1122 dependencies:
12− - aff: ">=7.1.0 <8.0.0"
1323 - effect: ">=4.0.0 <5.0.0"
1424 - prelude: ">=6.0.2 <7.0.0"
1525 - typelevel-prelude: ">=7.0.0 <8.0.0"
1626 - yoga-om: ">=1.3.0 <2.0.0"
17− - yoga-om-layer: ">=1.0.6 <2.0.0"
18− - yoga-opentelemetry: ">=0.1.0 <0.2.0"
27+ - yoga-opentelemetry: ">=0.2.0 <0.3.0"
src/Yoga/OpenTelemetry/OpenTelemetryOm.purs+47−7
@@ -7,16 +7,21 @@ module Yoga.OpenTelemetry.OpenTelemetryOm
77 , setStatus
88 , recordException
99 , withSpan
10+ , withSpanAttrs
11+ , SpanCtx
1012 ) where
1113
1214import Prelude
1315
16+import Control.Monad.Error.Class (catchError, throwError)
17+import Control.Monad.Reader (local)
18+import Data.Maybe (Maybe(..))
1419import Effect.Class (liftEffect)
1520import Yoga.OpenTelemetry.OpenTelemetry as OTel
1621import Type.Row.Homogeneous (class Homogeneous)
1722import Yoga.Om as Om
1823
19−-- All tracing functions automatically get tracer from Om context!
24+type SpanCtx r = (tracer :: OTel.Tracer, currentSpan :: Maybe OTel.Span | r)
2025
2126startSpan :: forall r err. String -> Om.Om { tracer :: OTel.Tracer | r } err OTel.Span
2227startSpan name = do
@@ -43,10 +48,45 @@ setStatus status span = liftEffect $ OTel.setStatus status span
4348recordException :: forall r err. String -> OTel.Span -> Om.Om r err Unit
4449recordException error span = liftEffect $ OTel.recordException error span
4550
46−-- Helper: Run an action within a span (automatically ends it)
47−withSpan :: forall r err a. String -> Om.Om { tracer :: OTel.Tracer | r } err a -> Om.Om { tracer :: OTel.Tracer | r } err a
51+withSpan :: forall r err a. String -> Om.Om { | SpanCtx r } err a -> Om.Om { | SpanCtx r } err a
4852withSpan name action = do
49− span <- startSpan name
50− result <- action
51− endSpan span
52− pure result
53+ { tracer, currentSpan } <- Om.ask
54+ span <- createSpan tracer currentSpan
55+ catchError (activate span action <* ok span) (fail span)
56+ where
57+ createSpan tracer = case _ of
58+ Nothing -> OTel.startSpan (OTel.SpanName name) tracer # liftEffect
59+ Just parent -> OTel.startChildSpan (OTel.SpanName name) parent tracer # liftEffect
60+ activate span = local (_ { currentSpan = Just span })
61+ ok span = liftEffect do
62+ OTel.setStatus OTel.StatusOk span
63+ OTel.endSpan span
64+ fail span err = do
65+ liftEffect do
66+ OTel.recordException name span
67+ OTel.setStatus OTel.StatusError span
68+ OTel.endSpan span
69+ throwError err
70+
71+withSpanAttrs :: forall r attrs err a. Homogeneous attrs OTel.AttributeValue => String -> { | attrs } -> Om.Om { | SpanCtx r } err a -> Om.Om { | SpanCtx r } err a
72+withSpanAttrs name attrs action = do
73+ { tracer, currentSpan } <- Om.ask
74+ span <- createSpan tracer currentSpan
75+ catchError (activate span action <* ok span) (fail span)
76+ where
77+ createSpan tracer parent = liftEffect do
78+ span <- case parent of
79+ Nothing -> OTel.startSpan (OTel.SpanName name) tracer
80+ Just p -> OTel.startChildSpan (OTel.SpanName name) p tracer
81+ OTel.setAttributes attrs span
82+ pure span
83+ activate span = local (_ { currentSpan = Just span })
84+ ok span = liftEffect do
85+ OTel.setStatus OTel.StatusOk span
86+ OTel.endSpan span
87+ fail span err = do
88+ liftEffect do
89+ OTel.recordException name span
90+ OTel.setStatus OTel.StatusError span
91+ OTel.endSpan span
92+ throwError err