skill-universe 1.1.0

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 (334) hide show
  1. package/README.md +24 -0
  2. package/bin/skillc.mjs +3 -0
  3. package/build/dev/javascript/argv/_gleam_artefacts/argv.cache +0 -0
  4. package/build/dev/javascript/argv/_gleam_artefacts/argv.cache_inline +0 -0
  5. package/build/dev/javascript/argv/_gleam_artefacts/argv.cache_meta +0 -0
  6. package/build/dev/javascript/argv/argv.erl +12 -0
  7. package/build/dev/javascript/argv/argv.mjs +31 -0
  8. package/build/dev/javascript/argv/argv_ffi.erl +27 -0
  9. package/build/dev/javascript/argv/argv_ffi.mjs +20 -0
  10. package/build/dev/javascript/argv/gleam.mjs +1 -0
  11. package/build/dev/javascript/filepath/_gleam_artefacts/filepath.cache +0 -0
  12. package/build/dev/javascript/filepath/_gleam_artefacts/filepath.cache_inline +0 -0
  13. package/build/dev/javascript/filepath/_gleam_artefacts/filepath.cache_meta +0 -0
  14. package/build/dev/javascript/filepath/filepath.erl +425 -0
  15. package/build/dev/javascript/filepath/filepath.mjs +529 -0
  16. package/build/dev/javascript/filepath/filepath_ffi.erl +9 -0
  17. package/build/dev/javascript/filepath/filepath_ffi.mjs +6 -0
  18. package/build/dev/javascript/filepath/gleam.mjs +1 -0
  19. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache +0 -0
  20. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_inline +0 -0
  21. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta +0 -0
  22. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache +0 -0
  23. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_inline +0 -0
  24. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta +0 -0
  25. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache +0 -0
  26. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache_inline +0 -0
  27. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache_meta +0 -0
  28. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache +0 -0
  29. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_inline +0 -0
  30. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta +0 -0
  31. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache +0 -0
  32. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_inline +0 -0
  33. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta +0 -0
  34. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache +0 -0
  35. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache_inline +0 -0
  36. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache_meta +0 -0
  37. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache +0 -0
  38. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache_inline +0 -0
  39. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta +0 -0
  40. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache +0 -0
  41. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache_inline +0 -0
  42. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta +0 -0
  43. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache +0 -0
  44. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache_inline +0 -0
  45. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta +0 -0
  46. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache +0 -0
  47. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache_inline +0 -0
  48. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta +0 -0
  49. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache +0 -0
  50. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache_inline +0 -0
  51. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta +0 -0
  52. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache +0 -0
  53. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache_inline +0 -0
  54. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta +0 -0
  55. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache +0 -0
  56. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache_inline +0 -0
  57. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta +0 -0
  58. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache +0 -0
  59. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_inline +0 -0
  60. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta +0 -0
  61. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache +0 -0
  62. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache_inline +0 -0
  63. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta +0 -0
  64. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache +0 -0
  65. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache_inline +0 -0
  66. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta +0 -0
  67. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache +0 -0
  68. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache_inline +0 -0
  69. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta +0 -0
  70. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache +0 -0
  71. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache_inline +0 -0
  72. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache_meta +0 -0
  73. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache +0 -0
  74. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_inline +0 -0
  75. package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta +0 -0
  76. package/build/dev/javascript/gleam_stdlib/dict.mjs +710 -0
  77. package/build/dev/javascript/gleam_stdlib/gleam/bit_array.mjs +285 -0
  78. package/build/dev/javascript/gleam_stdlib/gleam/bool.mjs +313 -0
  79. package/build/dev/javascript/gleam_stdlib/gleam/bytes_tree.mjs +225 -0
  80. package/build/dev/javascript/gleam_stdlib/gleam/dict.mjs +456 -0
  81. package/build/dev/javascript/gleam_stdlib/gleam/dynamic/decode.mjs +985 -0
  82. package/build/dev/javascript/gleam_stdlib/gleam/dynamic.mjs +35 -0
  83. package/build/dev/javascript/gleam_stdlib/gleam/float.mjs +572 -0
  84. package/build/dev/javascript/gleam_stdlib/gleam/function.mjs +6 -0
  85. package/build/dev/javascript/gleam_stdlib/gleam/int.mjs +832 -0
  86. package/build/dev/javascript/gleam_stdlib/gleam/io.mjs +8 -0
  87. package/build/dev/javascript/gleam_stdlib/gleam/list.mjs +3160 -0
  88. package/build/dev/javascript/gleam_stdlib/gleam/option.mjs +418 -0
  89. package/build/dev/javascript/gleam_stdlib/gleam/order.mjs +178 -0
  90. package/build/dev/javascript/gleam_stdlib/gleam/pair.mjs +102 -0
  91. package/build/dev/javascript/gleam_stdlib/gleam/result.mjs +480 -0
  92. package/build/dev/javascript/gleam_stdlib/gleam/set.mjs +416 -0
  93. package/build/dev/javascript/gleam_stdlib/gleam/string.mjs +723 -0
  94. package/build/dev/javascript/gleam_stdlib/gleam/string_tree.mjs +133 -0
  95. package/build/dev/javascript/gleam_stdlib/gleam/uri.mjs +1155 -0
  96. package/build/dev/javascript/gleam_stdlib/gleam.mjs +1 -0
  97. package/build/dev/javascript/gleam_stdlib/gleam@bit_array.erl +347 -0
  98. package/build/dev/javascript/gleam_stdlib/gleam@bool.erl +352 -0
  99. package/build/dev/javascript/gleam_stdlib/gleam@bytes_tree.erl +211 -0
  100. package/build/dev/javascript/gleam_stdlib/gleam@dict.erl +521 -0
  101. package/build/dev/javascript/gleam_stdlib/gleam@dynamic.erl +106 -0
  102. package/build/dev/javascript/gleam_stdlib/gleam@dynamic@decode.erl +1112 -0
  103. package/build/dev/javascript/gleam_stdlib/gleam@float.erl +764 -0
  104. package/build/dev/javascript/gleam_stdlib/gleam@function.erl +18 -0
  105. package/build/dev/javascript/gleam_stdlib/gleam@int.erl +1004 -0
  106. package/build/dev/javascript/gleam_stdlib/gleam@io.erl +80 -0
  107. package/build/dev/javascript/gleam_stdlib/gleam@list.erl +2832 -0
  108. package/build/dev/javascript/gleam_stdlib/gleam@option.erl +413 -0
  109. package/build/dev/javascript/gleam_stdlib/gleam@order.erl +200 -0
  110. package/build/dev/javascript/gleam_stdlib/gleam@pair.erl +110 -0
  111. package/build/dev/javascript/gleam_stdlib/gleam@result.erl +532 -0
  112. package/build/dev/javascript/gleam_stdlib/gleam@set.erl +433 -0
  113. package/build/dev/javascript/gleam_stdlib/gleam@string.erl +1012 -0
  114. package/build/dev/javascript/gleam_stdlib/gleam@string_tree.erl +207 -0
  115. package/build/dev/javascript/gleam_stdlib/gleam@uri.erl +1049 -0
  116. package/build/dev/javascript/gleam_stdlib/gleam_stdlib.erl +529 -0
  117. package/build/dev/javascript/gleam_stdlib/gleam_stdlib.mjs +1050 -0
  118. package/build/dev/javascript/gleam_version +1 -0
  119. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit.cache +0 -0
  120. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit.cache_inline +0 -0
  121. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit.cache_meta +0 -0
  122. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@gleam_panic.cache +0 -0
  123. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@gleam_panic.cache_inline +0 -0
  124. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@gleam_panic.cache_meta +0 -0
  125. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@reporting.cache +0 -0
  126. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@reporting.cache_inline +0 -0
  127. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@reporting.cache_meta +0 -0
  128. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@should.cache +0 -0
  129. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@should.cache_inline +0 -0
  130. package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@should.cache_meta +0 -0
  131. package/build/dev/javascript/gleeunit/gleam.mjs +1 -0
  132. package/build/dev/javascript/gleeunit/gleeunit/internal/gleam_panic.mjs +180 -0
  133. package/build/dev/javascript/gleeunit/gleeunit/internal/gleeunit_gleam_panic_ffi.erl +49 -0
  134. package/build/dev/javascript/gleeunit/gleeunit/internal/gleeunit_gleam_panic_ffi.mjs +91 -0
  135. package/build/dev/javascript/gleeunit/gleeunit/internal/reporting.mjs +256 -0
  136. package/build/dev/javascript/gleeunit/gleeunit/should.mjs +135 -0
  137. package/build/dev/javascript/gleeunit/gleeunit.erl +89 -0
  138. package/build/dev/javascript/gleeunit/gleeunit.mjs +62 -0
  139. package/build/dev/javascript/gleeunit/gleeunit@internal@gleam_panic.erl +56 -0
  140. package/build/dev/javascript/gleeunit/gleeunit@internal@reporting.erl +343 -0
  141. package/build/dev/javascript/gleeunit/gleeunit@should.erl +153 -0
  142. package/build/dev/javascript/gleeunit/gleeunit_ffi.erl +21 -0
  143. package/build/dev/javascript/gleeunit/gleeunit_ffi.mjs +100 -0
  144. package/build/dev/javascript/gleeunit/gleeunit_progress.erl +72 -0
  145. package/build/dev/javascript/prelude.mjs +1575 -0
  146. package/build/dev/javascript/simplifile/_gleam_artefacts/simplifile.cache +0 -0
  147. package/build/dev/javascript/simplifile/_gleam_artefacts/simplifile.cache_inline +0 -0
  148. package/build/dev/javascript/simplifile/_gleam_artefacts/simplifile.cache_meta +0 -0
  149. package/build/dev/javascript/simplifile/gleam.mjs +1 -0
  150. package/build/dev/javascript/simplifile/simplifile.erl +893 -0
  151. package/build/dev/javascript/simplifile/simplifile.mjs +893 -0
  152. package/build/dev/javascript/simplifile/simplifile_erl.erl +244 -0
  153. package/build/dev/javascript/simplifile/simplifile_js.mjs +400 -0
  154. package/build/dev/javascript/skillc/_gleam_artefacts/cli_test.cache +0 -0
  155. package/build/dev/javascript/skillc/_gleam_artefacts/cli_test.cache_inline +0 -0
  156. package/build/dev/javascript/skillc/_gleam_artefacts/cli_test.cache_meta +0 -0
  157. package/build/dev/javascript/skillc/_gleam_artefacts/cli_test.cache_warnings +0 -0
  158. package/build/dev/javascript/skillc/_gleam_artefacts/compiler_test.cache +0 -0
  159. package/build/dev/javascript/skillc/_gleam_artefacts/compiler_test.cache_inline +0 -0
  160. package/build/dev/javascript/skillc/_gleam_artefacts/compiler_test.cache_meta +0 -0
  161. package/build/dev/javascript/skillc/_gleam_artefacts/compiler_test.cache_warnings +0 -0
  162. package/build/dev/javascript/skillc/_gleam_artefacts/config_test.cache +0 -0
  163. package/build/dev/javascript/skillc/_gleam_artefacts/config_test.cache_inline +0 -0
  164. package/build/dev/javascript/skillc/_gleam_artefacts/config_test.cache_meta +0 -0
  165. package/build/dev/javascript/skillc/_gleam_artefacts/config_test.cache_warnings +0 -0
  166. package/build/dev/javascript/skillc/_gleam_artefacts/importer_test.cache +0 -0
  167. package/build/dev/javascript/skillc/_gleam_artefacts/importer_test.cache_inline +0 -0
  168. package/build/dev/javascript/skillc/_gleam_artefacts/importer_test.cache_meta +0 -0
  169. package/build/dev/javascript/skillc/_gleam_artefacts/importer_test.cache_warnings +0 -0
  170. package/build/dev/javascript/skillc/_gleam_artefacts/parser_test.cache +0 -0
  171. package/build/dev/javascript/skillc/_gleam_artefacts/parser_test.cache_inline +0 -0
  172. package/build/dev/javascript/skillc/_gleam_artefacts/parser_test.cache_meta +0 -0
  173. package/build/dev/javascript/skillc/_gleam_artefacts/parser_test.cache_warnings +0 -0
  174. package/build/dev/javascript/skillc/_gleam_artefacts/path_test.cache +0 -0
  175. package/build/dev/javascript/skillc/_gleam_artefacts/path_test.cache_inline +0 -0
  176. package/build/dev/javascript/skillc/_gleam_artefacts/path_test.cache_meta +0 -0
  177. package/build/dev/javascript/skillc/_gleam_artefacts/path_test.cache_warnings +0 -0
  178. package/build/dev/javascript/skillc/_gleam_artefacts/provider_test.cache +0 -0
  179. package/build/dev/javascript/skillc/_gleam_artefacts/provider_test.cache_inline +0 -0
  180. package/build/dev/javascript/skillc/_gleam_artefacts/provider_test.cache_meta +0 -0
  181. package/build/dev/javascript/skillc/_gleam_artefacts/provider_test.cache_warnings +0 -0
  182. package/build/dev/javascript/skillc/_gleam_artefacts/registry_test.cache +0 -0
  183. package/build/dev/javascript/skillc/_gleam_artefacts/registry_test.cache_inline +0 -0
  184. package/build/dev/javascript/skillc/_gleam_artefacts/registry_test.cache_meta +0 -0
  185. package/build/dev/javascript/skillc/_gleam_artefacts/registry_test.cache_warnings +0 -0
  186. package/build/dev/javascript/skillc/_gleam_artefacts/scaffold_test.cache +0 -0
  187. package/build/dev/javascript/skillc/_gleam_artefacts/scaffold_test.cache_inline +0 -0
  188. package/build/dev/javascript/skillc/_gleam_artefacts/scaffold_test.cache_meta +0 -0
  189. package/build/dev/javascript/skillc/_gleam_artefacts/scaffold_test.cache_warnings +0 -0
  190. package/build/dev/javascript/skillc/_gleam_artefacts/skillc.cache +0 -0
  191. package/build/dev/javascript/skillc/_gleam_artefacts/skillc.cache_inline +0 -0
  192. package/build/dev/javascript/skillc/_gleam_artefacts/skillc.cache_meta +0 -0
  193. package/build/dev/javascript/skillc/_gleam_artefacts/skillc.cache_warnings +0 -0
  194. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@compiler.cache +0 -0
  195. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@compiler.cache_inline +0 -0
  196. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@compiler.cache_meta +0 -0
  197. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@compiler.cache_warnings +0 -0
  198. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@config.cache +0 -0
  199. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@config.cache_inline +0 -0
  200. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@config.cache_meta +0 -0
  201. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@config.cache_warnings +0 -0
  202. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@error.cache +0 -0
  203. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@error.cache_inline +0 -0
  204. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@error.cache_meta +0 -0
  205. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@error.cache_warnings +0 -0
  206. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@fs.cache +0 -0
  207. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@fs.cache_inline +0 -0
  208. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@fs.cache_meta +0 -0
  209. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@fs.cache_warnings +0 -0
  210. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@importer.cache +0 -0
  211. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@importer.cache_inline +0 -0
  212. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@importer.cache_meta +0 -0
  213. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@importer.cache_warnings +0 -0
  214. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@parser.cache +0 -0
  215. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@parser.cache_inline +0 -0
  216. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@parser.cache_meta +0 -0
  217. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@parser.cache_warnings +0 -0
  218. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@path.cache +0 -0
  219. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@path.cache_inline +0 -0
  220. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@path.cache_meta +0 -0
  221. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@path.cache_warnings +0 -0
  222. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@platform.cache +0 -0
  223. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@platform.cache_inline +0 -0
  224. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@platform.cache_meta +0 -0
  225. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@platform.cache_warnings +0 -0
  226. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@provider.cache +0 -0
  227. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@provider.cache_inline +0 -0
  228. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@provider.cache_meta +0 -0
  229. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@provider.cache_warnings +0 -0
  230. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@registry.cache +0 -0
  231. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@registry.cache_inline +0 -0
  232. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@registry.cache_meta +0 -0
  233. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@registry.cache_warnings +0 -0
  234. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@scaffold.cache +0 -0
  235. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@scaffold.cache_inline +0 -0
  236. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@scaffold.cache_meta +0 -0
  237. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@scaffold.cache_warnings +0 -0
  238. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@semver.cache +0 -0
  239. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@semver.cache_inline +0 -0
  240. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@semver.cache_meta +0 -0
  241. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@semver.cache_warnings +0 -0
  242. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@shell.cache +0 -0
  243. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@shell.cache_inline +0 -0
  244. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@shell.cache_meta +0 -0
  245. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@shell.cache_warnings +0 -0
  246. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@template.cache +0 -0
  247. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@template.cache_inline +0 -0
  248. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@template.cache_meta +0 -0
  249. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@template.cache_warnings +0 -0
  250. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@types.cache +0 -0
  251. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@types.cache_inline +0 -0
  252. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@types.cache_meta +0 -0
  253. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@types.cache_warnings +0 -0
  254. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@version_constraint.cache +0 -0
  255. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@version_constraint.cache_inline +0 -0
  256. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@version_constraint.cache_meta +0 -0
  257. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@version_constraint.cache_warnings +0 -0
  258. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@yaml.cache +0 -0
  259. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@yaml.cache_inline +0 -0
  260. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@yaml.cache_meta +0 -0
  261. package/build/dev/javascript/skillc/_gleam_artefacts/skillc@yaml.cache_warnings +0 -0
  262. package/build/dev/javascript/skillc/_gleam_artefacts/skillc_test.cache +0 -0
  263. package/build/dev/javascript/skillc/_gleam_artefacts/skillc_test.cache_inline +0 -0
  264. package/build/dev/javascript/skillc/_gleam_artefacts/skillc_test.cache_meta +0 -0
  265. package/build/dev/javascript/skillc/_gleam_artefacts/skillc_test.cache_warnings +0 -0
  266. package/build/dev/javascript/skillc/_gleam_artefacts/template_test.cache +0 -0
  267. package/build/dev/javascript/skillc/_gleam_artefacts/template_test.cache_inline +0 -0
  268. package/build/dev/javascript/skillc/_gleam_artefacts/template_test.cache_meta +0 -0
  269. package/build/dev/javascript/skillc/_gleam_artefacts/template_test.cache_warnings +0 -0
  270. package/build/dev/javascript/skillc/_gleam_artefacts/version_constraint_test.cache +0 -0
  271. package/build/dev/javascript/skillc/_gleam_artefacts/version_constraint_test.cache_inline +0 -0
  272. package/build/dev/javascript/skillc/_gleam_artefacts/version_constraint_test.cache_meta +0 -0
  273. package/build/dev/javascript/skillc/_gleam_artefacts/version_constraint_test.cache_warnings +0 -0
  274. package/build/dev/javascript/skillc/cli_test.mjs +461 -0
  275. package/build/dev/javascript/skillc/compiler_test.mjs +3089 -0
  276. package/build/dev/javascript/skillc/config_test.mjs +308 -0
  277. package/build/dev/javascript/skillc/gleam.main.mjs +2 -0
  278. package/build/dev/javascript/skillc/gleam.mjs +1 -0
  279. package/build/dev/javascript/skillc/importer_test.mjs +1643 -0
  280. package/build/dev/javascript/skillc/parser_test.mjs +1601 -0
  281. package/build/dev/javascript/skillc/path_test.mjs +26 -0
  282. package/build/dev/javascript/skillc/provider_test.mjs +221 -0
  283. package/build/dev/javascript/skillc/registry_test.mjs +359 -0
  284. package/build/dev/javascript/skillc/scaffold_test.mjs +405 -0
  285. package/build/dev/javascript/skillc/skillc/compiler.mjs +724 -0
  286. package/build/dev/javascript/skillc/skillc/config.mjs +172 -0
  287. package/build/dev/javascript/skillc/skillc/error.mjs +145 -0
  288. package/build/dev/javascript/skillc/skillc/fs.mjs +40 -0
  289. package/build/dev/javascript/skillc/skillc/importer.mjs +975 -0
  290. package/build/dev/javascript/skillc/skillc/parser.mjs +427 -0
  291. package/build/dev/javascript/skillc/skillc/path.mjs +52 -0
  292. package/build/dev/javascript/skillc/skillc/platform.mjs +44 -0
  293. package/build/dev/javascript/skillc/skillc/provider.mjs +86 -0
  294. package/build/dev/javascript/skillc/skillc/registry.mjs +701 -0
  295. package/build/dev/javascript/skillc/skillc/scaffold.mjs +117 -0
  296. package/build/dev/javascript/skillc/skillc/semver.mjs +293 -0
  297. package/build/dev/javascript/skillc/skillc/shell.mjs +14 -0
  298. package/build/dev/javascript/skillc/skillc/template.mjs +1177 -0
  299. package/build/dev/javascript/skillc/skillc/types.mjs +249 -0
  300. package/build/dev/javascript/skillc/skillc/version_constraint.mjs +290 -0
  301. package/build/dev/javascript/skillc/skillc/yaml.mjs +51 -0
  302. package/build/dev/javascript/skillc/skillc.mjs +873 -0
  303. package/build/dev/javascript/skillc/skillc_ffi.mjs +30 -0
  304. package/build/dev/javascript/skillc/skillc_test.mjs +5 -0
  305. package/build/dev/javascript/skillc/template_test.mjs +1638 -0
  306. package/build/dev/javascript/skillc/version_constraint_test.mjs +1325 -0
  307. package/build/dev/javascript/yay/_gleam_artefacts/yay.cache +0 -0
  308. package/build/dev/javascript/yay/_gleam_artefacts/yay.cache_inline +0 -0
  309. package/build/dev/javascript/yay/_gleam_artefacts/yay.cache_meta +0 -0
  310. package/build/dev/javascript/yay/gleam.mjs +1 -0
  311. package/build/dev/javascript/yay/yaml_ffi.erl +106 -0
  312. package/build/dev/javascript/yay/yaml_ffi.mjs +373 -0
  313. package/build/dev/javascript/yay/yay.erl +1218 -0
  314. package/build/dev/javascript/yay/yay.mjs +1403 -0
  315. package/package.json +28 -0
  316. package/src/skillc/compiler.gleam +561 -0
  317. package/src/skillc/config.gleam +91 -0
  318. package/src/skillc/error.gleam +37 -0
  319. package/src/skillc/fs.gleam +31 -0
  320. package/src/skillc/importer.gleam +709 -0
  321. package/src/skillc/parser.gleam +279 -0
  322. package/src/skillc/path.gleam +30 -0
  323. package/src/skillc/platform.gleam +25 -0
  324. package/src/skillc/provider.gleam +58 -0
  325. package/src/skillc/registry.gleam +472 -0
  326. package/src/skillc/scaffold.gleam +112 -0
  327. package/src/skillc/semver.gleam +165 -0
  328. package/src/skillc/shell.gleam +12 -0
  329. package/src/skillc/template.gleam +885 -0
  330. package/src/skillc/types.gleam +93 -0
  331. package/src/skillc/version_constraint.gleam +163 -0
  332. package/src/skillc/yaml.gleam +27 -0
  333. package/src/skillc.gleam +466 -0
  334. package/src/skillc_ffi.mjs +30 -0
@@ -0,0 +1,1218 @@
1
+ -module(yay).
2
+ -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
3
+ -define(FILEPATH, "src/yay.gleam").
4
+ -export([parse_file/1, parse_string/1, document_root/1, select/2, parse_selector/1, select_sugar/2, extraction_error_to_string/1, extract_string/2, extract_int/2, extract_float/2, extract_bool/2, extract_optional_string/2, extract_optional_int/2, extract_optional_float/2, extract_optional_bool/2, extract_string_or/3, extract_int_or/3, extract_float_or/3, extract_bool_or/3, extract_string_list/2, extract_int_list/2, extract_float_list/2, extract_bool_list/2, extract_string_map/2, extract_int_map/2, extract_float_map/2, extract_bool_map/2, extract_list_with/3, extract_map_with/3, extract_string_map_with_duplicate_detection/3]).
5
+ -export_type([yaml_error/0, yaml_error_loc/0, document/0, node_/0, selector/0, selection/0, selector_error/0, extraction_error/0]).
6
+
7
+ -if(?OTP_RELEASE >= 27).
8
+ -define(MODULEDOC(Str), -moduledoc(Str)).
9
+ -define(DOC(Str), -doc(Str)).
10
+ -else.
11
+ -define(MODULEDOC(Str), -compile([])).
12
+ -define(DOC(Str), -compile([])).
13
+ -endif.
14
+
15
+ -type yaml_error() :: unexpected_parsing_error |
16
+ {parsing_error, binary(), yaml_error_loc()}.
17
+
18
+ -type yaml_error_loc() :: {yaml_error_loc, integer(), integer()}.
19
+
20
+ -type document() :: {document, node_()}.
21
+
22
+ -type node_() :: node_nil |
23
+ {node_str, binary()} |
24
+ {node_bool, boolean()} |
25
+ {node_int, integer()} |
26
+ {node_float, float()} |
27
+ {node_seq, list(node_())} |
28
+ {node_map, list({node_(), node_()})}.
29
+
30
+ -type selector() :: {selector, list(selection())}.
31
+
32
+ -type selection() :: {select_map, node_()} | {select_seq, integer()}.
33
+
34
+ -type selector_error() :: {node_not_found, integer()} | selector_parse_error.
35
+
36
+ -type extraction_error() :: {key_missing, binary(), integer()} |
37
+ {key_value_empty, binary()} |
38
+ {key_type_mismatch, binary(), binary(), binary()} |
39
+ {duplicate_keys_detected, binary(), list(binary())}.
40
+
41
+ -file("src/yay.gleam", 50).
42
+ ?DOC(" Parse a YAML file located in `path` into a list of YAML documents.\n").
43
+ -spec parse_file(binary()) -> {ok, list(document())} | {error, yaml_error()}.
44
+ parse_file(Path) ->
45
+ yaml_ffi:parse_file(Path).
46
+
47
+ -file("src/yay.gleam", 56).
48
+ ?DOC(" Parse a string into a list of YAML documents.\n").
49
+ -spec parse_string(binary()) -> {ok, list(document())} | {error, yaml_error()}.
50
+ parse_string(String) ->
51
+ yaml_ffi:parse_string(String).
52
+
53
+ -file("src/yay.gleam", 67).
54
+ ?DOC(
55
+ " Gets the root `Node` of a YAML document.\n"
56
+ "\n"
57
+ " ## Examples\n"
58
+ "\n"
59
+ " ```gleam\n"
60
+ " let document = Document(root: NodeNil)\n"
61
+ " let assert NodeNil = document_root(document)\n"
62
+ " ```\n"
63
+ ).
64
+ -spec document_root(document()) -> node_().
65
+ document_root(Document) ->
66
+ erlang:element(2, Document).
67
+
68
+ -file("src/yay.gleam", 167).
69
+ -spec list_at(list(EUL), integer()) -> gleam@option:option(EUL).
70
+ list_at(L, Index) ->
71
+ case L of
72
+ [Head | Tail] ->
73
+ case Index of
74
+ 0 ->
75
+ {some, Head};
76
+
77
+ _ ->
78
+ list_at(Tail, Index - 1)
79
+ end;
80
+
81
+ [] ->
82
+ none
83
+ end.
84
+
85
+ -file("src/yay.gleam", 134).
86
+ -spec do_select(node_(), selector(), integer()) -> {ok, node_()} |
87
+ {error, selector_error()}.
88
+ do_select(Node, Selector, Select_idx) ->
89
+ case Selector of
90
+ {selector, [Select | Selector_tail]} ->
91
+ case Select of
92
+ {select_seq, Index} ->
93
+ case Node of
94
+ {node_seq, Seq} ->
95
+ case list_at(Seq, Index) of
96
+ {some, Node@1} ->
97
+ do_select(
98
+ Node@1,
99
+ {selector, Selector_tail},
100
+ Select_idx + 1
101
+ );
102
+
103
+ none ->
104
+ {error, {node_not_found, Select_idx}}
105
+ end;
106
+
107
+ _ ->
108
+ {error, {node_not_found, Select_idx}}
109
+ end;
110
+
111
+ {select_map, Key} ->
112
+ case Node of
113
+ {node_map, Pairs} ->
114
+ case gleam@list:key_find(Pairs, Key) of
115
+ {ok, Node@2} ->
116
+ do_select(
117
+ Node@2,
118
+ {selector, Selector_tail},
119
+ Select_idx + 1
120
+ );
121
+
122
+ {error, _} ->
123
+ {error, {node_not_found, Select_idx}}
124
+ end;
125
+
126
+ _ ->
127
+ {error, {node_not_found, Select_idx}}
128
+ end
129
+ end;
130
+
131
+ {selector, []} ->
132
+ {ok, Node}
133
+ end.
134
+
135
+ -file("src/yay.gleam", 127).
136
+ ?DOC(
137
+ " Queries the given `node` with a `Selector`.\n"
138
+ "\n"
139
+ " ## Examples\n"
140
+ "\n"
141
+ " ```gleam\n"
142
+ " let map = NodeMap([\n"
143
+ " #(NodeStr(\"lib name\"), NodeStr(\"yay\")),\n"
144
+ " #(NodeStr(\"stars\"), NodeInt(7)),\n"
145
+ " ])\n"
146
+ "\n"
147
+ " let assert Ok(NodeInt(7)) = select(from: map, selector: Selector([SelectMap(NodeStr(\"stars\"))]))\n"
148
+ " ```\n"
149
+ ).
150
+ -spec select(node_(), selector()) -> {ok, node_()} | {error, selector_error()}.
151
+ select(Node, Selector) ->
152
+ do_select(Node, Selector, 0).
153
+
154
+ -file("src/yay.gleam", 187).
155
+ -spec do_parse_selector(list(binary()), list(selection())) -> {ok,
156
+ list(selection())} |
157
+ {error, selector_error()}.
158
+ do_parse_selector(Selector_parts, Acc) ->
159
+ case Selector_parts of
160
+ [<<""/utf8>> | Tail] ->
161
+ do_parse_selector(Tail, Acc);
162
+
163
+ [Part | Tail@1] ->
164
+ case gleam_stdlib:string_starts_with(Part, <<"#"/utf8>>) of
165
+ true ->
166
+ case gleam_stdlib:parse_int(
167
+ gleam@string:drop_start(Part, 1)
168
+ ) of
169
+ {ok, Index} ->
170
+ do_parse_selector(
171
+ Tail@1,
172
+ [{select_seq, Index} | Acc]
173
+ );
174
+
175
+ {error, nil} ->
176
+ {error, selector_parse_error}
177
+ end;
178
+
179
+ false ->
180
+ do_parse_selector(
181
+ Tail@1,
182
+ [{select_map, {node_str, Part}} | Acc]
183
+ )
184
+ end;
185
+
186
+ [] ->
187
+ {ok, Acc}
188
+ end.
189
+
190
+ -file("src/yay.gleam", 180).
191
+ ?DOC(" Parses a selector string into a `Selector`.\n").
192
+ -spec parse_selector(binary()) -> {ok, selector()} | {error, selector_error()}.
193
+ parse_selector(Selector) ->
194
+ gleam@result:'try'(
195
+ do_parse_selector(gleam@string:split(Selector, <<"."/utf8>>), []),
196
+ fun(Selections) -> {ok, {selector, lists:reverse(Selections)}} end
197
+ ).
198
+
199
+ -file("src/yay.gleam", 106).
200
+ ?DOC(
201
+ " Parses the `selector` and queries the given `node` with it.\n"
202
+ "\n"
203
+ " ## Examples\n"
204
+ "\n"
205
+ " ```gleam\n"
206
+ " let map = NodeMap([\n"
207
+ " #(NodeStr(\"list\"), NodeMap([\n"
208
+ " #(NodeStr(\"elements\"), NodeSeq([NodeInt(101)]))\n"
209
+ " ])),\n"
210
+ " #(NodeStr(\"linked\"), NodeBool(False)),\n"
211
+ " ])\n"
212
+ "\n"
213
+ " let assert Ok(NodeInt(101)) = select_sugar(from: map, selector: \"list.elements.#0\")\n"
214
+ " ```\n"
215
+ ).
216
+ -spec select_sugar(node_(), binary()) -> {ok, node_()} |
217
+ {error, selector_error()}.
218
+ select_sugar(Node, Selector) ->
219
+ gleam@result:'try'(
220
+ parse_selector(Selector),
221
+ fun(Selector@1) -> select(Node, Selector@1) end
222
+ ).
223
+
224
+ -file("src/yay.gleam", 220).
225
+ ?DOC(" Converts an ExtractionError to a human-readable string.\n").
226
+ -spec extraction_error_to_string(extraction_error()) -> binary().
227
+ extraction_error_to_string(Error) ->
228
+ case Error of
229
+ {key_missing, Key, Failed_at_segment} ->
230
+ <<<<<<<<"Missing "/utf8, Key/binary>>/binary,
231
+ " (failed at segment "/utf8>>/binary,
232
+ (erlang:integer_to_binary(Failed_at_segment))/binary>>/binary,
233
+ ")"/utf8>>;
234
+
235
+ {key_value_empty, Key@1} ->
236
+ <<<<"Expected "/utf8, Key@1/binary>>/binary,
237
+ " to be non-empty"/utf8>>;
238
+
239
+ {key_type_mismatch, Key@2, Expected, Found} ->
240
+ <<<<<<<<<<"Expected "/utf8, Key@2/binary>>/binary,
241
+ " to be a "/utf8>>/binary,
242
+ Expected/binary>>/binary,
243
+ ", but found "/utf8>>/binary,
244
+ Found/binary>>;
245
+
246
+ {duplicate_keys_detected, Key@3, Keys} ->
247
+ <<<<<<"Duplicate keys detected for "/utf8, Key@3/binary>>/binary,
248
+ ": "/utf8>>/binary,
249
+ (gleam@string:join(Keys, <<", "/utf8>>))/binary>>
250
+ end.
251
+
252
+ -file("src/yay.gleam", 237).
253
+ ?DOC(" Converts a Node to a human-readable type name.\n").
254
+ -spec node_type_name(node_()) -> binary().
255
+ node_type_name(Node) ->
256
+ case Node of
257
+ node_nil ->
258
+ <<"nil"/utf8>>;
259
+
260
+ {node_str, _} ->
261
+ <<"string"/utf8>>;
262
+
263
+ {node_bool, _} ->
264
+ <<"bool"/utf8>>;
265
+
266
+ {node_int, _} ->
267
+ <<"int"/utf8>>;
268
+
269
+ {node_float, _} ->
270
+ <<"float"/utf8>>;
271
+
272
+ {node_seq, _} ->
273
+ <<"list"/utf8>>;
274
+
275
+ {node_map, _} ->
276
+ <<"map"/utf8>>
277
+ end.
278
+
279
+ -file("src/yay.gleam", 250).
280
+ ?DOC(" Internal helper to select a node or return KeyMissing with position info.\n").
281
+ -spec select_or_missing(node_(), binary()) -> {ok, node_()} |
282
+ {error, extraction_error()}.
283
+ select_or_missing(Node, Key) ->
284
+ case select_sugar(Node, Key) of
285
+ {ok, N} ->
286
+ {ok, N};
287
+
288
+ {error, {node_not_found, At}} ->
289
+ {error, {key_missing, Key, At}};
290
+
291
+ {error, selector_parse_error} ->
292
+ {error, {key_missing, Key, 0}}
293
+ end.
294
+
295
+ -file("src/yay.gleam", 265).
296
+ ?DOC(" Extracts a string from a YAML node.\n").
297
+ -spec extract_string(node_(), binary()) -> {ok, binary()} |
298
+ {error, extraction_error()}.
299
+ extract_string(Node, Key) ->
300
+ gleam@result:'try'(
301
+ select_or_missing(Node, Key),
302
+ fun(Selected) -> case Selected of
303
+ {node_str, Value} ->
304
+ {ok, Value};
305
+
306
+ node_nil ->
307
+ {error, {key_value_empty, Key}};
308
+
309
+ Other ->
310
+ {error,
311
+ {key_type_mismatch,
312
+ Key,
313
+ <<"string"/utf8>>,
314
+ node_type_name(Other)}}
315
+ end end
316
+ ).
317
+
318
+ -file("src/yay.gleam", 283).
319
+ ?DOC(" Extracts an integer from a YAML node.\n").
320
+ -spec extract_int(node_(), binary()) -> {ok, integer()} |
321
+ {error, extraction_error()}.
322
+ extract_int(Node, Key) ->
323
+ gleam@result:'try'(
324
+ select_or_missing(Node, Key),
325
+ fun(Selected) -> case Selected of
326
+ {node_int, Value} ->
327
+ {ok, Value};
328
+
329
+ node_nil ->
330
+ {error, {key_value_empty, Key}};
331
+
332
+ Other ->
333
+ {error,
334
+ {key_type_mismatch,
335
+ Key,
336
+ <<"int"/utf8>>,
337
+ node_type_name(Other)}}
338
+ end end
339
+ ).
340
+
341
+ -file("src/yay.gleam", 299).
342
+ ?DOC(
343
+ " Extracts a float from a YAML node.\n"
344
+ " Also accepts integers and converts them to floats.\n"
345
+ ).
346
+ -spec extract_float(node_(), binary()) -> {ok, float()} |
347
+ {error, extraction_error()}.
348
+ extract_float(Node, Key) ->
349
+ gleam@result:'try'(
350
+ select_or_missing(Node, Key),
351
+ fun(Selected) -> case Selected of
352
+ {node_float, Value} ->
353
+ {ok, Value};
354
+
355
+ {node_int, Value@1} ->
356
+ {ok, erlang:float(Value@1)};
357
+
358
+ node_nil ->
359
+ {error, {key_value_empty, Key}};
360
+
361
+ Other ->
362
+ {error,
363
+ {key_type_mismatch,
364
+ Key,
365
+ <<"float"/utf8>>,
366
+ node_type_name(Other)}}
367
+ end end
368
+ ).
369
+
370
+ -file("src/yay.gleam", 315).
371
+ ?DOC(" Extracts a boolean from a YAML node.\n").
372
+ -spec extract_bool(node_(), binary()) -> {ok, boolean()} |
373
+ {error, extraction_error()}.
374
+ extract_bool(Node, Key) ->
375
+ gleam@result:'try'(
376
+ select_or_missing(Node, Key),
377
+ fun(Selected) -> case Selected of
378
+ {node_bool, Value} ->
379
+ {ok, Value};
380
+
381
+ node_nil ->
382
+ {error, {key_value_empty, Key}};
383
+
384
+ Other ->
385
+ {error,
386
+ {key_type_mismatch,
387
+ Key,
388
+ <<"bool"/utf8>>,
389
+ node_type_name(Other)}}
390
+ end end
391
+ ).
392
+
393
+ -file("src/yay.gleam", 336).
394
+ ?DOC(
395
+ " Extracts an optional string from a YAML node.\n"
396
+ " Returns Ok(None) if the key is missing, Ok(Some(value)) if present.\n"
397
+ " Returns Error for type mismatches.\n"
398
+ ).
399
+ -spec extract_optional_string(node_(), binary()) -> {ok,
400
+ gleam@option:option(binary())} |
401
+ {error, extraction_error()}.
402
+ extract_optional_string(Node, Key) ->
403
+ case select_sugar(Node, Key) of
404
+ {error, _} ->
405
+ {ok, none};
406
+
407
+ {ok, Selected} ->
408
+ case Selected of
409
+ {node_str, Value} ->
410
+ {ok, {some, Value}};
411
+
412
+ node_nil ->
413
+ {ok, none};
414
+
415
+ Other ->
416
+ {error,
417
+ {key_type_mismatch,
418
+ Key,
419
+ <<"string"/utf8>>,
420
+ node_type_name(Other)}}
421
+ end
422
+ end.
423
+
424
+ -file("src/yay.gleam", 359).
425
+ ?DOC(
426
+ " Extracts an optional integer from a YAML node.\n"
427
+ " Returns Ok(None) if the key is missing, Ok(Some(value)) if present.\n"
428
+ " Returns Error for type mismatches.\n"
429
+ ).
430
+ -spec extract_optional_int(node_(), binary()) -> {ok,
431
+ gleam@option:option(integer())} |
432
+ {error, extraction_error()}.
433
+ extract_optional_int(Node, Key) ->
434
+ case select_sugar(Node, Key) of
435
+ {error, _} ->
436
+ {ok, none};
437
+
438
+ {ok, Selected} ->
439
+ case Selected of
440
+ {node_int, Value} ->
441
+ {ok, {some, Value}};
442
+
443
+ node_nil ->
444
+ {ok, none};
445
+
446
+ Other ->
447
+ {error,
448
+ {key_type_mismatch,
449
+ Key,
450
+ <<"int"/utf8>>,
451
+ node_type_name(Other)}}
452
+ end
453
+ end.
454
+
455
+ -file("src/yay.gleam", 383).
456
+ ?DOC(
457
+ " Extracts an optional float from a YAML node.\n"
458
+ " Returns Ok(None) if the key is missing, Ok(Some(value)) if present.\n"
459
+ " Also accepts integers and converts them to floats.\n"
460
+ " Returns Error for type mismatches.\n"
461
+ ).
462
+ -spec extract_optional_float(node_(), binary()) -> {ok,
463
+ gleam@option:option(float())} |
464
+ {error, extraction_error()}.
465
+ extract_optional_float(Node, Key) ->
466
+ case select_sugar(Node, Key) of
467
+ {error, _} ->
468
+ {ok, none};
469
+
470
+ {ok, Selected} ->
471
+ case Selected of
472
+ {node_float, Value} ->
473
+ {ok, {some, Value}};
474
+
475
+ {node_int, Value@1} ->
476
+ {ok, {some, erlang:float(Value@1)}};
477
+
478
+ node_nil ->
479
+ {ok, none};
480
+
481
+ Other ->
482
+ {error,
483
+ {key_type_mismatch,
484
+ Key,
485
+ <<"float"/utf8>>,
486
+ node_type_name(Other)}}
487
+ end
488
+ end.
489
+
490
+ -file("src/yay.gleam", 407).
491
+ ?DOC(
492
+ " Extracts an optional boolean from a YAML node.\n"
493
+ " Returns Ok(None) if the key is missing, Ok(Some(value)) if present.\n"
494
+ " Returns Error for type mismatches.\n"
495
+ ).
496
+ -spec extract_optional_bool(node_(), binary()) -> {ok,
497
+ gleam@option:option(boolean())} |
498
+ {error, extraction_error()}.
499
+ extract_optional_bool(Node, Key) ->
500
+ case select_sugar(Node, Key) of
501
+ {error, _} ->
502
+ {ok, none};
503
+
504
+ {ok, Selected} ->
505
+ case Selected of
506
+ {node_bool, Value} ->
507
+ {ok, {some, Value}};
508
+
509
+ node_nil ->
510
+ {ok, none};
511
+
512
+ Other ->
513
+ {error,
514
+ {key_type_mismatch,
515
+ Key,
516
+ <<"bool"/utf8>>,
517
+ node_type_name(Other)}}
518
+ end
519
+ end.
520
+
521
+ -file("src/yay.gleam", 433).
522
+ ?DOC(
523
+ " Extracts a string from a YAML node, returning a default if the key is missing or nil.\n"
524
+ " Returns Error only for type mismatches.\n"
525
+ ).
526
+ -spec extract_string_or(node_(), binary(), binary()) -> {ok, binary()} |
527
+ {error, extraction_error()}.
528
+ extract_string_or(Node, Key, Default) ->
529
+ case select_sugar(Node, Key) of
530
+ {error, _} ->
531
+ {ok, Default};
532
+
533
+ {ok, Selected} ->
534
+ case Selected of
535
+ {node_str, Value} ->
536
+ {ok, Value};
537
+
538
+ node_nil ->
539
+ {ok, Default};
540
+
541
+ Other ->
542
+ {error,
543
+ {key_type_mismatch,
544
+ Key,
545
+ <<"string"/utf8>>,
546
+ node_type_name(Other)}}
547
+ end
548
+ end.
549
+
550
+ -file("src/yay.gleam", 456).
551
+ ?DOC(
552
+ " Extracts an integer from a YAML node, returning a default if the key is missing or nil.\n"
553
+ " Returns Error only for type mismatches.\n"
554
+ ).
555
+ -spec extract_int_or(node_(), binary(), integer()) -> {ok, integer()} |
556
+ {error, extraction_error()}.
557
+ extract_int_or(Node, Key, Default) ->
558
+ case select_sugar(Node, Key) of
559
+ {error, _} ->
560
+ {ok, Default};
561
+
562
+ {ok, Selected} ->
563
+ case Selected of
564
+ {node_int, Value} ->
565
+ {ok, Value};
566
+
567
+ node_nil ->
568
+ {ok, Default};
569
+
570
+ Other ->
571
+ {error,
572
+ {key_type_mismatch,
573
+ Key,
574
+ <<"int"/utf8>>,
575
+ node_type_name(Other)}}
576
+ end
577
+ end.
578
+
579
+ -file("src/yay.gleam", 480).
580
+ ?DOC(
581
+ " Extracts a float from a YAML node, returning a default if the key is missing or nil.\n"
582
+ " Also accepts integers and converts them to floats.\n"
583
+ " Returns Error only for type mismatches.\n"
584
+ ).
585
+ -spec extract_float_or(node_(), binary(), float()) -> {ok, float()} |
586
+ {error, extraction_error()}.
587
+ extract_float_or(Node, Key, Default) ->
588
+ case select_sugar(Node, Key) of
589
+ {error, _} ->
590
+ {ok, Default};
591
+
592
+ {ok, Selected} ->
593
+ case Selected of
594
+ {node_float, Value} ->
595
+ {ok, Value};
596
+
597
+ {node_int, Value@1} ->
598
+ {ok, erlang:float(Value@1)};
599
+
600
+ node_nil ->
601
+ {ok, Default};
602
+
603
+ Other ->
604
+ {error,
605
+ {key_type_mismatch,
606
+ Key,
607
+ <<"float"/utf8>>,
608
+ node_type_name(Other)}}
609
+ end
610
+ end.
611
+
612
+ -file("src/yay.gleam", 504).
613
+ ?DOC(
614
+ " Extracts a boolean from a YAML node, returning a default if the key is missing or nil.\n"
615
+ " Returns Error only for type mismatches.\n"
616
+ ).
617
+ -spec extract_bool_or(node_(), binary(), boolean()) -> {ok, boolean()} |
618
+ {error, extraction_error()}.
619
+ extract_bool_or(Node, Key, Default) ->
620
+ case select_sugar(Node, Key) of
621
+ {error, _} ->
622
+ {ok, Default};
623
+
624
+ {ok, Selected} ->
625
+ case Selected of
626
+ {node_bool, Value} ->
627
+ {ok, Value};
628
+
629
+ node_nil ->
630
+ {ok, Default};
631
+
632
+ Other ->
633
+ {error,
634
+ {key_type_mismatch,
635
+ Key,
636
+ <<"bool"/utf8>>,
637
+ node_type_name(Other)}}
638
+ end
639
+ end.
640
+
641
+ -file("src/yay.gleam", 605).
642
+ ?DOC(" Helper to extract list items with index tracking for better error messages.\n").
643
+ -spec extract_list_items(
644
+ list(node_()),
645
+ binary(),
646
+ binary(),
647
+ fun((node_()) -> {ok, EWS} | {error, nil}),
648
+ integer(),
649
+ list(EWS)
650
+ ) -> {ok, list(EWS)} | {error, extraction_error()}.
651
+ extract_list_items(Items, Key, Item_type, Extract_item, Index, Acc) ->
652
+ case Items of
653
+ [] ->
654
+ {ok, lists:reverse(Acc)};
655
+
656
+ [Item | Rest] ->
657
+ case Extract_item(Item) of
658
+ {ok, Value} ->
659
+ extract_list_items(
660
+ Rest,
661
+ Key,
662
+ Item_type,
663
+ Extract_item,
664
+ Index + 1,
665
+ [Value | Acc]
666
+ );
667
+
668
+ {error, _} ->
669
+ {error,
670
+ {key_type_mismatch,
671
+ Key,
672
+ <<<<"list of "/utf8, Item_type/binary>>/binary,
673
+ "s"/utf8>>,
674
+ <<<<<<"list containing "/utf8,
675
+ (node_type_name(Item))/binary>>/binary,
676
+ " at index "/utf8>>/binary,
677
+ (erlang:integer_to_binary(Index))/binary>>}}
678
+ end
679
+ end.
680
+
681
+ -file("src/yay.gleam", 584).
682
+ ?DOC(" Internal helper for extracting typed lists with index information in errors.\n").
683
+ -spec extract_list(
684
+ node_(),
685
+ binary(),
686
+ binary(),
687
+ fun((node_()) -> {ok, EWL} | {error, nil})
688
+ ) -> {ok, list(EWL)} | {error, extraction_error()}.
689
+ extract_list(Node, Key, Item_type, Extract_item) ->
690
+ gleam@result:'try'(
691
+ select_or_missing(Node, Key),
692
+ fun(List_node) -> case List_node of
693
+ node_nil ->
694
+ {error, {key_value_empty, Key}};
695
+
696
+ {node_seq, Items} ->
697
+ extract_list_items(
698
+ Items,
699
+ Key,
700
+ Item_type,
701
+ Extract_item,
702
+ 0,
703
+ []
704
+ );
705
+
706
+ Other ->
707
+ {error,
708
+ {key_type_mismatch,
709
+ Key,
710
+ <<"list"/utf8>>,
711
+ node_type_name(Other)}}
712
+ end end
713
+ ).
714
+
715
+ -file("src/yay.gleam", 530).
716
+ ?DOC(" Extracts a list of strings from a YAML node.\n").
717
+ -spec extract_string_list(node_(), binary()) -> {ok, list(binary())} |
718
+ {error, extraction_error()}.
719
+ extract_string_list(Node, Key) ->
720
+ extract_list(Node, Key, <<"string"/utf8>>, fun(N) -> case N of
721
+ {node_str, S} ->
722
+ {ok, S};
723
+
724
+ _ ->
725
+ {error, nil}
726
+ end end).
727
+
728
+ -file("src/yay.gleam", 543).
729
+ ?DOC(" Extracts a list of integers from a YAML node.\n").
730
+ -spec extract_int_list(node_(), binary()) -> {ok, list(integer())} |
731
+ {error, extraction_error()}.
732
+ extract_int_list(Node, Key) ->
733
+ extract_list(Node, Key, <<"int"/utf8>>, fun(N) -> case N of
734
+ {node_int, I} ->
735
+ {ok, I};
736
+
737
+ _ ->
738
+ {error, nil}
739
+ end end).
740
+
741
+ -file("src/yay.gleam", 557).
742
+ ?DOC(
743
+ " Extracts a list of floats from a YAML node.\n"
744
+ " Also accepts integers and converts them to floats.\n"
745
+ ).
746
+ -spec extract_float_list(node_(), binary()) -> {ok, list(float())} |
747
+ {error, extraction_error()}.
748
+ extract_float_list(Node, Key) ->
749
+ extract_list(Node, Key, <<"float"/utf8>>, fun(N) -> case N of
750
+ {node_float, F} ->
751
+ {ok, F};
752
+
753
+ {node_int, I} ->
754
+ {ok, erlang:float(I)};
755
+
756
+ _ ->
757
+ {error, nil}
758
+ end end).
759
+
760
+ -file("src/yay.gleam", 571).
761
+ ?DOC(" Extracts a list of booleans from a YAML node.\n").
762
+ -spec extract_bool_list(node_(), binary()) -> {ok, list(boolean())} |
763
+ {error, extraction_error()}.
764
+ extract_bool_list(Node, Key) ->
765
+ extract_list(Node, Key, <<"bool"/utf8>>, fun(N) -> case N of
766
+ {node_bool, B} ->
767
+ {ok, B};
768
+
769
+ _ ->
770
+ {error, nil}
771
+ end end).
772
+
773
+ -file("src/yay.gleam", 716).
774
+ ?DOC(" Helper to extract map entries with detailed error messages.\n").
775
+ -spec extract_map_entries(
776
+ list({node_(), node_()}),
777
+ binary(),
778
+ binary(),
779
+ fun((node_()) -> {ok, EXX} | {error, nil}),
780
+ list({binary(), EXX})
781
+ ) -> {ok, list({binary(), EXX})} | {error, extraction_error()}.
782
+ extract_map_entries(Entries, Key, Value_type, Extract_value, Acc) ->
783
+ case Entries of
784
+ [] ->
785
+ {ok, lists:reverse(Acc)};
786
+
787
+ [{{node_str, K}, Value_node} | Rest] ->
788
+ case Extract_value(Value_node) of
789
+ {ok, V} ->
790
+ extract_map_entries(
791
+ Rest,
792
+ Key,
793
+ Value_type,
794
+ Extract_value,
795
+ [{K, V} | Acc]
796
+ );
797
+
798
+ {error, _} ->
799
+ {error,
800
+ {key_type_mismatch,
801
+ Key,
802
+ <<<<"map of "/utf8, Value_type/binary>>/binary,
803
+ "s"/utf8>>,
804
+ <<<<<<<<"map with "/utf8,
805
+ (node_type_name(Value_node))/binary>>/binary,
806
+ " value at key '"/utf8>>/binary,
807
+ K/binary>>/binary,
808
+ "'"/utf8>>}}
809
+ end;
810
+
811
+ [{Key_node, _} | _] ->
812
+ {error,
813
+ {key_type_mismatch,
814
+ Key,
815
+ <<<<"map of "/utf8, Value_type/binary>>/binary, "s"/utf8>>,
816
+ <<<<"map with "/utf8, (node_type_name(Key_node))/binary>>/binary,
817
+ " key"/utf8>>}}
818
+ end.
819
+
820
+ -file("src/yay.gleam", 694).
821
+ ?DOC(" Internal helper for extracting typed maps with detailed error messages.\n").
822
+ -spec extract_map(
823
+ node_(),
824
+ binary(),
825
+ binary(),
826
+ fun((node_()) -> {ok, EXP} | {error, nil})
827
+ ) -> {ok, gleam@dict:dict(binary(), EXP)} | {error, extraction_error()}.
828
+ extract_map(Node, Key, Value_type, Extract_value) ->
829
+ gleam@result:'try'(
830
+ select_or_missing(Node, Key),
831
+ fun(Map_node) -> case Map_node of
832
+ node_nil ->
833
+ {error, {key_value_empty, Key}};
834
+
835
+ {node_map, Entries} ->
836
+ _pipe = extract_map_entries(
837
+ Entries,
838
+ Key,
839
+ Value_type,
840
+ Extract_value,
841
+ []
842
+ ),
843
+ gleam@result:map(_pipe, fun maps:from_list/1);
844
+
845
+ Other ->
846
+ {error,
847
+ {key_type_mismatch,
848
+ Key,
849
+ <<"map"/utf8>>,
850
+ node_type_name(Other)}}
851
+ end end
852
+ ).
853
+
854
+ -file("src/yay.gleam", 640).
855
+ ?DOC(" Extracts a map of string values from a YAML node.\n").
856
+ -spec extract_string_map(node_(), binary()) -> {ok,
857
+ gleam@dict:dict(binary(), binary())} |
858
+ {error, extraction_error()}.
859
+ extract_string_map(Node, Key) ->
860
+ extract_map(Node, Key, <<"string"/utf8>>, fun(N) -> case N of
861
+ {node_str, S} ->
862
+ {ok, S};
863
+
864
+ _ ->
865
+ {error, nil}
866
+ end end).
867
+
868
+ -file("src/yay.gleam", 653).
869
+ ?DOC(" Extracts a map of integer values from a YAML node.\n").
870
+ -spec extract_int_map(node_(), binary()) -> {ok,
871
+ gleam@dict:dict(binary(), integer())} |
872
+ {error, extraction_error()}.
873
+ extract_int_map(Node, Key) ->
874
+ extract_map(Node, Key, <<"int"/utf8>>, fun(N) -> case N of
875
+ {node_int, I} ->
876
+ {ok, I};
877
+
878
+ _ ->
879
+ {error, nil}
880
+ end end).
881
+
882
+ -file("src/yay.gleam", 667).
883
+ ?DOC(
884
+ " Extracts a map of float values from a YAML node.\n"
885
+ " Also accepts integers and converts them to floats.\n"
886
+ ).
887
+ -spec extract_float_map(node_(), binary()) -> {ok,
888
+ gleam@dict:dict(binary(), float())} |
889
+ {error, extraction_error()}.
890
+ extract_float_map(Node, Key) ->
891
+ extract_map(Node, Key, <<"float"/utf8>>, fun(N) -> case N of
892
+ {node_float, F} ->
893
+ {ok, F};
894
+
895
+ {node_int, I} ->
896
+ {ok, erlang:float(I)};
897
+
898
+ _ ->
899
+ {error, nil}
900
+ end end).
901
+
902
+ -file("src/yay.gleam", 681).
903
+ ?DOC(" Extracts a map of boolean values from a YAML node.\n").
904
+ -spec extract_bool_map(node_(), binary()) -> {ok,
905
+ gleam@dict:dict(binary(), boolean())} |
906
+ {error, extraction_error()}.
907
+ extract_bool_map(Node, Key) ->
908
+ extract_map(Node, Key, <<"bool"/utf8>>, fun(N) -> case N of
909
+ {node_bool, B} ->
910
+ {ok, B};
911
+
912
+ _ ->
913
+ {error, nil}
914
+ end end).
915
+
916
+ -file("src/yay.gleam", 873).
917
+ ?DOC(" Helper to extract the expected string from an ExtractionError.\n").
918
+ -spec extraction_error_expected(extraction_error()) -> binary().
919
+ extraction_error_expected(Err) ->
920
+ case Err of
921
+ {key_missing, _, _} ->
922
+ <<"value"/utf8>>;
923
+
924
+ {key_value_empty, _} ->
925
+ <<"non-empty value"/utf8>>;
926
+
927
+ {key_type_mismatch, _, Expected, _} ->
928
+ Expected;
929
+
930
+ {duplicate_keys_detected, _, _} ->
931
+ <<"unique keys"/utf8>>
932
+ end.
933
+
934
+ -file("src/yay.gleam", 883).
935
+ ?DOC(" Helper to extract the found string from an ExtractionError.\n").
936
+ -spec extraction_error_found(extraction_error()) -> binary().
937
+ extraction_error_found(Err) ->
938
+ case Err of
939
+ {key_missing, K, _} ->
940
+ <<"missing key: "/utf8, K/binary>>;
941
+
942
+ {key_value_empty, _} ->
943
+ <<"nil"/utf8>>;
944
+
945
+ {key_type_mismatch, _, _, Found} ->
946
+ Found;
947
+
948
+ {duplicate_keys_detected, _, Keys} ->
949
+ <<"duplicate keys: "/utf8,
950
+ (gleam@string:join(Keys, <<", "/utf8>>))/binary>>
951
+ end.
952
+
953
+ -file("src/yay.gleam", 785).
954
+ ?DOC(" Helper to extract list items with a custom extractor and index tracking.\n").
955
+ -spec extract_list_items_with(
956
+ list(node_()),
957
+ binary(),
958
+ fun((node_()) -> {ok, EYL} | {error, extraction_error()}),
959
+ integer(),
960
+ list(EYL)
961
+ ) -> {ok, list(EYL)} | {error, extraction_error()}.
962
+ extract_list_items_with(Items, Key, Item_extractor, Index, Acc) ->
963
+ case Items of
964
+ [] ->
965
+ {ok, lists:reverse(Acc)};
966
+
967
+ [Item | Rest] ->
968
+ case Item_extractor(Item) of
969
+ {ok, Value} ->
970
+ extract_list_items_with(
971
+ Rest,
972
+ Key,
973
+ Item_extractor,
974
+ Index + 1,
975
+ [Value | Acc]
976
+ );
977
+
978
+ {error, Err} ->
979
+ {error,
980
+ {key_type_mismatch,
981
+ <<<<Key/binary, ".#"/utf8>>/binary,
982
+ (erlang:integer_to_binary(Index))/binary>>,
983
+ extraction_error_expected(Err),
984
+ extraction_error_found(Err)}}
985
+ end
986
+ end.
987
+
988
+ -file("src/yay.gleam", 766).
989
+ ?DOC(
990
+ " Extracts a list using a custom item extractor function.\n"
991
+ " Useful for extracting nested containers like List(Dict(String, String)).\n"
992
+ "\n"
993
+ " ## Example\n"
994
+ " ```gleam\n"
995
+ " // Extract a list of string maps\n"
996
+ " extract_list_with(node, \"servers\", fn(item) {\n"
997
+ " extract_string_map(item, \"\")\n"
998
+ " })\n"
999
+ " ```\n"
1000
+ ).
1001
+ -spec extract_list_with(
1002
+ node_(),
1003
+ binary(),
1004
+ fun((node_()) -> {ok, EYE} | {error, extraction_error()})
1005
+ ) -> {ok, list(EYE)} | {error, extraction_error()}.
1006
+ extract_list_with(Node, Key, Item_extractor) ->
1007
+ gleam@result:'try'(
1008
+ select_or_missing(Node, Key),
1009
+ fun(List_node) -> case List_node of
1010
+ node_nil ->
1011
+ {error, {key_value_empty, Key}};
1012
+
1013
+ {node_seq, Items} ->
1014
+ extract_list_items_with(Items, Key, Item_extractor, 0, []);
1015
+
1016
+ Other ->
1017
+ {error,
1018
+ {key_type_mismatch,
1019
+ Key,
1020
+ <<"list"/utf8>>,
1021
+ node_type_name(Other)}}
1022
+ end end
1023
+ ).
1024
+
1025
+ -file("src/yay.gleam", 843).
1026
+ ?DOC(" Helper to extract map entries with a custom value extractor.\n").
1027
+ -spec extract_map_entries_with(
1028
+ list({node_(), node_()}),
1029
+ binary(),
1030
+ fun((node_()) -> {ok, EZA} | {error, extraction_error()}),
1031
+ list({binary(), EZA})
1032
+ ) -> {ok, list({binary(), EZA})} | {error, extraction_error()}.
1033
+ extract_map_entries_with(Entries, Key, Value_extractor, Acc) ->
1034
+ case Entries of
1035
+ [] ->
1036
+ {ok, lists:reverse(Acc)};
1037
+
1038
+ [{{node_str, K}, Value_node} | Rest] ->
1039
+ case Value_extractor(Value_node) of
1040
+ {ok, V} ->
1041
+ extract_map_entries_with(
1042
+ Rest,
1043
+ Key,
1044
+ Value_extractor,
1045
+ [{K, V} | Acc]
1046
+ );
1047
+
1048
+ {error, Err} ->
1049
+ {error,
1050
+ {key_type_mismatch,
1051
+ <<<<Key/binary, "."/utf8>>/binary, K/binary>>,
1052
+ extraction_error_expected(Err),
1053
+ extraction_error_found(Err)}}
1054
+ end;
1055
+
1056
+ [{Key_node, _} | _] ->
1057
+ {error,
1058
+ {key_type_mismatch,
1059
+ Key,
1060
+ <<"map with string keys"/utf8>>,
1061
+ <<<<"map with "/utf8, (node_type_name(Key_node))/binary>>/binary,
1062
+ " key"/utf8>>}}
1063
+ end.
1064
+
1065
+ -file("src/yay.gleam", 822).
1066
+ ?DOC(
1067
+ " Extracts a map using a custom value extractor function.\n"
1068
+ " Useful for extracting nested containers like Dict(String, List(Int)).\n"
1069
+ "\n"
1070
+ " ## Example\n"
1071
+ " ```gleam\n"
1072
+ " // Extract a map of integer lists\n"
1073
+ " extract_map_with(node, \"groups\", fn(item) {\n"
1074
+ " extract_int_list(item, \"\")\n"
1075
+ " })\n"
1076
+ " ```\n"
1077
+ ).
1078
+ -spec extract_map_with(
1079
+ node_(),
1080
+ binary(),
1081
+ fun((node_()) -> {ok, EYS} | {error, extraction_error()})
1082
+ ) -> {ok, gleam@dict:dict(binary(), EYS)} | {error, extraction_error()}.
1083
+ extract_map_with(Node, Key, Value_extractor) ->
1084
+ gleam@result:'try'(
1085
+ select_or_missing(Node, Key),
1086
+ fun(Map_node) -> case Map_node of
1087
+ node_nil ->
1088
+ {error, {key_value_empty, Key}};
1089
+
1090
+ {node_map, Entries} ->
1091
+ _pipe = extract_map_entries_with(
1092
+ Entries,
1093
+ Key,
1094
+ Value_extractor,
1095
+ []
1096
+ ),
1097
+ gleam@result:map(_pipe, fun maps:from_list/1);
1098
+
1099
+ Other ->
1100
+ {error,
1101
+ {key_type_mismatch,
1102
+ Key,
1103
+ <<"map"/utf8>>,
1104
+ node_type_name(Other)}}
1105
+ end end
1106
+ ).
1107
+
1108
+ -file("src/yay.gleam", 897).
1109
+ -spec validate_no_duplicate_keys(
1110
+ {ok, list({binary(), binary()})} | {error, extraction_error()},
1111
+ binary(),
1112
+ boolean()
1113
+ ) -> {ok, list({binary(), binary()})} | {error, extraction_error()}.
1114
+ validate_no_duplicate_keys(Items_result, Key, Fail_on_key_duplication) ->
1115
+ gleam@result:'try'(
1116
+ Items_result,
1117
+ fun(Items) -> case Fail_on_key_duplication of
1118
+ false ->
1119
+ {ok, Items};
1120
+
1121
+ true ->
1122
+ {_, Duplicates@1} = gleam@list:fold(
1123
+ Items,
1124
+ {gleam@set:new(), gleam@set:new()},
1125
+ fun(Acc, Item) ->
1126
+ {Seen, Duplicates} = Acc,
1127
+ case gleam@set:contains(
1128
+ Seen,
1129
+ erlang:element(1, Item)
1130
+ ) of
1131
+ true ->
1132
+ {Seen,
1133
+ gleam@set:insert(
1134
+ Duplicates,
1135
+ erlang:element(1, Item)
1136
+ )};
1137
+
1138
+ false ->
1139
+ {gleam@set:insert(
1140
+ Seen,
1141
+ erlang:element(1, Item)
1142
+ ),
1143
+ Duplicates}
1144
+ end
1145
+ end
1146
+ ),
1147
+ Dupes_list = begin
1148
+ _pipe = gleam@set:to_list(Duplicates@1),
1149
+ gleam@list:sort(_pipe, fun gleam@string:compare/2)
1150
+ end,
1151
+ case Dupes_list of
1152
+ [] ->
1153
+ {ok, Items};
1154
+
1155
+ _ ->
1156
+ {error, {duplicate_keys_detected, Key, Dupes_list}}
1157
+ end
1158
+ end end
1159
+ ).
1160
+
1161
+ -file("src/yay.gleam", 927).
1162
+ ?DOC(" Extracts a string map with duplicate key detection.\n").
1163
+ -spec extract_string_map_with_duplicate_detection(node_(), binary(), boolean()) -> {ok,
1164
+ gleam@dict:dict(binary(), binary())} |
1165
+ {error, extraction_error()}.
1166
+ extract_string_map_with_duplicate_detection(Node, Key, Fail_on_key_duplication) ->
1167
+ gleam@result:'try'(
1168
+ select_or_missing(Node, Key),
1169
+ fun(Dict_node) -> case Dict_node of
1170
+ node_nil ->
1171
+ {error, {key_value_empty, Key}};
1172
+
1173
+ {node_map, Entries} ->
1174
+ _pipe = Entries,
1175
+ _pipe@1 = gleam@list:try_map(
1176
+ _pipe,
1177
+ fun(Entry) -> case Entry of
1178
+ {{node_str, Dict_key}, {node_str, Value}} ->
1179
+ {ok, {Dict_key, Value}};
1180
+
1181
+ {{node_str, Dict_key@1}, Value_node} ->
1182
+ {error,
1183
+ {key_type_mismatch,
1184
+ Key,
1185
+ <<"map of strings"/utf8>>,
1186
+ <<<<<<<<"map with "/utf8,
1187
+ (node_type_name(
1188
+ Value_node
1189
+ ))/binary>>/binary,
1190
+ " value at key '"/utf8>>/binary,
1191
+ Dict_key@1/binary>>/binary,
1192
+ "'"/utf8>>}};
1193
+
1194
+ {Key_node, _} ->
1195
+ {error,
1196
+ {key_type_mismatch,
1197
+ Key,
1198
+ <<"map of strings"/utf8>>,
1199
+ <<<<"map with "/utf8,
1200
+ (node_type_name(Key_node))/binary>>/binary,
1201
+ " key"/utf8>>}}
1202
+ end end
1203
+ ),
1204
+ _pipe@2 = validate_no_duplicate_keys(
1205
+ _pipe@1,
1206
+ Key,
1207
+ Fail_on_key_duplication
1208
+ ),
1209
+ gleam@result:map(_pipe@2, fun maps:from_list/1);
1210
+
1211
+ Other ->
1212
+ {error,
1213
+ {key_type_mismatch,
1214
+ Key,
1215
+ <<"map"/utf8>>,
1216
+ node_type_name(Other)}}
1217
+ end end
1218
+ ).