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,1403 @@
1
+ import * as $dict from "../gleam_stdlib/gleam/dict.mjs";
2
+ import * as $int from "../gleam_stdlib/gleam/int.mjs";
3
+ import * as $list from "../gleam_stdlib/gleam/list.mjs";
4
+ import * as $option from "../gleam_stdlib/gleam/option.mjs";
5
+ import * as $result from "../gleam_stdlib/gleam/result.mjs";
6
+ import * as $set from "../gleam_stdlib/gleam/set.mjs";
7
+ import * as $string from "../gleam_stdlib/gleam/string.mjs";
8
+ import {
9
+ Ok,
10
+ Error,
11
+ toList,
12
+ Empty as $Empty,
13
+ prepend as listPrepend,
14
+ CustomType as $CustomType,
15
+ } from "./gleam.mjs";
16
+ import { parse_file, parse_string } from "./yaml_ffi.mjs";
17
+
18
+ export { parse_file, parse_string };
19
+
20
+ export class UnexpectedParsingError extends $CustomType {}
21
+ export const YamlError$UnexpectedParsingError = () =>
22
+ new UnexpectedParsingError();
23
+ export const YamlError$isUnexpectedParsingError = (value) =>
24
+ value instanceof UnexpectedParsingError;
25
+
26
+ export class ParsingError extends $CustomType {
27
+ constructor(msg, loc) {
28
+ super();
29
+ this.msg = msg;
30
+ this.loc = loc;
31
+ }
32
+ }
33
+ export const YamlError$ParsingError = (msg, loc) => new ParsingError(msg, loc);
34
+ export const YamlError$isParsingError = (value) =>
35
+ value instanceof ParsingError;
36
+ export const YamlError$ParsingError$msg = (value) => value.msg;
37
+ export const YamlError$ParsingError$0 = (value) => value.msg;
38
+ export const YamlError$ParsingError$loc = (value) => value.loc;
39
+ export const YamlError$ParsingError$1 = (value) => value.loc;
40
+
41
+ export class YamlErrorLoc extends $CustomType {
42
+ constructor(line, column) {
43
+ super();
44
+ this.line = line;
45
+ this.column = column;
46
+ }
47
+ }
48
+ export const YamlErrorLoc$YamlErrorLoc = (line, column) =>
49
+ new YamlErrorLoc(line, column);
50
+ export const YamlErrorLoc$isYamlErrorLoc = (value) =>
51
+ value instanceof YamlErrorLoc;
52
+ export const YamlErrorLoc$YamlErrorLoc$line = (value) => value.line;
53
+ export const YamlErrorLoc$YamlErrorLoc$0 = (value) => value.line;
54
+ export const YamlErrorLoc$YamlErrorLoc$column = (value) => value.column;
55
+ export const YamlErrorLoc$YamlErrorLoc$1 = (value) => value.column;
56
+
57
+ export class Document extends $CustomType {
58
+ constructor(root) {
59
+ super();
60
+ this.root = root;
61
+ }
62
+ }
63
+ export const Document$Document = (root) => new Document(root);
64
+ export const Document$isDocument = (value) => value instanceof Document;
65
+ export const Document$Document$root = (value) => value.root;
66
+ export const Document$Document$0 = (value) => value.root;
67
+
68
+ export class NodeNil extends $CustomType {}
69
+ export const Node$NodeNil = () => new NodeNil();
70
+ export const Node$isNodeNil = (value) => value instanceof NodeNil;
71
+
72
+ export class NodeStr extends $CustomType {
73
+ constructor($0) {
74
+ super();
75
+ this[0] = $0;
76
+ }
77
+ }
78
+ export const Node$NodeStr = ($0) => new NodeStr($0);
79
+ export const Node$isNodeStr = (value) => value instanceof NodeStr;
80
+ export const Node$NodeStr$0 = (value) => value[0];
81
+
82
+ export class NodeBool extends $CustomType {
83
+ constructor($0) {
84
+ super();
85
+ this[0] = $0;
86
+ }
87
+ }
88
+ export const Node$NodeBool = ($0) => new NodeBool($0);
89
+ export const Node$isNodeBool = (value) => value instanceof NodeBool;
90
+ export const Node$NodeBool$0 = (value) => value[0];
91
+
92
+ export class NodeInt extends $CustomType {
93
+ constructor($0) {
94
+ super();
95
+ this[0] = $0;
96
+ }
97
+ }
98
+ export const Node$NodeInt = ($0) => new NodeInt($0);
99
+ export const Node$isNodeInt = (value) => value instanceof NodeInt;
100
+ export const Node$NodeInt$0 = (value) => value[0];
101
+
102
+ export class NodeFloat extends $CustomType {
103
+ constructor($0) {
104
+ super();
105
+ this[0] = $0;
106
+ }
107
+ }
108
+ export const Node$NodeFloat = ($0) => new NodeFloat($0);
109
+ export const Node$isNodeFloat = (value) => value instanceof NodeFloat;
110
+ export const Node$NodeFloat$0 = (value) => value[0];
111
+
112
+ export class NodeSeq extends $CustomType {
113
+ constructor($0) {
114
+ super();
115
+ this[0] = $0;
116
+ }
117
+ }
118
+ export const Node$NodeSeq = ($0) => new NodeSeq($0);
119
+ export const Node$isNodeSeq = (value) => value instanceof NodeSeq;
120
+ export const Node$NodeSeq$0 = (value) => value[0];
121
+
122
+ export class NodeMap extends $CustomType {
123
+ constructor($0) {
124
+ super();
125
+ this[0] = $0;
126
+ }
127
+ }
128
+ export const Node$NodeMap = ($0) => new NodeMap($0);
129
+ export const Node$isNodeMap = (value) => value instanceof NodeMap;
130
+ export const Node$NodeMap$0 = (value) => value[0];
131
+
132
+ export class Selector extends $CustomType {
133
+ constructor($0) {
134
+ super();
135
+ this[0] = $0;
136
+ }
137
+ }
138
+ export const Selector$Selector = ($0) => new Selector($0);
139
+ export const Selector$isSelector = (value) => value instanceof Selector;
140
+ export const Selector$Selector$0 = (value) => value[0];
141
+
142
+ export class SelectMap extends $CustomType {
143
+ constructor(key) {
144
+ super();
145
+ this.key = key;
146
+ }
147
+ }
148
+ export const Selection$SelectMap = (key) => new SelectMap(key);
149
+ export const Selection$isSelectMap = (value) => value instanceof SelectMap;
150
+ export const Selection$SelectMap$key = (value) => value.key;
151
+ export const Selection$SelectMap$0 = (value) => value.key;
152
+
153
+ export class SelectSeq extends $CustomType {
154
+ constructor(index) {
155
+ super();
156
+ this.index = index;
157
+ }
158
+ }
159
+ export const Selection$SelectSeq = (index) => new SelectSeq(index);
160
+ export const Selection$isSelectSeq = (value) => value instanceof SelectSeq;
161
+ export const Selection$SelectSeq$index = (value) => value.index;
162
+ export const Selection$SelectSeq$0 = (value) => value.index;
163
+
164
+ export class NodeNotFound extends $CustomType {
165
+ constructor(at) {
166
+ super();
167
+ this.at = at;
168
+ }
169
+ }
170
+ export const SelectorError$NodeNotFound = (at) => new NodeNotFound(at);
171
+ export const SelectorError$isNodeNotFound = (value) =>
172
+ value instanceof NodeNotFound;
173
+ export const SelectorError$NodeNotFound$at = (value) => value.at;
174
+ export const SelectorError$NodeNotFound$0 = (value) => value.at;
175
+
176
+ export class SelectorParseError extends $CustomType {}
177
+ export const SelectorError$SelectorParseError = () => new SelectorParseError();
178
+ export const SelectorError$isSelectorParseError = (value) =>
179
+ value instanceof SelectorParseError;
180
+
181
+ export class KeyMissing extends $CustomType {
182
+ constructor(key, failed_at_segment) {
183
+ super();
184
+ this.key = key;
185
+ this.failed_at_segment = failed_at_segment;
186
+ }
187
+ }
188
+ export const ExtractionError$KeyMissing = (key, failed_at_segment) =>
189
+ new KeyMissing(key, failed_at_segment);
190
+ export const ExtractionError$isKeyMissing = (value) =>
191
+ value instanceof KeyMissing;
192
+ export const ExtractionError$KeyMissing$key = (value) => value.key;
193
+ export const ExtractionError$KeyMissing$0 = (value) => value.key;
194
+ export const ExtractionError$KeyMissing$failed_at_segment = (value) =>
195
+ value.failed_at_segment;
196
+ export const ExtractionError$KeyMissing$1 = (value) => value.failed_at_segment;
197
+
198
+ export class KeyValueEmpty extends $CustomType {
199
+ constructor(key) {
200
+ super();
201
+ this.key = key;
202
+ }
203
+ }
204
+ export const ExtractionError$KeyValueEmpty = (key) => new KeyValueEmpty(key);
205
+ export const ExtractionError$isKeyValueEmpty = (value) =>
206
+ value instanceof KeyValueEmpty;
207
+ export const ExtractionError$KeyValueEmpty$key = (value) => value.key;
208
+ export const ExtractionError$KeyValueEmpty$0 = (value) => value.key;
209
+
210
+ export class KeyTypeMismatch extends $CustomType {
211
+ constructor(key, expected, found) {
212
+ super();
213
+ this.key = key;
214
+ this.expected = expected;
215
+ this.found = found;
216
+ }
217
+ }
218
+ export const ExtractionError$KeyTypeMismatch = (key, expected, found) =>
219
+ new KeyTypeMismatch(key, expected, found);
220
+ export const ExtractionError$isKeyTypeMismatch = (value) =>
221
+ value instanceof KeyTypeMismatch;
222
+ export const ExtractionError$KeyTypeMismatch$key = (value) => value.key;
223
+ export const ExtractionError$KeyTypeMismatch$0 = (value) => value.key;
224
+ export const ExtractionError$KeyTypeMismatch$expected = (value) =>
225
+ value.expected;
226
+ export const ExtractionError$KeyTypeMismatch$1 = (value) => value.expected;
227
+ export const ExtractionError$KeyTypeMismatch$found = (value) => value.found;
228
+ export const ExtractionError$KeyTypeMismatch$2 = (value) => value.found;
229
+
230
+ export class DuplicateKeysDetected extends $CustomType {
231
+ constructor(key, keys) {
232
+ super();
233
+ this.key = key;
234
+ this.keys = keys;
235
+ }
236
+ }
237
+ export const ExtractionError$DuplicateKeysDetected = (key, keys) =>
238
+ new DuplicateKeysDetected(key, keys);
239
+ export const ExtractionError$isDuplicateKeysDetected = (value) =>
240
+ value instanceof DuplicateKeysDetected;
241
+ export const ExtractionError$DuplicateKeysDetected$key = (value) => value.key;
242
+ export const ExtractionError$DuplicateKeysDetected$0 = (value) => value.key;
243
+ export const ExtractionError$DuplicateKeysDetected$keys = (value) => value.keys;
244
+ export const ExtractionError$DuplicateKeysDetected$1 = (value) => value.keys;
245
+
246
+ export const ExtractionError$key = (value) => value.key;
247
+
248
+ /**
249
+ * Gets the root `Node` of a YAML document.
250
+ *
251
+ * ## Examples
252
+ *
253
+ * ```gleam
254
+ * let document = Document(root: NodeNil)
255
+ * let assert NodeNil = document_root(document)
256
+ * ```
257
+ */
258
+ export function document_root(document) {
259
+ return document.root;
260
+ }
261
+
262
+ function list_at(loop$l, loop$index) {
263
+ while (true) {
264
+ let l = loop$l;
265
+ let index = loop$index;
266
+ if (l instanceof $Empty) {
267
+ return new $option.None();
268
+ } else {
269
+ let head = l.head;
270
+ let tail = l.tail;
271
+ if (index === 0) {
272
+ return new $option.Some(head);
273
+ } else {
274
+ loop$l = tail;
275
+ loop$index = index - 1;
276
+ }
277
+ }
278
+ }
279
+ }
280
+
281
+ function do_select(loop$node, loop$selector, loop$select_idx) {
282
+ while (true) {
283
+ let node = loop$node;
284
+ let selector = loop$selector;
285
+ let select_idx = loop$select_idx;
286
+ let $ = selector[0];
287
+ if ($ instanceof $Empty) {
288
+ return new Ok(node);
289
+ } else {
290
+ let select$1 = $.head;
291
+ let selector_tail = $.tail;
292
+ if (select$1 instanceof SelectMap) {
293
+ let key = select$1.key;
294
+ if (node instanceof NodeMap) {
295
+ let pairs = node[0];
296
+ let $1 = $list.key_find(pairs, key);
297
+ if ($1 instanceof Ok) {
298
+ let node$1 = $1[0];
299
+ loop$node = node$1;
300
+ loop$selector = new Selector(selector_tail);
301
+ loop$select_idx = select_idx + 1;
302
+ } else {
303
+ return new Error(new NodeNotFound(select_idx));
304
+ }
305
+ } else {
306
+ return new Error(new NodeNotFound(select_idx));
307
+ }
308
+ } else {
309
+ let index = select$1.index;
310
+ if (node instanceof NodeSeq) {
311
+ let seq = node[0];
312
+ let $1 = list_at(seq, index);
313
+ if ($1 instanceof $option.Some) {
314
+ let node$1 = $1[0];
315
+ loop$node = node$1;
316
+ loop$selector = new Selector(selector_tail);
317
+ loop$select_idx = select_idx + 1;
318
+ } else {
319
+ return new Error(new NodeNotFound(select_idx));
320
+ }
321
+ } else {
322
+ return new Error(new NodeNotFound(select_idx));
323
+ }
324
+ }
325
+ }
326
+ }
327
+ }
328
+
329
+ /**
330
+ * Queries the given `node` with a `Selector`.
331
+ *
332
+ * ## Examples
333
+ *
334
+ * ```gleam
335
+ * let map = NodeMap([
336
+ * #(NodeStr("lib name"), NodeStr("yay")),
337
+ * #(NodeStr("stars"), NodeInt(7)),
338
+ * ])
339
+ *
340
+ * let assert Ok(NodeInt(7)) = select(from: map, selector: Selector([SelectMap(NodeStr("stars"))]))
341
+ * ```
342
+ */
343
+ export function select(node, selector) {
344
+ return do_select(node, selector, 0);
345
+ }
346
+
347
+ function do_parse_selector(loop$selector_parts, loop$acc) {
348
+ while (true) {
349
+ let selector_parts = loop$selector_parts;
350
+ let acc = loop$acc;
351
+ if (selector_parts instanceof $Empty) {
352
+ return new Ok(acc);
353
+ } else {
354
+ let $ = selector_parts.head;
355
+ if ($ === "") {
356
+ let tail = selector_parts.tail;
357
+ loop$selector_parts = tail;
358
+ loop$acc = acc;
359
+ } else {
360
+ let part = $;
361
+ let tail = selector_parts.tail;
362
+ let $1 = $string.starts_with(part, "#");
363
+ if ($1) {
364
+ let $2 = $int.parse($string.drop_start(part, 1));
365
+ if ($2 instanceof Ok) {
366
+ let index = $2[0];
367
+ loop$selector_parts = tail;
368
+ loop$acc = listPrepend(new SelectSeq(index), acc);
369
+ } else {
370
+ return new Error(new SelectorParseError());
371
+ }
372
+ } else {
373
+ loop$selector_parts = tail;
374
+ loop$acc = listPrepend(new SelectMap(new NodeStr(part)), acc);
375
+ }
376
+ }
377
+ }
378
+ }
379
+ }
380
+
381
+ /**
382
+ * Parses a selector string into a `Selector`.
383
+ */
384
+ export function parse_selector(selector) {
385
+ return $result.try$(
386
+ do_parse_selector($string.split(selector, "."), toList([])),
387
+ (selections) => { return new Ok(new Selector($list.reverse(selections))); },
388
+ );
389
+ }
390
+
391
+ /**
392
+ * Parses the `selector` and queries the given `node` with it.
393
+ *
394
+ * ## Examples
395
+ *
396
+ * ```gleam
397
+ * let map = NodeMap([
398
+ * #(NodeStr("list"), NodeMap([
399
+ * #(NodeStr("elements"), NodeSeq([NodeInt(101)]))
400
+ * ])),
401
+ * #(NodeStr("linked"), NodeBool(False)),
402
+ * ])
403
+ *
404
+ * let assert Ok(NodeInt(101)) = select_sugar(from: map, selector: "list.elements.#0")
405
+ * ```
406
+ */
407
+ export function select_sugar(node, selector) {
408
+ return $result.try$(
409
+ parse_selector(selector),
410
+ (selector) => { return select(node, selector); },
411
+ );
412
+ }
413
+
414
+ /**
415
+ * Converts an ExtractionError to a human-readable string.
416
+ */
417
+ export function extraction_error_to_string(error) {
418
+ if (error instanceof KeyMissing) {
419
+ let key = error.key;
420
+ let failed_at_segment = error.failed_at_segment;
421
+ return ((("Missing " + key) + " (failed at segment ") + $int.to_string(
422
+ failed_at_segment,
423
+ )) + ")";
424
+ } else if (error instanceof KeyValueEmpty) {
425
+ let key = error.key;
426
+ return ("Expected " + key) + " to be non-empty";
427
+ } else if (error instanceof KeyTypeMismatch) {
428
+ let key = error.key;
429
+ let expected = error.expected;
430
+ let found = error.found;
431
+ return (((("Expected " + key) + " to be a ") + expected) + ", but found ") + found;
432
+ } else {
433
+ let key = error.key;
434
+ let keys = error.keys;
435
+ return (("Duplicate keys detected for " + key) + ": ") + $string.join(
436
+ keys,
437
+ ", ",
438
+ );
439
+ }
440
+ }
441
+
442
+ /**
443
+ * Converts a Node to a human-readable type name.
444
+ *
445
+ * @ignore
446
+ */
447
+ function node_type_name(node) {
448
+ if (node instanceof NodeNil) {
449
+ return "nil";
450
+ } else if (node instanceof NodeStr) {
451
+ return "string";
452
+ } else if (node instanceof NodeBool) {
453
+ return "bool";
454
+ } else if (node instanceof NodeInt) {
455
+ return "int";
456
+ } else if (node instanceof NodeFloat) {
457
+ return "float";
458
+ } else if (node instanceof NodeSeq) {
459
+ return "list";
460
+ } else {
461
+ return "map";
462
+ }
463
+ }
464
+
465
+ /**
466
+ * Internal helper to select a node or return KeyMissing with position info.
467
+ *
468
+ * @ignore
469
+ */
470
+ function select_or_missing(node, key) {
471
+ let $ = select_sugar(node, key);
472
+ if ($ instanceof Ok) {
473
+ return $;
474
+ } else {
475
+ let $1 = $[0];
476
+ if ($1 instanceof NodeNotFound) {
477
+ let at = $1.at;
478
+ return new Error(new KeyMissing(key, at));
479
+ } else {
480
+ return new Error(new KeyMissing(key, 0));
481
+ }
482
+ }
483
+ }
484
+
485
+ /**
486
+ * Extracts a string from a YAML node.
487
+ */
488
+ export function extract_string(node, key) {
489
+ return $result.try$(
490
+ select_or_missing(node, key),
491
+ (selected) => {
492
+ if (selected instanceof NodeNil) {
493
+ return new Error(new KeyValueEmpty(key));
494
+ } else if (selected instanceof NodeStr) {
495
+ let value = selected[0];
496
+ return new Ok(value);
497
+ } else {
498
+ let other = selected;
499
+ return new Error(
500
+ new KeyTypeMismatch(key, "string", node_type_name(other)),
501
+ );
502
+ }
503
+ },
504
+ );
505
+ }
506
+
507
+ /**
508
+ * Extracts an integer from a YAML node.
509
+ */
510
+ export function extract_int(node, key) {
511
+ return $result.try$(
512
+ select_or_missing(node, key),
513
+ (selected) => {
514
+ if (selected instanceof NodeNil) {
515
+ return new Error(new KeyValueEmpty(key));
516
+ } else if (selected instanceof NodeInt) {
517
+ let value = selected[0];
518
+ return new Ok(value);
519
+ } else {
520
+ let other = selected;
521
+ return new Error(new KeyTypeMismatch(key, "int", node_type_name(other)));
522
+ }
523
+ },
524
+ );
525
+ }
526
+
527
+ /**
528
+ * Extracts a float from a YAML node.
529
+ * Also accepts integers and converts them to floats.
530
+ */
531
+ export function extract_float(node, key) {
532
+ return $result.try$(
533
+ select_or_missing(node, key),
534
+ (selected) => {
535
+ if (selected instanceof NodeNil) {
536
+ return new Error(new KeyValueEmpty(key));
537
+ } else if (selected instanceof NodeInt) {
538
+ let value = selected[0];
539
+ return new Ok($int.to_float(value));
540
+ } else if (selected instanceof NodeFloat) {
541
+ let value = selected[0];
542
+ return new Ok(value);
543
+ } else {
544
+ let other = selected;
545
+ return new Error(
546
+ new KeyTypeMismatch(key, "float", node_type_name(other)),
547
+ );
548
+ }
549
+ },
550
+ );
551
+ }
552
+
553
+ /**
554
+ * Extracts a boolean from a YAML node.
555
+ */
556
+ export function extract_bool(node, key) {
557
+ return $result.try$(
558
+ select_or_missing(node, key),
559
+ (selected) => {
560
+ if (selected instanceof NodeNil) {
561
+ return new Error(new KeyValueEmpty(key));
562
+ } else if (selected instanceof NodeBool) {
563
+ let value = selected[0];
564
+ return new Ok(value);
565
+ } else {
566
+ let other = selected;
567
+ return new Error(
568
+ new KeyTypeMismatch(key, "bool", node_type_name(other)),
569
+ );
570
+ }
571
+ },
572
+ );
573
+ }
574
+
575
+ /**
576
+ * Extracts an optional string from a YAML node.
577
+ * Returns Ok(None) if the key is missing, Ok(Some(value)) if present.
578
+ * Returns Error for type mismatches.
579
+ */
580
+ export function extract_optional_string(node, key) {
581
+ let $ = select_sugar(node, key);
582
+ if ($ instanceof Ok) {
583
+ let selected = $[0];
584
+ if (selected instanceof NodeNil) {
585
+ return new Ok(new $option.None());
586
+ } else if (selected instanceof NodeStr) {
587
+ let value = selected[0];
588
+ return new Ok(new $option.Some(value));
589
+ } else {
590
+ let other = selected;
591
+ return new Error(
592
+ new KeyTypeMismatch(key, "string", node_type_name(other)),
593
+ );
594
+ }
595
+ } else {
596
+ return new Ok(new $option.None());
597
+ }
598
+ }
599
+
600
+ /**
601
+ * Extracts an optional integer from a YAML node.
602
+ * Returns Ok(None) if the key is missing, Ok(Some(value)) if present.
603
+ * Returns Error for type mismatches.
604
+ */
605
+ export function extract_optional_int(node, key) {
606
+ let $ = select_sugar(node, key);
607
+ if ($ instanceof Ok) {
608
+ let selected = $[0];
609
+ if (selected instanceof NodeNil) {
610
+ return new Ok(new $option.None());
611
+ } else if (selected instanceof NodeInt) {
612
+ let value = selected[0];
613
+ return new Ok(new $option.Some(value));
614
+ } else {
615
+ let other = selected;
616
+ return new Error(new KeyTypeMismatch(key, "int", node_type_name(other)));
617
+ }
618
+ } else {
619
+ return new Ok(new $option.None());
620
+ }
621
+ }
622
+
623
+ /**
624
+ * Extracts an optional float from a YAML node.
625
+ * Returns Ok(None) if the key is missing, Ok(Some(value)) if present.
626
+ * Also accepts integers and converts them to floats.
627
+ * Returns Error for type mismatches.
628
+ */
629
+ export function extract_optional_float(node, key) {
630
+ let $ = select_sugar(node, key);
631
+ if ($ instanceof Ok) {
632
+ let selected = $[0];
633
+ if (selected instanceof NodeNil) {
634
+ return new Ok(new $option.None());
635
+ } else if (selected instanceof NodeInt) {
636
+ let value = selected[0];
637
+ return new Ok(new $option.Some($int.to_float(value)));
638
+ } else if (selected instanceof NodeFloat) {
639
+ let value = selected[0];
640
+ return new Ok(new $option.Some(value));
641
+ } else {
642
+ let other = selected;
643
+ return new Error(new KeyTypeMismatch(key, "float", node_type_name(other)));
644
+ }
645
+ } else {
646
+ return new Ok(new $option.None());
647
+ }
648
+ }
649
+
650
+ /**
651
+ * Extracts an optional boolean from a YAML node.
652
+ * Returns Ok(None) if the key is missing, Ok(Some(value)) if present.
653
+ * Returns Error for type mismatches.
654
+ */
655
+ export function extract_optional_bool(node, key) {
656
+ let $ = select_sugar(node, key);
657
+ if ($ instanceof Ok) {
658
+ let selected = $[0];
659
+ if (selected instanceof NodeNil) {
660
+ return new Ok(new $option.None());
661
+ } else if (selected instanceof NodeBool) {
662
+ let value = selected[0];
663
+ return new Ok(new $option.Some(value));
664
+ } else {
665
+ let other = selected;
666
+ return new Error(new KeyTypeMismatch(key, "bool", node_type_name(other)));
667
+ }
668
+ } else {
669
+ return new Ok(new $option.None());
670
+ }
671
+ }
672
+
673
+ /**
674
+ * Extracts a string from a YAML node, returning a default if the key is missing or nil.
675
+ * Returns Error only for type mismatches.
676
+ */
677
+ export function extract_string_or(node, key, default$) {
678
+ let $ = select_sugar(node, key);
679
+ if ($ instanceof Ok) {
680
+ let selected = $[0];
681
+ if (selected instanceof NodeNil) {
682
+ return new Ok(default$);
683
+ } else if (selected instanceof NodeStr) {
684
+ let value = selected[0];
685
+ return new Ok(value);
686
+ } else {
687
+ let other = selected;
688
+ return new Error(
689
+ new KeyTypeMismatch(key, "string", node_type_name(other)),
690
+ );
691
+ }
692
+ } else {
693
+ return new Ok(default$);
694
+ }
695
+ }
696
+
697
+ /**
698
+ * Extracts an integer from a YAML node, returning a default if the key is missing or nil.
699
+ * Returns Error only for type mismatches.
700
+ */
701
+ export function extract_int_or(node, key, default$) {
702
+ let $ = select_sugar(node, key);
703
+ if ($ instanceof Ok) {
704
+ let selected = $[0];
705
+ if (selected instanceof NodeNil) {
706
+ return new Ok(default$);
707
+ } else if (selected instanceof NodeInt) {
708
+ let value = selected[0];
709
+ return new Ok(value);
710
+ } else {
711
+ let other = selected;
712
+ return new Error(new KeyTypeMismatch(key, "int", node_type_name(other)));
713
+ }
714
+ } else {
715
+ return new Ok(default$);
716
+ }
717
+ }
718
+
719
+ /**
720
+ * Extracts a float from a YAML node, returning a default if the key is missing or nil.
721
+ * Also accepts integers and converts them to floats.
722
+ * Returns Error only for type mismatches.
723
+ */
724
+ export function extract_float_or(node, key, default$) {
725
+ let $ = select_sugar(node, key);
726
+ if ($ instanceof Ok) {
727
+ let selected = $[0];
728
+ if (selected instanceof NodeNil) {
729
+ return new Ok(default$);
730
+ } else if (selected instanceof NodeInt) {
731
+ let value = selected[0];
732
+ return new Ok($int.to_float(value));
733
+ } else if (selected instanceof NodeFloat) {
734
+ let value = selected[0];
735
+ return new Ok(value);
736
+ } else {
737
+ let other = selected;
738
+ return new Error(new KeyTypeMismatch(key, "float", node_type_name(other)));
739
+ }
740
+ } else {
741
+ return new Ok(default$);
742
+ }
743
+ }
744
+
745
+ /**
746
+ * Extracts a boolean from a YAML node, returning a default if the key is missing or nil.
747
+ * Returns Error only for type mismatches.
748
+ */
749
+ export function extract_bool_or(node, key, default$) {
750
+ let $ = select_sugar(node, key);
751
+ if ($ instanceof Ok) {
752
+ let selected = $[0];
753
+ if (selected instanceof NodeNil) {
754
+ return new Ok(default$);
755
+ } else if (selected instanceof NodeBool) {
756
+ let value = selected[0];
757
+ return new Ok(value);
758
+ } else {
759
+ let other = selected;
760
+ return new Error(new KeyTypeMismatch(key, "bool", node_type_name(other)));
761
+ }
762
+ } else {
763
+ return new Ok(default$);
764
+ }
765
+ }
766
+
767
+ /**
768
+ * Helper to extract list items with index tracking for better error messages.
769
+ *
770
+ * @ignore
771
+ */
772
+ function extract_list_items(
773
+ loop$items,
774
+ loop$key,
775
+ loop$item_type,
776
+ loop$extract_item,
777
+ loop$index,
778
+ loop$acc
779
+ ) {
780
+ while (true) {
781
+ let items = loop$items;
782
+ let key = loop$key;
783
+ let item_type = loop$item_type;
784
+ let extract_item = loop$extract_item;
785
+ let index = loop$index;
786
+ let acc = loop$acc;
787
+ if (items instanceof $Empty) {
788
+ return new Ok($list.reverse(acc));
789
+ } else {
790
+ let item = items.head;
791
+ let rest = items.tail;
792
+ let $ = extract_item(item);
793
+ if ($ instanceof Ok) {
794
+ let value = $[0];
795
+ loop$items = rest;
796
+ loop$key = key;
797
+ loop$item_type = item_type;
798
+ loop$extract_item = extract_item;
799
+ loop$index = index + 1;
800
+ loop$acc = listPrepend(value, acc);
801
+ } else {
802
+ return new Error(
803
+ new KeyTypeMismatch(
804
+ key,
805
+ ("list of " + item_type) + "s",
806
+ (("list containing " + node_type_name(item)) + " at index ") + $int.to_string(
807
+ index,
808
+ ),
809
+ ),
810
+ );
811
+ }
812
+ }
813
+ }
814
+ }
815
+
816
+ /**
817
+ * Internal helper for extracting typed lists with index information in errors.
818
+ *
819
+ * @ignore
820
+ */
821
+ function extract_list(node, key, item_type, extract_item) {
822
+ return $result.try$(
823
+ select_or_missing(node, key),
824
+ (list_node) => {
825
+ if (list_node instanceof NodeNil) {
826
+ return new Error(new KeyValueEmpty(key));
827
+ } else if (list_node instanceof NodeSeq) {
828
+ let items = list_node[0];
829
+ return extract_list_items(
830
+ items,
831
+ key,
832
+ item_type,
833
+ extract_item,
834
+ 0,
835
+ toList([]),
836
+ );
837
+ } else {
838
+ let other = list_node;
839
+ return new Error(
840
+ new KeyTypeMismatch(key, "list", node_type_name(other)),
841
+ );
842
+ }
843
+ },
844
+ );
845
+ }
846
+
847
+ /**
848
+ * Extracts a list of strings from a YAML node.
849
+ */
850
+ export function extract_string_list(node, key) {
851
+ return extract_list(
852
+ node,
853
+ key,
854
+ "string",
855
+ (n) => {
856
+ if (n instanceof NodeStr) {
857
+ let s = n[0];
858
+ return new Ok(s);
859
+ } else {
860
+ return new Error(undefined);
861
+ }
862
+ },
863
+ );
864
+ }
865
+
866
+ /**
867
+ * Extracts a list of integers from a YAML node.
868
+ */
869
+ export function extract_int_list(node, key) {
870
+ return extract_list(
871
+ node,
872
+ key,
873
+ "int",
874
+ (n) => {
875
+ if (n instanceof NodeInt) {
876
+ let i = n[0];
877
+ return new Ok(i);
878
+ } else {
879
+ return new Error(undefined);
880
+ }
881
+ },
882
+ );
883
+ }
884
+
885
+ /**
886
+ * Extracts a list of floats from a YAML node.
887
+ * Also accepts integers and converts them to floats.
888
+ */
889
+ export function extract_float_list(node, key) {
890
+ return extract_list(
891
+ node,
892
+ key,
893
+ "float",
894
+ (n) => {
895
+ if (n instanceof NodeInt) {
896
+ let i = n[0];
897
+ return new Ok($int.to_float(i));
898
+ } else if (n instanceof NodeFloat) {
899
+ let f = n[0];
900
+ return new Ok(f);
901
+ } else {
902
+ return new Error(undefined);
903
+ }
904
+ },
905
+ );
906
+ }
907
+
908
+ /**
909
+ * Extracts a list of booleans from a YAML node.
910
+ */
911
+ export function extract_bool_list(node, key) {
912
+ return extract_list(
913
+ node,
914
+ key,
915
+ "bool",
916
+ (n) => {
917
+ if (n instanceof NodeBool) {
918
+ let b = n[0];
919
+ return new Ok(b);
920
+ } else {
921
+ return new Error(undefined);
922
+ }
923
+ },
924
+ );
925
+ }
926
+
927
+ /**
928
+ * Helper to extract map entries with detailed error messages.
929
+ *
930
+ * @ignore
931
+ */
932
+ function extract_map_entries(
933
+ loop$entries,
934
+ loop$key,
935
+ loop$value_type,
936
+ loop$extract_value,
937
+ loop$acc
938
+ ) {
939
+ while (true) {
940
+ let entries = loop$entries;
941
+ let key = loop$key;
942
+ let value_type = loop$value_type;
943
+ let extract_value = loop$extract_value;
944
+ let acc = loop$acc;
945
+ if (entries instanceof $Empty) {
946
+ return new Ok($list.reverse(acc));
947
+ } else {
948
+ let $ = entries.head[0];
949
+ if ($ instanceof NodeStr) {
950
+ let rest = entries.tail;
951
+ let value_node = entries.head[1];
952
+ let k = $[0];
953
+ let $1 = extract_value(value_node);
954
+ if ($1 instanceof Ok) {
955
+ let v = $1[0];
956
+ loop$entries = rest;
957
+ loop$key = key;
958
+ loop$value_type = value_type;
959
+ loop$extract_value = extract_value;
960
+ loop$acc = listPrepend([k, v], acc);
961
+ } else {
962
+ return new Error(
963
+ new KeyTypeMismatch(
964
+ key,
965
+ ("map of " + value_type) + "s",
966
+ ((("map with " + node_type_name(value_node)) + " value at key '") + k) + "'",
967
+ ),
968
+ );
969
+ }
970
+ } else {
971
+ let key_node = $;
972
+ return new Error(
973
+ new KeyTypeMismatch(
974
+ key,
975
+ ("map of " + value_type) + "s",
976
+ ("map with " + node_type_name(key_node)) + " key",
977
+ ),
978
+ );
979
+ }
980
+ }
981
+ }
982
+ }
983
+
984
+ /**
985
+ * Internal helper for extracting typed maps with detailed error messages.
986
+ *
987
+ * @ignore
988
+ */
989
+ function extract_map(node, key, value_type, extract_value) {
990
+ return $result.try$(
991
+ select_or_missing(node, key),
992
+ (map_node) => {
993
+ if (map_node instanceof NodeNil) {
994
+ return new Error(new KeyValueEmpty(key));
995
+ } else if (map_node instanceof NodeMap) {
996
+ let entries = map_node[0];
997
+ let _pipe = extract_map_entries(
998
+ entries,
999
+ key,
1000
+ value_type,
1001
+ extract_value,
1002
+ toList([]),
1003
+ );
1004
+ return $result.map(_pipe, $dict.from_list);
1005
+ } else {
1006
+ let other = map_node;
1007
+ return new Error(new KeyTypeMismatch(key, "map", node_type_name(other)));
1008
+ }
1009
+ },
1010
+ );
1011
+ }
1012
+
1013
+ /**
1014
+ * Extracts a map of string values from a YAML node.
1015
+ */
1016
+ export function extract_string_map(node, key) {
1017
+ return extract_map(
1018
+ node,
1019
+ key,
1020
+ "string",
1021
+ (n) => {
1022
+ if (n instanceof NodeStr) {
1023
+ let s = n[0];
1024
+ return new Ok(s);
1025
+ } else {
1026
+ return new Error(undefined);
1027
+ }
1028
+ },
1029
+ );
1030
+ }
1031
+
1032
+ /**
1033
+ * Extracts a map of integer values from a YAML node.
1034
+ */
1035
+ export function extract_int_map(node, key) {
1036
+ return extract_map(
1037
+ node,
1038
+ key,
1039
+ "int",
1040
+ (n) => {
1041
+ if (n instanceof NodeInt) {
1042
+ let i = n[0];
1043
+ return new Ok(i);
1044
+ } else {
1045
+ return new Error(undefined);
1046
+ }
1047
+ },
1048
+ );
1049
+ }
1050
+
1051
+ /**
1052
+ * Extracts a map of float values from a YAML node.
1053
+ * Also accepts integers and converts them to floats.
1054
+ */
1055
+ export function extract_float_map(node, key) {
1056
+ return extract_map(
1057
+ node,
1058
+ key,
1059
+ "float",
1060
+ (n) => {
1061
+ if (n instanceof NodeInt) {
1062
+ let i = n[0];
1063
+ return new Ok($int.to_float(i));
1064
+ } else if (n instanceof NodeFloat) {
1065
+ let f = n[0];
1066
+ return new Ok(f);
1067
+ } else {
1068
+ return new Error(undefined);
1069
+ }
1070
+ },
1071
+ );
1072
+ }
1073
+
1074
+ /**
1075
+ * Extracts a map of boolean values from a YAML node.
1076
+ */
1077
+ export function extract_bool_map(node, key) {
1078
+ return extract_map(
1079
+ node,
1080
+ key,
1081
+ "bool",
1082
+ (n) => {
1083
+ if (n instanceof NodeBool) {
1084
+ let b = n[0];
1085
+ return new Ok(b);
1086
+ } else {
1087
+ return new Error(undefined);
1088
+ }
1089
+ },
1090
+ );
1091
+ }
1092
+
1093
+ /**
1094
+ * Helper to extract the expected string from an ExtractionError.
1095
+ *
1096
+ * @ignore
1097
+ */
1098
+ function extraction_error_expected(err) {
1099
+ if (err instanceof KeyMissing) {
1100
+ return "value";
1101
+ } else if (err instanceof KeyValueEmpty) {
1102
+ return "non-empty value";
1103
+ } else if (err instanceof KeyTypeMismatch) {
1104
+ let expected = err.expected;
1105
+ return expected;
1106
+ } else {
1107
+ return "unique keys";
1108
+ }
1109
+ }
1110
+
1111
+ /**
1112
+ * Helper to extract the found string from an ExtractionError.
1113
+ *
1114
+ * @ignore
1115
+ */
1116
+ function extraction_error_found(err) {
1117
+ if (err instanceof KeyMissing) {
1118
+ let k = err.key;
1119
+ return "missing key: " + k;
1120
+ } else if (err instanceof KeyValueEmpty) {
1121
+ return "nil";
1122
+ } else if (err instanceof KeyTypeMismatch) {
1123
+ let found = err.found;
1124
+ return found;
1125
+ } else {
1126
+ let keys = err.keys;
1127
+ return "duplicate keys: " + $string.join(keys, ", ");
1128
+ }
1129
+ }
1130
+
1131
+ /**
1132
+ * Helper to extract list items with a custom extractor and index tracking.
1133
+ *
1134
+ * @ignore
1135
+ */
1136
+ function extract_list_items_with(
1137
+ loop$items,
1138
+ loop$key,
1139
+ loop$item_extractor,
1140
+ loop$index,
1141
+ loop$acc
1142
+ ) {
1143
+ while (true) {
1144
+ let items = loop$items;
1145
+ let key = loop$key;
1146
+ let item_extractor = loop$item_extractor;
1147
+ let index = loop$index;
1148
+ let acc = loop$acc;
1149
+ if (items instanceof $Empty) {
1150
+ return new Ok($list.reverse(acc));
1151
+ } else {
1152
+ let item = items.head;
1153
+ let rest = items.tail;
1154
+ let $ = item_extractor(item);
1155
+ if ($ instanceof Ok) {
1156
+ let value = $[0];
1157
+ loop$items = rest;
1158
+ loop$key = key;
1159
+ loop$item_extractor = item_extractor;
1160
+ loop$index = index + 1;
1161
+ loop$acc = listPrepend(value, acc);
1162
+ } else {
1163
+ let err = $[0];
1164
+ return new Error(
1165
+ new KeyTypeMismatch(
1166
+ (key + ".#") + $int.to_string(index),
1167
+ extraction_error_expected(err),
1168
+ extraction_error_found(err),
1169
+ ),
1170
+ );
1171
+ }
1172
+ }
1173
+ }
1174
+ }
1175
+
1176
+ /**
1177
+ * Extracts a list using a custom item extractor function.
1178
+ * Useful for extracting nested containers like List(Dict(String, String)).
1179
+ *
1180
+ * ## Example
1181
+ * ```gleam
1182
+ * // Extract a list of string maps
1183
+ * extract_list_with(node, "servers", fn(item) {
1184
+ * extract_string_map(item, "")
1185
+ * })
1186
+ * ```
1187
+ */
1188
+ export function extract_list_with(node, key, item_extractor) {
1189
+ return $result.try$(
1190
+ select_or_missing(node, key),
1191
+ (list_node) => {
1192
+ if (list_node instanceof NodeNil) {
1193
+ return new Error(new KeyValueEmpty(key));
1194
+ } else if (list_node instanceof NodeSeq) {
1195
+ let items = list_node[0];
1196
+ return extract_list_items_with(
1197
+ items,
1198
+ key,
1199
+ item_extractor,
1200
+ 0,
1201
+ toList([]),
1202
+ );
1203
+ } else {
1204
+ let other = list_node;
1205
+ return new Error(
1206
+ new KeyTypeMismatch(key, "list", node_type_name(other)),
1207
+ );
1208
+ }
1209
+ },
1210
+ );
1211
+ }
1212
+
1213
+ /**
1214
+ * Helper to extract map entries with a custom value extractor.
1215
+ *
1216
+ * @ignore
1217
+ */
1218
+ function extract_map_entries_with(
1219
+ loop$entries,
1220
+ loop$key,
1221
+ loop$value_extractor,
1222
+ loop$acc
1223
+ ) {
1224
+ while (true) {
1225
+ let entries = loop$entries;
1226
+ let key = loop$key;
1227
+ let value_extractor = loop$value_extractor;
1228
+ let acc = loop$acc;
1229
+ if (entries instanceof $Empty) {
1230
+ return new Ok($list.reverse(acc));
1231
+ } else {
1232
+ let $ = entries.head[0];
1233
+ if ($ instanceof NodeStr) {
1234
+ let rest = entries.tail;
1235
+ let value_node = entries.head[1];
1236
+ let k = $[0];
1237
+ let $1 = value_extractor(value_node);
1238
+ if ($1 instanceof Ok) {
1239
+ let v = $1[0];
1240
+ loop$entries = rest;
1241
+ loop$key = key;
1242
+ loop$value_extractor = value_extractor;
1243
+ loop$acc = listPrepend([k, v], acc);
1244
+ } else {
1245
+ let err = $1[0];
1246
+ return new Error(
1247
+ new KeyTypeMismatch(
1248
+ (key + ".") + k,
1249
+ extraction_error_expected(err),
1250
+ extraction_error_found(err),
1251
+ ),
1252
+ );
1253
+ }
1254
+ } else {
1255
+ let key_node = $;
1256
+ return new Error(
1257
+ new KeyTypeMismatch(
1258
+ key,
1259
+ "map with string keys",
1260
+ ("map with " + node_type_name(key_node)) + " key",
1261
+ ),
1262
+ );
1263
+ }
1264
+ }
1265
+ }
1266
+ }
1267
+
1268
+ /**
1269
+ * Extracts a map using a custom value extractor function.
1270
+ * Useful for extracting nested containers like Dict(String, List(Int)).
1271
+ *
1272
+ * ## Example
1273
+ * ```gleam
1274
+ * // Extract a map of integer lists
1275
+ * extract_map_with(node, "groups", fn(item) {
1276
+ * extract_int_list(item, "")
1277
+ * })
1278
+ * ```
1279
+ */
1280
+ export function extract_map_with(node, key, value_extractor) {
1281
+ return $result.try$(
1282
+ select_or_missing(node, key),
1283
+ (map_node) => {
1284
+ if (map_node instanceof NodeNil) {
1285
+ return new Error(new KeyValueEmpty(key));
1286
+ } else if (map_node instanceof NodeMap) {
1287
+ let entries = map_node[0];
1288
+ let _pipe = extract_map_entries_with(
1289
+ entries,
1290
+ key,
1291
+ value_extractor,
1292
+ toList([]),
1293
+ );
1294
+ return $result.map(_pipe, $dict.from_list);
1295
+ } else {
1296
+ let other = map_node;
1297
+ return new Error(new KeyTypeMismatch(key, "map", node_type_name(other)));
1298
+ }
1299
+ },
1300
+ );
1301
+ }
1302
+
1303
+ function validate_no_duplicate_keys(items_result, key, fail_on_key_duplication) {
1304
+ return $result.try$(
1305
+ items_result,
1306
+ (items) => {
1307
+ if (fail_on_key_duplication) {
1308
+ let $ = $list.fold(
1309
+ items,
1310
+ [$set.new$(), $set.new$()],
1311
+ (acc, item) => {
1312
+ let seen;
1313
+ let duplicates;
1314
+ seen = acc[0];
1315
+ duplicates = acc[1];
1316
+ let $1 = $set.contains(seen, item[0]);
1317
+ if ($1) {
1318
+ return [seen, $set.insert(duplicates, item[0])];
1319
+ } else {
1320
+ return [$set.insert(seen, item[0]), duplicates];
1321
+ }
1322
+ },
1323
+ );
1324
+ let duplicates;
1325
+ duplicates = $[1];
1326
+ let _block;
1327
+ let _pipe = $set.to_list(duplicates);
1328
+ _block = $list.sort(_pipe, $string.compare);
1329
+ let dupes_list = _block;
1330
+ if (dupes_list instanceof $Empty) {
1331
+ return new Ok(items);
1332
+ } else {
1333
+ return new Error(new DuplicateKeysDetected(key, dupes_list));
1334
+ }
1335
+ } else {
1336
+ return new Ok(items);
1337
+ }
1338
+ },
1339
+ );
1340
+ }
1341
+
1342
+ /**
1343
+ * Extracts a string map with duplicate key detection.
1344
+ */
1345
+ export function extract_string_map_with_duplicate_detection(
1346
+ node,
1347
+ key,
1348
+ fail_on_key_duplication
1349
+ ) {
1350
+ return $result.try$(
1351
+ select_or_missing(node, key),
1352
+ (dict_node) => {
1353
+ if (dict_node instanceof NodeNil) {
1354
+ return new Error(new KeyValueEmpty(key));
1355
+ } else if (dict_node instanceof NodeMap) {
1356
+ let entries = dict_node[0];
1357
+ let _pipe = entries;
1358
+ let _pipe$1 = $list.try_map(
1359
+ _pipe,
1360
+ (entry) => {
1361
+ let $ = entry[0];
1362
+ if ($ instanceof NodeStr) {
1363
+ let $1 = entry[1];
1364
+ if ($1 instanceof NodeStr) {
1365
+ let dict_key = $[0];
1366
+ let value = $1[0];
1367
+ return new Ok([dict_key, value]);
1368
+ } else {
1369
+ let value_node = $1;
1370
+ let dict_key = $[0];
1371
+ return new Error(
1372
+ new KeyTypeMismatch(
1373
+ key,
1374
+ "map of strings",
1375
+ ((("map with " + node_type_name(value_node)) + " value at key '") + dict_key) + "'",
1376
+ ),
1377
+ );
1378
+ }
1379
+ } else {
1380
+ let key_node = $;
1381
+ return new Error(
1382
+ new KeyTypeMismatch(
1383
+ key,
1384
+ "map of strings",
1385
+ ("map with " + node_type_name(key_node)) + " key",
1386
+ ),
1387
+ );
1388
+ }
1389
+ },
1390
+ );
1391
+ let _pipe$2 = validate_no_duplicate_keys(
1392
+ _pipe$1,
1393
+ key,
1394
+ fail_on_key_duplication,
1395
+ );
1396
+ return $result.map(_pipe$2, $dict.from_list);
1397
+ } else {
1398
+ let other = dict_node;
1399
+ return new Error(new KeyTypeMismatch(key, "map", node_type_name(other)));
1400
+ }
1401
+ },
1402
+ );
1403
+ }