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,1601 @@
1
+ import * as $option from "../gleam_stdlib/gleam/option.mjs";
2
+ import { None, Some } from "../gleam_stdlib/gleam/option.mjs";
3
+ import * as $order from "../gleam_stdlib/gleam/order.mjs";
4
+ import * as $string from "../gleam_stdlib/gleam/string.mjs";
5
+ import * as $should from "../gleeunit/gleeunit/should.mjs";
6
+ import * as $simplifile from "../simplifile/simplifile.mjs";
7
+ import { Ok, Error, toList, Empty as $Empty, makeError } from "./gleam.mjs";
8
+ import * as $error from "./skillc/error.mjs";
9
+ import * as $parser from "./skillc/parser.mjs";
10
+ import * as $semver from "./skillc/semver.mjs";
11
+ import * as $types from "./skillc/types.mjs";
12
+ import * as $version_constraint from "./skillc/version_constraint.mjs";
13
+
14
+ const FILEPATH = "test/parser_test.gleam";
15
+
16
+ export function parse_empty_yaml_fails_test() {
17
+ let result = $parser.parse_skill_yaml("");
18
+ return $should.be_error(result);
19
+ }
20
+
21
+ export function valid_semver_test() {
22
+ $should.be_ok($semver.parse("1.0.0"));
23
+ $should.be_ok($semver.parse("0.1.0"));
24
+ return $should.be_ok($semver.parse("10.20.30"));
25
+ }
26
+
27
+ export function valid_semver_prerelease_test() {
28
+ $should.be_ok($semver.parse("1.0.0-alpha"));
29
+ return $should.be_ok($semver.parse("1.0.0-beta.1"));
30
+ }
31
+
32
+ export function valid_semver_build_metadata_test() {
33
+ $should.be_ok($semver.parse("1.0.0+build"));
34
+ return $should.be_ok($semver.parse("1.0.0+build.123"));
35
+ }
36
+
37
+ export function valid_semver_build_metadata_with_dashes_test() {
38
+ $should.be_ok($semver.parse("1.0.0+build-123"));
39
+ return $should.be_ok($semver.parse("1.0.0+20130313144700-abc"));
40
+ }
41
+
42
+ export function valid_semver_prerelease_and_build_test() {
43
+ $should.be_ok($semver.parse("1.0.0-alpha+build"));
44
+ return $should.be_ok($semver.parse("1.0.0-rc.1+build-456"));
45
+ }
46
+
47
+ export function invalid_semver_format_test() {
48
+ $should.be_error($semver.parse("not-a-version"));
49
+ $should.be_error($semver.parse("1.0"));
50
+ $should.be_error($semver.parse("1"));
51
+ return $should.be_error($semver.parse(""));
52
+ }
53
+
54
+ export function invalid_semver_error_message_test() {
55
+ let $ = $semver.parse("bad");
56
+ let field;
57
+ let msg;
58
+ if ($ instanceof Error) {
59
+ let $1 = $[0];
60
+ if ($1 instanceof $error.ValidationError) {
61
+ field = $1.field;
62
+ msg = $1.message;
63
+ } else {
64
+ throw makeError(
65
+ "let_assert",
66
+ FILEPATH,
67
+ "parser_test",
68
+ 174,
69
+ "invalid_semver_error_message_test",
70
+ "Pattern match failed, no pattern matched the value.",
71
+ {
72
+ value: $,
73
+ start: 5717,
74
+ end: 5790,
75
+ pattern_start: 5728,
76
+ pattern_end: 5768
77
+ }
78
+ )
79
+ }
80
+ } else {
81
+ throw makeError(
82
+ "let_assert",
83
+ FILEPATH,
84
+ "parser_test",
85
+ 174,
86
+ "invalid_semver_error_message_test",
87
+ "Pattern match failed, no pattern matched the value.",
88
+ {
89
+ value: $,
90
+ start: 5717,
91
+ end: 5790,
92
+ pattern_start: 5728,
93
+ pattern_end: 5768
94
+ }
95
+ )
96
+ }
97
+ $should.equal(field, "version");
98
+ $should.be_true($string.contains(msg, "Invalid semver"));
99
+ return $should.be_true($string.contains(msg, "bad"));
100
+ }
101
+
102
+ export function error_to_string_parse_error_test() {
103
+ let err = new $error.ParseError("skill.yaml", "unexpected token");
104
+ let s = $error.to_string(err);
105
+ $should.be_true($string.contains(s, "skill.yaml"));
106
+ return $should.be_true($string.contains(s, "unexpected token"));
107
+ }
108
+
109
+ export function error_to_string_validation_error_test() {
110
+ let err = new $error.ValidationError("version", "Invalid semver format: bad");
111
+ let s = $error.to_string(err);
112
+ $should.be_true($string.contains(s, "version"));
113
+ return $should.be_true($string.contains(s, "Invalid semver"));
114
+ }
115
+
116
+ export function error_to_string_template_error_test() {
117
+ let err = new $error.TemplateError(42, "Unclosed block");
118
+ let s = $error.to_string(err);
119
+ $should.be_true($string.contains(s, "42"));
120
+ return $should.be_true($string.contains(s, "Unclosed block"));
121
+ }
122
+
123
+ export function parse_invalid_provider_metadata_fails_test() {
124
+ let result = $parser.parse_metadata_yaml(
125
+ "{{invalid: yaml: [",
126
+ new $types.OpenClaw(),
127
+ );
128
+ $should.be_error(result);
129
+ let file;
130
+ if (result instanceof Error) {
131
+ let $ = result[0];
132
+ if ($ instanceof $error.ParseError) {
133
+ file = $.file;
134
+ } else {
135
+ throw makeError(
136
+ "let_assert",
137
+ FILEPATH,
138
+ "parser_test",
139
+ 230,
140
+ "parse_invalid_provider_metadata_fails_test",
141
+ "Pattern match failed, no pattern matched the value.",
142
+ {
143
+ value: result,
144
+ start: 7841,
145
+ end: 7896,
146
+ pattern_start: 7852,
147
+ pattern_end: 7887
148
+ }
149
+ )
150
+ }
151
+ } else {
152
+ throw makeError(
153
+ "let_assert",
154
+ FILEPATH,
155
+ "parser_test",
156
+ 230,
157
+ "parse_invalid_provider_metadata_fails_test",
158
+ "Pattern match failed, no pattern matched the value.",
159
+ {
160
+ value: result,
161
+ start: 7841,
162
+ end: 7896,
163
+ pattern_start: 7852,
164
+ pattern_end: 7887
165
+ }
166
+ )
167
+ }
168
+ return $should.equal(file, "providers/openclaw/metadata.yaml");
169
+ }
170
+
171
+ export function has_frontmatter_false_for_empty_test() {
172
+ return $should.be_false($parser.has_frontmatter(""));
173
+ }
174
+
175
+ export function dependency_default_version_star_test() {
176
+ let yaml = "name: dep-test\ndescription: Test\nversion: 1.0.0\ndependencies:\n - name: no-version-dep\n";
177
+ let $ = $parser.parse_skill_yaml(yaml);
178
+ let skill;
179
+ if ($ instanceof Ok) {
180
+ skill = $[0];
181
+ } else {
182
+ throw makeError(
183
+ "let_assert",
184
+ FILEPATH,
185
+ "parser_test",
186
+ 316,
187
+ "dependency_default_version_star_test",
188
+ "Pattern match failed, no pattern matched the value.",
189
+ {
190
+ value: $,
191
+ start: 10172,
192
+ end: 10224,
193
+ pattern_start: 10183,
194
+ pattern_end: 10192
195
+ }
196
+ )
197
+ }
198
+ let $1 = skill.dependencies;
199
+ let dep;
200
+ if ($1 instanceof $Empty) {
201
+ throw makeError(
202
+ "let_assert",
203
+ FILEPATH,
204
+ "parser_test",
205
+ 317,
206
+ "dependency_default_version_star_test",
207
+ "Pattern match failed, no pattern matched the value.",
208
+ {
209
+ value: $1,
210
+ start: 10227,
211
+ end: 10264,
212
+ pattern_start: 10238,
213
+ pattern_end: 10243
214
+ }
215
+ )
216
+ } else {
217
+ let $2 = $1.tail;
218
+ if ($2 instanceof $Empty) {
219
+ dep = $1.head;
220
+ } else {
221
+ throw makeError(
222
+ "let_assert",
223
+ FILEPATH,
224
+ "parser_test",
225
+ 317,
226
+ "dependency_default_version_star_test",
227
+ "Pattern match failed, no pattern matched the value.",
228
+ {
229
+ value: $1,
230
+ start: 10227,
231
+ end: 10264,
232
+ pattern_start: 10238,
233
+ pattern_end: 10243
234
+ }
235
+ )
236
+ }
237
+ }
238
+ return $should.equal(dep.version, $version_constraint.wildcard());
239
+ }
240
+
241
+ export function config_field_without_name_skipped_test() {
242
+ let yaml = "name: config-test\ndescription: Test\nversion: 1.0.0\nconfig:\n - description: missing name field\n required: true\n - name: valid_field\n description: has a name\n";
243
+ let $ = $parser.parse_skill_yaml(yaml);
244
+ let skill;
245
+ if ($ instanceof Ok) {
246
+ skill = $[0];
247
+ } else {
248
+ throw makeError(
249
+ "let_assert",
250
+ FILEPATH,
251
+ "parser_test",
252
+ 336,
253
+ "config_field_without_name_skipped_test",
254
+ "Pattern match failed, no pattern matched the value.",
255
+ {
256
+ value: $,
257
+ start: 10754,
258
+ end: 10806,
259
+ pattern_start: 10765,
260
+ pattern_end: 10774
261
+ }
262
+ )
263
+ }
264
+ return $should.equal(
265
+ skill.config,
266
+ toList([
267
+ new $types.ConfigField(
268
+ "valid_field",
269
+ "has a name",
270
+ new $types.Optional(),
271
+ false,
272
+ ),
273
+ ]),
274
+ );
275
+ }
276
+
277
+ export function config_field_all_properties_test() {
278
+ let yaml = "name: config-test\ndescription: Test\nversion: 1.0.0\nconfig:\n - name: api_key\n description: API key\n required: true\n secret: true\n - name: cache_ttl\n description: Cache TTL\n required: false\n default: \"300\"\n";
279
+ let $ = $parser.parse_skill_yaml(yaml);
280
+ let skill;
281
+ if ($ instanceof Ok) {
282
+ skill = $[0];
283
+ } else {
284
+ throw makeError(
285
+ "let_assert",
286
+ FILEPATH,
287
+ "parser_test",
288
+ 363,
289
+ "config_field_all_properties_test",
290
+ "Pattern match failed, no pattern matched the value.",
291
+ {
292
+ value: $,
293
+ start: 11326,
294
+ end: 11378,
295
+ pattern_start: 11337,
296
+ pattern_end: 11346
297
+ }
298
+ )
299
+ }
300
+ let $1 = skill.config;
301
+ let first;
302
+ let second;
303
+ if ($1 instanceof $Empty) {
304
+ throw makeError(
305
+ "let_assert",
306
+ FILEPATH,
307
+ "parser_test",
308
+ 364,
309
+ "config_field_all_properties_test",
310
+ "Pattern match failed, no pattern matched the value.",
311
+ {
312
+ value: $1,
313
+ start: 11381,
314
+ end: 11422,
315
+ pattern_start: 11392,
316
+ pattern_end: 11407
317
+ }
318
+ )
319
+ } else {
320
+ let $2 = $1.tail;
321
+ if ($2 instanceof $Empty) {
322
+ throw makeError(
323
+ "let_assert",
324
+ FILEPATH,
325
+ "parser_test",
326
+ 364,
327
+ "config_field_all_properties_test",
328
+ "Pattern match failed, no pattern matched the value.",
329
+ {
330
+ value: $1,
331
+ start: 11381,
332
+ end: 11422,
333
+ pattern_start: 11392,
334
+ pattern_end: 11407
335
+ }
336
+ )
337
+ } else {
338
+ let $3 = $2.tail;
339
+ if ($3 instanceof $Empty) {
340
+ first = $1.head;
341
+ second = $2.head;
342
+ } else {
343
+ throw makeError(
344
+ "let_assert",
345
+ FILEPATH,
346
+ "parser_test",
347
+ 364,
348
+ "config_field_all_properties_test",
349
+ "Pattern match failed, no pattern matched the value.",
350
+ {
351
+ value: $1,
352
+ start: 11381,
353
+ end: 11422,
354
+ pattern_start: 11392,
355
+ pattern_end: 11407
356
+ }
357
+ )
358
+ }
359
+ }
360
+ }
361
+ $should.equal(first.name, "api_key");
362
+ $should.equal(first.requirement, new $types.Required());
363
+ $should.equal(first.secret, true);
364
+ $should.equal(second.name, "cache_ttl");
365
+ $should.equal(second.requirement, new $types.OptionalWithDefault("300"));
366
+ return $should.equal(second.secret, false);
367
+ }
368
+
369
+ export function error_to_string_provider_error_test() {
370
+ let err = new $error.ProviderError("my-provider", "not supported");
371
+ let s = $error.to_string(err);
372
+ $should.be_true($string.contains(s, "my-provider"));
373
+ return $should.be_true($string.contains(s, "not supported"));
374
+ }
375
+
376
+ export function error_to_string_file_error_test() {
377
+ let err = new $error.FileError("/some/path.yaml", new $simplifile.Enoent());
378
+ let s = $error.to_string(err);
379
+ return $should.be_true($string.contains(s, "/some/path.yaml"));
380
+ }
381
+
382
+ export function semver_leading_zeros_rejected_test() {
383
+ $should.be_error($semver.parse("01.0.0"));
384
+ $should.be_error($semver.parse("1.01.0"));
385
+ return $should.be_error($semver.parse("1.0.01"));
386
+ }
387
+
388
+ export function semver_empty_prerelease_rejected_test() {
389
+ return $should.be_error($semver.parse("1.0.0-"));
390
+ }
391
+
392
+ export function semver_empty_build_metadata_rejected_test() {
393
+ return $should.be_error($semver.parse("1.0.0+"));
394
+ }
395
+
396
+ export function has_frontmatter_with_leading_whitespace_test() {
397
+ $should.be_true($parser.has_frontmatter(" ---\ntitle: Test\n---"));
398
+ $should.be_true($parser.has_frontmatter("\n---\ntitle: Test\n---"));
399
+ return $should.be_true($parser.has_frontmatter(" \n ---\ntitle: Test\n---"));
400
+ }
401
+
402
+ export function has_frontmatter_with_dashes_only_no_newline_test() {
403
+ return $should.be_true($parser.has_frontmatter("---"));
404
+ }
405
+
406
+ export function empty_skill_name_rejected_test() {
407
+ let yaml = "name: \"\"\ndescription: Test\nversion: 1.0.0\n";
408
+ let result = $parser.parse_skill_yaml(yaml);
409
+ $should.be_error(result);
410
+ let field;
411
+ let msg;
412
+ if (result instanceof Error) {
413
+ let $ = result[0];
414
+ if ($ instanceof $error.ValidationError) {
415
+ field = $.field;
416
+ msg = $.message;
417
+ } else {
418
+ throw makeError(
419
+ "let_assert",
420
+ FILEPATH,
421
+ "parser_test",
422
+ 434,
423
+ "empty_skill_name_rejected_test",
424
+ "Pattern match failed, no pattern matched the value.",
425
+ {
426
+ value: result,
427
+ start: 13891,
428
+ end: 13951,
429
+ pattern_start: 13902,
430
+ pattern_end: 13942
431
+ }
432
+ )
433
+ }
434
+ } else {
435
+ throw makeError(
436
+ "let_assert",
437
+ FILEPATH,
438
+ "parser_test",
439
+ 434,
440
+ "empty_skill_name_rejected_test",
441
+ "Pattern match failed, no pattern matched the value.",
442
+ {
443
+ value: result,
444
+ start: 13891,
445
+ end: 13951,
446
+ pattern_start: 13902,
447
+ pattern_end: 13942
448
+ }
449
+ )
450
+ }
451
+ $should.equal(field, "name");
452
+ return $should.be_true($string.contains(msg, "must not be empty"));
453
+ }
454
+
455
+ export function whitespace_only_skill_name_rejected_test() {
456
+ let yaml = "name: \" \"\ndescription: Test\nversion: 1.0.0\n";
457
+ let result = $parser.parse_skill_yaml(yaml);
458
+ $should.be_error(result);
459
+ let field;
460
+ if (result instanceof Error) {
461
+ let $ = result[0];
462
+ if ($ instanceof $error.ValidationError) {
463
+ field = $.field;
464
+ } else {
465
+ throw makeError(
466
+ "let_assert",
467
+ FILEPATH,
468
+ "parser_test",
469
+ 447,
470
+ "whitespace_only_skill_name_rejected_test",
471
+ "Pattern match failed, no pattern matched the value.",
472
+ {
473
+ value: result,
474
+ start: 14236,
475
+ end: 14297,
476
+ pattern_start: 14247,
477
+ pattern_end: 14288
478
+ }
479
+ )
480
+ }
481
+ } else {
482
+ throw makeError(
483
+ "let_assert",
484
+ FILEPATH,
485
+ "parser_test",
486
+ 447,
487
+ "whitespace_only_skill_name_rejected_test",
488
+ "Pattern match failed, no pattern matched the value.",
489
+ {
490
+ value: result,
491
+ start: 14236,
492
+ end: 14297,
493
+ pattern_start: 14247,
494
+ pattern_end: 14288
495
+ }
496
+ )
497
+ }
498
+ return $should.equal(field, "name");
499
+ }
500
+
501
+ export function empty_description_rejected_test() {
502
+ let yaml = "name: test\ndescription: \"\"\nversion: 1.0.0\n";
503
+ let result = $parser.parse_skill_yaml(yaml);
504
+ $should.be_error(result);
505
+ let field;
506
+ let msg;
507
+ if (result instanceof Error) {
508
+ let $ = result[0];
509
+ if ($ instanceof $error.ValidationError) {
510
+ field = $.field;
511
+ msg = $.message;
512
+ } else {
513
+ throw makeError(
514
+ "let_assert",
515
+ FILEPATH,
516
+ "parser_test",
517
+ 459,
518
+ "empty_description_rejected_test",
519
+ "Pattern match failed, no pattern matched the value.",
520
+ {
521
+ value: result,
522
+ start: 14511,
523
+ end: 14571,
524
+ pattern_start: 14522,
525
+ pattern_end: 14562
526
+ }
527
+ )
528
+ }
529
+ } else {
530
+ throw makeError(
531
+ "let_assert",
532
+ FILEPATH,
533
+ "parser_test",
534
+ 459,
535
+ "empty_description_rejected_test",
536
+ "Pattern match failed, no pattern matched the value.",
537
+ {
538
+ value: result,
539
+ start: 14511,
540
+ end: 14571,
541
+ pattern_start: 14522,
542
+ pattern_end: 14562
543
+ }
544
+ )
545
+ }
546
+ $should.equal(field, "description");
547
+ return $should.be_true($string.contains(msg, "must not be empty"));
548
+ }
549
+
550
+ export function empty_license_normalized_to_none_test() {
551
+ let yaml = "name: test\ndescription: A test\nversion: 1.0.0\nlicense: \"\"\n";
552
+ let $ = $parser.parse_skill_yaml(yaml);
553
+ let skill;
554
+ if ($ instanceof Ok) {
555
+ skill = $[0];
556
+ } else {
557
+ throw makeError(
558
+ "let_assert",
559
+ FILEPATH,
560
+ "parser_test",
561
+ 471,
562
+ "empty_license_normalized_to_none_test",
563
+ "Pattern match failed, no pattern matched the value.",
564
+ {
565
+ value: $,
566
+ start: 14803,
567
+ end: 14855,
568
+ pattern_start: 14814,
569
+ pattern_end: 14823
570
+ }
571
+ )
572
+ }
573
+ return $should.equal(skill.license, new None());
574
+ }
575
+
576
+ export function empty_homepage_normalized_to_none_test() {
577
+ let yaml = "name: test\ndescription: A test\nversion: 1.0.0\nhomepage: \"\"\n";
578
+ let $ = $parser.parse_skill_yaml(yaml);
579
+ let skill;
580
+ if ($ instanceof Ok) {
581
+ skill = $[0];
582
+ } else {
583
+ throw makeError(
584
+ "let_assert",
585
+ FILEPATH,
586
+ "parser_test",
587
+ 482,
588
+ "empty_homepage_normalized_to_none_test",
589
+ "Pattern match failed, no pattern matched the value.",
590
+ {
591
+ value: $,
592
+ start: 15028,
593
+ end: 15080,
594
+ pattern_start: 15039,
595
+ pattern_end: 15048
596
+ }
597
+ )
598
+ }
599
+ return $should.equal(skill.homepage, new None());
600
+ }
601
+
602
+ export function empty_repository_normalized_to_none_test() {
603
+ let yaml = "name: test\ndescription: A test\nversion: 1.0.0\nrepository: \"\"\n";
604
+ let $ = $parser.parse_skill_yaml(yaml);
605
+ let skill;
606
+ if ($ instanceof Ok) {
607
+ skill = $[0];
608
+ } else {
609
+ throw makeError(
610
+ "let_assert",
611
+ FILEPATH,
612
+ "parser_test",
613
+ 493,
614
+ "empty_repository_normalized_to_none_test",
615
+ "Pattern match failed, no pattern matched the value.",
616
+ {
617
+ value: $,
618
+ start: 15258,
619
+ end: 15310,
620
+ pattern_start: 15269,
621
+ pattern_end: 15278
622
+ }
623
+ )
624
+ }
625
+ return $should.equal(skill.repository, new None());
626
+ }
627
+
628
+ export function duplicate_dependency_names_rejected_test() {
629
+ let yaml = "name: test\ndescription: A test\nversion: 1.0.0\ndependencies:\n - name: my-dep\n version: ^1.0.0\n - name: my-dep\n version: ^2.0.0\n";
630
+ let result = $parser.parse_skill_yaml(yaml);
631
+ $should.be_error(result);
632
+ let field;
633
+ let msg;
634
+ if (result instanceof Error) {
635
+ let $ = result[0];
636
+ if ($ instanceof $error.ValidationError) {
637
+ field = $.field;
638
+ msg = $.message;
639
+ } else {
640
+ throw makeError(
641
+ "let_assert",
642
+ FILEPATH,
643
+ "parser_test",
644
+ 510,
645
+ "duplicate_dependency_names_rejected_test",
646
+ "Pattern match failed, no pattern matched the value.",
647
+ {
648
+ value: result,
649
+ start: 15632,
650
+ end: 15692,
651
+ pattern_start: 15643,
652
+ pattern_end: 15683
653
+ }
654
+ )
655
+ }
656
+ } else {
657
+ throw makeError(
658
+ "let_assert",
659
+ FILEPATH,
660
+ "parser_test",
661
+ 510,
662
+ "duplicate_dependency_names_rejected_test",
663
+ "Pattern match failed, no pattern matched the value.",
664
+ {
665
+ value: result,
666
+ start: 15632,
667
+ end: 15692,
668
+ pattern_start: 15643,
669
+ pattern_end: 15683
670
+ }
671
+ )
672
+ }
673
+ $should.equal(field, "dependencies");
674
+ $should.be_true($string.contains(msg, "Duplicate dependency"));
675
+ return $should.be_true($string.contains(msg, "my-dep"));
676
+ }
677
+
678
+ export function duplicate_config_field_names_rejected_test() {
679
+ let yaml = "name: test\ndescription: A test\nversion: 1.0.0\nconfig:\n - name: api_key\n description: First\n - name: api_key\n description: Second\n";
680
+ let result = $parser.parse_skill_yaml(yaml);
681
+ $should.be_error(result);
682
+ let field;
683
+ let msg;
684
+ if (result instanceof Error) {
685
+ let $ = result[0];
686
+ if ($ instanceof $error.ValidationError) {
687
+ field = $.field;
688
+ msg = $.message;
689
+ } else {
690
+ throw makeError(
691
+ "let_assert",
692
+ FILEPATH,
693
+ "parser_test",
694
+ 529,
695
+ "duplicate_config_field_names_rejected_test",
696
+ "Pattern match failed, no pattern matched the value.",
697
+ {
698
+ value: result,
699
+ start: 16130,
700
+ end: 16190,
701
+ pattern_start: 16141,
702
+ pattern_end: 16181
703
+ }
704
+ )
705
+ }
706
+ } else {
707
+ throw makeError(
708
+ "let_assert",
709
+ FILEPATH,
710
+ "parser_test",
711
+ 529,
712
+ "duplicate_config_field_names_rejected_test",
713
+ "Pattern match failed, no pattern matched the value.",
714
+ {
715
+ value: result,
716
+ start: 16130,
717
+ end: 16190,
718
+ pattern_start: 16141,
719
+ pattern_end: 16181
720
+ }
721
+ )
722
+ }
723
+ $should.equal(field, "config");
724
+ $should.be_true($string.contains(msg, "Duplicate config field"));
725
+ return $should.be_true($string.contains(msg, "api_key"));
726
+ }
727
+
728
+ export function self_dependency_rejected_test() {
729
+ let yaml = "name: my-skill\ndescription: A skill\nversion: 1.0.0\ndependencies:\n - name: my-skill\n version: ^1.0.0\n";
730
+ let result = $parser.parse_skill_yaml(yaml);
731
+ $should.be_error(result);
732
+ let msg;
733
+ if (result instanceof Error) {
734
+ let $ = result[0];
735
+ if ($ instanceof $error.ValidationError) {
736
+ let $1 = $.field;
737
+ if ($1 === "dependencies") {
738
+ msg = $.message;
739
+ } else {
740
+ throw makeError(
741
+ "let_assert",
742
+ FILEPATH,
743
+ "parser_test",
744
+ 544,
745
+ "self_dependency_rejected_test",
746
+ "Pattern match failed, no pattern matched the value.",
747
+ {
748
+ value: result,
749
+ start: 16781,
750
+ end: 16850,
751
+ pattern_start: 16792,
752
+ pattern_end: 16841
753
+ }
754
+ )
755
+ }
756
+ } else {
757
+ throw makeError(
758
+ "let_assert",
759
+ FILEPATH,
760
+ "parser_test",
761
+ 544,
762
+ "self_dependency_rejected_test",
763
+ "Pattern match failed, no pattern matched the value.",
764
+ {
765
+ value: result,
766
+ start: 16781,
767
+ end: 16850,
768
+ pattern_start: 16792,
769
+ pattern_end: 16841
770
+ }
771
+ )
772
+ }
773
+ } else {
774
+ throw makeError(
775
+ "let_assert",
776
+ FILEPATH,
777
+ "parser_test",
778
+ 544,
779
+ "self_dependency_rejected_test",
780
+ "Pattern match failed, no pattern matched the value.",
781
+ {
782
+ value: result,
783
+ start: 16781,
784
+ end: 16850,
785
+ pattern_start: 16792,
786
+ pattern_end: 16841
787
+ }
788
+ )
789
+ }
790
+ $should.be_true($string.contains(msg, "depend on itself"));
791
+ return $should.be_true($string.contains(msg, "my-skill"));
792
+ }
793
+
794
+ export function non_self_dependency_passes_test() {
795
+ let yaml = "name: my-skill\ndescription: A skill\nversion: 1.0.0\ndependencies:\n - name: other-skill\n version: ^1.0.0\n";
796
+ let result = $parser.parse_skill_yaml(yaml);
797
+ return $should.be_ok(result);
798
+ }
799
+
800
+ export function semver_compare_lt_test() {
801
+ let $ = $semver.parse("1.0.0");
802
+ let a;
803
+ if ($ instanceof Ok) {
804
+ a = $[0];
805
+ } else {
806
+ throw makeError(
807
+ "let_assert",
808
+ FILEPATH,
809
+ "parser_test",
810
+ 561,
811
+ "semver_compare_lt_test",
812
+ "Pattern match failed, no pattern matched the value.",
813
+ {
814
+ value: $,
815
+ start: 17450,
816
+ end: 17490,
817
+ pattern_start: 17461,
818
+ pattern_end: 17466
819
+ }
820
+ )
821
+ }
822
+ let $1 = $semver.parse("2.0.0");
823
+ let b;
824
+ if ($1 instanceof Ok) {
825
+ b = $1[0];
826
+ } else {
827
+ throw makeError(
828
+ "let_assert",
829
+ FILEPATH,
830
+ "parser_test",
831
+ 562,
832
+ "semver_compare_lt_test",
833
+ "Pattern match failed, no pattern matched the value.",
834
+ {
835
+ value: $1,
836
+ start: 17493,
837
+ end: 17533,
838
+ pattern_start: 17504,
839
+ pattern_end: 17509
840
+ }
841
+ )
842
+ }
843
+ return $should.equal($semver.compare(a, b), new $order.Lt());
844
+ }
845
+
846
+ export function semver_compare_eq_test() {
847
+ let $ = $semver.parse("1.0.0");
848
+ let a;
849
+ if ($ instanceof Ok) {
850
+ a = $[0];
851
+ } else {
852
+ throw makeError(
853
+ "let_assert",
854
+ FILEPATH,
855
+ "parser_test",
856
+ 567,
857
+ "semver_compare_eq_test",
858
+ "Pattern match failed, no pattern matched the value.",
859
+ {
860
+ value: $,
861
+ start: 17620,
862
+ end: 17660,
863
+ pattern_start: 17631,
864
+ pattern_end: 17636
865
+ }
866
+ )
867
+ }
868
+ let $1 = $semver.parse("1.0.0");
869
+ let b;
870
+ if ($1 instanceof Ok) {
871
+ b = $1[0];
872
+ } else {
873
+ throw makeError(
874
+ "let_assert",
875
+ FILEPATH,
876
+ "parser_test",
877
+ 568,
878
+ "semver_compare_eq_test",
879
+ "Pattern match failed, no pattern matched the value.",
880
+ {
881
+ value: $1,
882
+ start: 17663,
883
+ end: 17703,
884
+ pattern_start: 17674,
885
+ pattern_end: 17679
886
+ }
887
+ )
888
+ }
889
+ return $should.equal($semver.compare(a, b), new $order.Eq());
890
+ }
891
+
892
+ export function semver_compare_prerelease_lt_release_test() {
893
+ let $ = $semver.parse("1.0.0-alpha");
894
+ let a;
895
+ if ($ instanceof Ok) {
896
+ a = $[0];
897
+ } else {
898
+ throw makeError(
899
+ "let_assert",
900
+ FILEPATH,
901
+ "parser_test",
902
+ 573,
903
+ "semver_compare_prerelease_lt_release_test",
904
+ "Pattern match failed, no pattern matched the value.",
905
+ {
906
+ value: $,
907
+ start: 17809,
908
+ end: 17855,
909
+ pattern_start: 17820,
910
+ pattern_end: 17825
911
+ }
912
+ )
913
+ }
914
+ let $1 = $semver.parse("1.0.0");
915
+ let b;
916
+ if ($1 instanceof Ok) {
917
+ b = $1[0];
918
+ } else {
919
+ throw makeError(
920
+ "let_assert",
921
+ FILEPATH,
922
+ "parser_test",
923
+ 574,
924
+ "semver_compare_prerelease_lt_release_test",
925
+ "Pattern match failed, no pattern matched the value.",
926
+ {
927
+ value: $1,
928
+ start: 17858,
929
+ end: 17898,
930
+ pattern_start: 17869,
931
+ pattern_end: 17874
932
+ }
933
+ )
934
+ }
935
+ return $should.equal($semver.compare(a, b), new $order.Lt());
936
+ }
937
+
938
+ export function semver_major_accessor_test() {
939
+ let $ = $semver.parse("3.2.1");
940
+ let v;
941
+ if ($ instanceof Ok) {
942
+ v = $[0];
943
+ } else {
944
+ throw makeError(
945
+ "let_assert",
946
+ FILEPATH,
947
+ "parser_test",
948
+ 579,
949
+ "semver_major_accessor_test",
950
+ "Pattern match failed, no pattern matched the value.",
951
+ {
952
+ value: $,
953
+ start: 17989,
954
+ end: 18029,
955
+ pattern_start: 18000,
956
+ pattern_end: 18005
957
+ }
958
+ )
959
+ }
960
+ return $should.equal($semver.major(v), 3);
961
+ }
962
+
963
+ export function semver_minor_accessor_test() {
964
+ let $ = $semver.parse("3.2.1");
965
+ let v;
966
+ if ($ instanceof Ok) {
967
+ v = $[0];
968
+ } else {
969
+ throw makeError(
970
+ "let_assert",
971
+ FILEPATH,
972
+ "parser_test",
973
+ 584,
974
+ "semver_minor_accessor_test",
975
+ "Pattern match failed, no pattern matched the value.",
976
+ {
977
+ value: $,
978
+ start: 18108,
979
+ end: 18148,
980
+ pattern_start: 18119,
981
+ pattern_end: 18124
982
+ }
983
+ )
984
+ }
985
+ return $should.equal($semver.minor(v), 2);
986
+ }
987
+
988
+ export function semver_patch_accessor_test() {
989
+ let $ = $semver.parse("3.2.1");
990
+ let v;
991
+ if ($ instanceof Ok) {
992
+ v = $[0];
993
+ } else {
994
+ throw makeError(
995
+ "let_assert",
996
+ FILEPATH,
997
+ "parser_test",
998
+ 589,
999
+ "semver_patch_accessor_test",
1000
+ "Pattern match failed, no pattern matched the value.",
1001
+ {
1002
+ value: $,
1003
+ start: 18227,
1004
+ end: 18267,
1005
+ pattern_start: 18238,
1006
+ pattern_end: 18243
1007
+ }
1008
+ )
1009
+ }
1010
+ return $should.equal($semver.patch(v), 1);
1011
+ }
1012
+
1013
+ export function semver_negative_version_rejected_test() {
1014
+ return $should.be_error($semver.parse("-1.0.0"));
1015
+ }
1016
+
1017
+ export function error_to_string_registry_error_test() {
1018
+ let err = new $error.RegistryError("connection failed");
1019
+ let s = $error.to_string(err);
1020
+ $should.be_true($string.contains(s, "Registry"));
1021
+ return $should.be_true($string.contains(s, "connection failed"));
1022
+ }
1023
+
1024
+ export function error_to_string_import_error_test() {
1025
+ let err = new $error.ImportError("SKILL.md", "missing frontmatter");
1026
+ let s = $error.to_string(err);
1027
+ $should.be_true($string.contains(s, "SKILL.md"));
1028
+ return $should.be_true($string.contains(s, "missing frontmatter"));
1029
+ }
1030
+
1031
+ function read_fixture(path) {
1032
+ let full_path = "test/fixtures/" + path;
1033
+ let $ = $simplifile.read(full_path);
1034
+ let content;
1035
+ if ($ instanceof Ok) {
1036
+ content = $[0];
1037
+ } else {
1038
+ throw makeError(
1039
+ "let_assert",
1040
+ FILEPATH,
1041
+ "parser_test",
1042
+ 621,
1043
+ "read_fixture",
1044
+ "Pattern match failed, no pattern matched the value.",
1045
+ {
1046
+ value: $,
1047
+ start: 19374,
1048
+ end: 19425,
1049
+ pattern_start: 19385,
1050
+ pattern_end: 19396
1051
+ }
1052
+ )
1053
+ }
1054
+ return content;
1055
+ }
1056
+
1057
+ export function parse_valid_skill_yaml_test() {
1058
+ let content = read_fixture("valid-skill/skill.yaml");
1059
+ let result = $parser.parse_skill_yaml(content);
1060
+ let skill;
1061
+ if (result instanceof Ok) {
1062
+ skill = result[0];
1063
+ } else {
1064
+ throw makeError(
1065
+ "let_assert",
1066
+ FILEPATH,
1067
+ "parser_test",
1068
+ 19,
1069
+ "parse_valid_skill_yaml_test",
1070
+ "Pattern match failed, no pattern matched the value.",
1071
+ {
1072
+ value: result,
1073
+ start: 562,
1074
+ end: 591,
1075
+ pattern_start: 573,
1076
+ pattern_end: 582
1077
+ }
1078
+ )
1079
+ }
1080
+ $should.equal(skill.name, "test-skill");
1081
+ $should.equal(skill.description, "A test skill for validation");
1082
+ $should.equal($semver.to_string(skill.version), "1.2.3");
1083
+ $should.equal(skill.license, new Some("MIT"));
1084
+ $should.equal(skill.homepage, new Some("https://example.com/test-skill"));
1085
+ return $should.equal(
1086
+ skill.repository,
1087
+ new Some("https://github.com/example/test-skill"),
1088
+ );
1089
+ }
1090
+
1091
+ export function parse_valid_skill_yaml_metadata_test() {
1092
+ let content = read_fixture("valid-skill/skill.yaml");
1093
+ let $ = $parser.parse_skill_yaml(content);
1094
+ let skill;
1095
+ if ($ instanceof Ok) {
1096
+ skill = $[0];
1097
+ } else {
1098
+ throw makeError(
1099
+ "let_assert",
1100
+ FILEPATH,
1101
+ "parser_test",
1102
+ 30,
1103
+ "parse_valid_skill_yaml_metadata_test",
1104
+ "Pattern match failed, no pattern matched the value.",
1105
+ {
1106
+ value: $,
1107
+ start: 1057,
1108
+ end: 1112,
1109
+ pattern_start: 1068,
1110
+ pattern_end: 1077
1111
+ }
1112
+ )
1113
+ }
1114
+ let $1 = skill.metadata;
1115
+ let metadata;
1116
+ if ($1 instanceof Some) {
1117
+ metadata = $1[0];
1118
+ } else {
1119
+ throw makeError(
1120
+ "let_assert",
1121
+ FILEPATH,
1122
+ "parser_test",
1123
+ 31,
1124
+ "parse_valid_skill_yaml_metadata_test",
1125
+ "Pattern match failed, no pattern matched the value.",
1126
+ {
1127
+ value: $1,
1128
+ start: 1115,
1129
+ end: 1157,
1130
+ pattern_start: 1126,
1131
+ pattern_end: 1140
1132
+ }
1133
+ )
1134
+ }
1135
+ $should.equal(metadata.author, new Some("Test Author"));
1136
+ $should.equal(metadata.author_email, new Some("test@example.com"));
1137
+ return $should.equal(metadata.tags, toList(["test", "example", "demo"]));
1138
+ }
1139
+
1140
+ export function parse_valid_skill_yaml_config_test() {
1141
+ let content = read_fixture("valid-skill/skill.yaml");
1142
+ let $ = $parser.parse_skill_yaml(content);
1143
+ let skill;
1144
+ if ($ instanceof Ok) {
1145
+ skill = $[0];
1146
+ } else {
1147
+ throw makeError(
1148
+ "let_assert",
1149
+ FILEPATH,
1150
+ "parser_test",
1151
+ 56,
1152
+ "parse_valid_skill_yaml_config_test",
1153
+ "Pattern match failed, no pattern matched the value.",
1154
+ {
1155
+ value: $,
1156
+ start: 1892,
1157
+ end: 1947,
1158
+ pattern_start: 1903,
1159
+ pattern_end: 1912
1160
+ }
1161
+ )
1162
+ }
1163
+ return $should.equal(
1164
+ skill.config,
1165
+ toList([
1166
+ new $types.ConfigField(
1167
+ "api_key",
1168
+ "API key for authentication",
1169
+ new $types.Required(),
1170
+ true,
1171
+ ),
1172
+ new $types.ConfigField(
1173
+ "timeout",
1174
+ "Request timeout in seconds",
1175
+ new $types.OptionalWithDefault("30"),
1176
+ false,
1177
+ ),
1178
+ ]),
1179
+ );
1180
+ }
1181
+
1182
+ export function parse_minimal_skill_yaml_test() {
1183
+ let content = read_fixture("minimal-skill/skill.yaml");
1184
+ let $ = $parser.parse_skill_yaml(content);
1185
+ let skill;
1186
+ if ($ instanceof Ok) {
1187
+ skill = $[0];
1188
+ } else {
1189
+ throw makeError(
1190
+ "let_assert",
1191
+ FILEPATH,
1192
+ "parser_test",
1193
+ 75,
1194
+ "parse_minimal_skill_yaml_test",
1195
+ "Pattern match failed, no pattern matched the value.",
1196
+ {
1197
+ value: $,
1198
+ start: 2419,
1199
+ end: 2474,
1200
+ pattern_start: 2430,
1201
+ pattern_end: 2439
1202
+ }
1203
+ )
1204
+ }
1205
+ $should.equal(skill.name, "minimal");
1206
+ $should.equal(skill.description, "A minimal skill");
1207
+ $should.equal($semver.to_string(skill.version), "0.1.0");
1208
+ $should.equal(skill.license, new None());
1209
+ $should.equal(skill.homepage, new None());
1210
+ $should.equal(skill.repository, new None());
1211
+ $should.equal(skill.metadata, new None());
1212
+ $should.equal(skill.dependencies, toList([]));
1213
+ return $should.equal(skill.config, toList([]));
1214
+ }
1215
+
1216
+ export function parse_invalid_yaml_fails_test() {
1217
+ let content = read_fixture("invalid-yaml/skill.yaml");
1218
+ let result = $parser.parse_skill_yaml(content);
1219
+ $should.be_error(result);
1220
+ let file;
1221
+ if (result instanceof Error) {
1222
+ let $ = result[0];
1223
+ if ($ instanceof $error.ParseError) {
1224
+ file = $.file;
1225
+ } else {
1226
+ throw makeError(
1227
+ "let_assert",
1228
+ FILEPATH,
1229
+ "parser_test",
1230
+ 91,
1231
+ "parse_invalid_yaml_fails_test",
1232
+ "Pattern match failed, no pattern matched the value.",
1233
+ {
1234
+ value: result,
1235
+ start: 3020,
1236
+ end: 3075,
1237
+ pattern_start: 3031,
1238
+ pattern_end: 3066
1239
+ }
1240
+ )
1241
+ }
1242
+ } else {
1243
+ throw makeError(
1244
+ "let_assert",
1245
+ FILEPATH,
1246
+ "parser_test",
1247
+ 91,
1248
+ "parse_invalid_yaml_fails_test",
1249
+ "Pattern match failed, no pattern matched the value.",
1250
+ {
1251
+ value: result,
1252
+ start: 3020,
1253
+ end: 3075,
1254
+ pattern_start: 3031,
1255
+ pattern_end: 3066
1256
+ }
1257
+ )
1258
+ }
1259
+ return $should.equal(file, "skill.yaml");
1260
+ }
1261
+
1262
+ export function parse_missing_name_fails_test() {
1263
+ let content = read_fixture("missing-name/skill.yaml");
1264
+ let result = $parser.parse_skill_yaml(content);
1265
+ $should.be_error(result);
1266
+ let field;
1267
+ let msg;
1268
+ if (result instanceof Error) {
1269
+ let $ = result[0];
1270
+ if ($ instanceof $error.ValidationError) {
1271
+ field = $.field;
1272
+ msg = $.message;
1273
+ } else {
1274
+ throw makeError(
1275
+ "let_assert",
1276
+ FILEPATH,
1277
+ "parser_test",
1278
+ 99,
1279
+ "parse_missing_name_fails_test",
1280
+ "Pattern match failed, no pattern matched the value.",
1281
+ {
1282
+ value: result,
1283
+ start: 3287,
1284
+ end: 3347,
1285
+ pattern_start: 3298,
1286
+ pattern_end: 3338
1287
+ }
1288
+ )
1289
+ }
1290
+ } else {
1291
+ throw makeError(
1292
+ "let_assert",
1293
+ FILEPATH,
1294
+ "parser_test",
1295
+ 99,
1296
+ "parse_missing_name_fails_test",
1297
+ "Pattern match failed, no pattern matched the value.",
1298
+ {
1299
+ value: result,
1300
+ start: 3287,
1301
+ end: 3347,
1302
+ pattern_start: 3298,
1303
+ pattern_end: 3338
1304
+ }
1305
+ )
1306
+ }
1307
+ $should.equal(field, "name");
1308
+ return $should.be_true($string.contains(msg, "name"));
1309
+ }
1310
+
1311
+ export function parse_missing_description_fails_test() {
1312
+ let content = read_fixture("missing-description/skill.yaml");
1313
+ let result = $parser.parse_skill_yaml(content);
1314
+ $should.be_error(result);
1315
+ let field;
1316
+ let msg;
1317
+ if (result instanceof Error) {
1318
+ let $ = result[0];
1319
+ if ($ instanceof $error.ValidationError) {
1320
+ field = $.field;
1321
+ msg = $.message;
1322
+ } else {
1323
+ throw makeError(
1324
+ "let_assert",
1325
+ FILEPATH,
1326
+ "parser_test",
1327
+ 108,
1328
+ "parse_missing_description_fails_test",
1329
+ "Pattern match failed, no pattern matched the value.",
1330
+ {
1331
+ value: result,
1332
+ start: 3615,
1333
+ end: 3675,
1334
+ pattern_start: 3626,
1335
+ pattern_end: 3666
1336
+ }
1337
+ )
1338
+ }
1339
+ } else {
1340
+ throw makeError(
1341
+ "let_assert",
1342
+ FILEPATH,
1343
+ "parser_test",
1344
+ 108,
1345
+ "parse_missing_description_fails_test",
1346
+ "Pattern match failed, no pattern matched the value.",
1347
+ {
1348
+ value: result,
1349
+ start: 3615,
1350
+ end: 3675,
1351
+ pattern_start: 3626,
1352
+ pattern_end: 3666
1353
+ }
1354
+ )
1355
+ }
1356
+ $should.equal(field, "description");
1357
+ return $should.be_true($string.contains(msg, "description"));
1358
+ }
1359
+
1360
+ export function parse_missing_version_fails_test() {
1361
+ let content = read_fixture("missing-version/skill.yaml");
1362
+ let result = $parser.parse_skill_yaml(content);
1363
+ $should.be_error(result);
1364
+ let field;
1365
+ let msg;
1366
+ if (result instanceof Error) {
1367
+ let $ = result[0];
1368
+ if ($ instanceof $error.ValidationError) {
1369
+ field = $.field;
1370
+ msg = $.message;
1371
+ } else {
1372
+ throw makeError(
1373
+ "let_assert",
1374
+ FILEPATH,
1375
+ "parser_test",
1376
+ 117,
1377
+ "parse_missing_version_fails_test",
1378
+ "Pattern match failed, no pattern matched the value.",
1379
+ {
1380
+ value: result,
1381
+ start: 3949,
1382
+ end: 4009,
1383
+ pattern_start: 3960,
1384
+ pattern_end: 4000
1385
+ }
1386
+ )
1387
+ }
1388
+ } else {
1389
+ throw makeError(
1390
+ "let_assert",
1391
+ FILEPATH,
1392
+ "parser_test",
1393
+ 117,
1394
+ "parse_missing_version_fails_test",
1395
+ "Pattern match failed, no pattern matched the value.",
1396
+ {
1397
+ value: result,
1398
+ start: 3949,
1399
+ end: 4009,
1400
+ pattern_start: 3960,
1401
+ pattern_end: 4000
1402
+ }
1403
+ )
1404
+ }
1405
+ $should.equal(field, "version");
1406
+ return $should.be_true($string.contains(msg, "version"));
1407
+ }
1408
+
1409
+ export function invalid_semver_test() {
1410
+ let content = read_fixture("bad-version/skill.yaml");
1411
+ let result = $parser.parse_skill_yaml(content);
1412
+ $should.be_error(result);
1413
+ let field;
1414
+ if (result instanceof Error) {
1415
+ let $ = result[0];
1416
+ if ($ instanceof $error.ValidationError) {
1417
+ field = $.field;
1418
+ } else {
1419
+ throw makeError(
1420
+ "let_assert",
1421
+ FILEPATH,
1422
+ "parser_test",
1423
+ 162,
1424
+ "invalid_semver_test",
1425
+ "Pattern match failed, no pattern matched the value.",
1426
+ {
1427
+ value: result,
1428
+ start: 5370,
1429
+ end: 5431,
1430
+ pattern_start: 5381,
1431
+ pattern_end: 5422
1432
+ }
1433
+ )
1434
+ }
1435
+ } else {
1436
+ throw makeError(
1437
+ "let_assert",
1438
+ FILEPATH,
1439
+ "parser_test",
1440
+ 162,
1441
+ "invalid_semver_test",
1442
+ "Pattern match failed, no pattern matched the value.",
1443
+ {
1444
+ value: result,
1445
+ start: 5370,
1446
+ end: 5431,
1447
+ pattern_start: 5381,
1448
+ pattern_end: 5422
1449
+ }
1450
+ )
1451
+ }
1452
+ return $should.equal(field, "version");
1453
+ }
1454
+
1455
+ export function parse_openclaw_metadata_test() {
1456
+ let content = read_fixture("valid-skill/providers/openclaw/metadata.yaml");
1457
+ let result = $parser.parse_metadata_yaml(content, new $types.OpenClaw());
1458
+ return $should.be_ok(result);
1459
+ }
1460
+
1461
+ export function parse_claude_code_metadata_test() {
1462
+ let content = read_fixture("valid-skill/providers/claude-code/metadata.yaml");
1463
+ let result = $parser.parse_metadata_yaml(content, new $types.ClaudeCode());
1464
+ return $should.be_ok(result);
1465
+ }
1466
+
1467
+ export function parse_codex_metadata_test() {
1468
+ let content = read_fixture("valid-skill/providers/codex/metadata.yaml");
1469
+ let result = $parser.parse_metadata_yaml(content, new $types.Codex());
1470
+ return $should.be_ok(result);
1471
+ }
1472
+
1473
+ export function has_frontmatter_detects_yaml_frontmatter_test() {
1474
+ let content = read_fixture("frontmatter-instructions/INSTRUCTIONS.md");
1475
+ return $should.be_true($parser.has_frontmatter(content));
1476
+ }
1477
+
1478
+ export function has_frontmatter_false_for_normal_markdown_test() {
1479
+ let content = read_fixture("valid-skill/INSTRUCTIONS.md");
1480
+ return $should.be_false($parser.has_frontmatter(content));
1481
+ }
1482
+
1483
+ function assert_parse_vc(input) {
1484
+ let $ = $version_constraint.parse(input);
1485
+ let vc;
1486
+ if ($ instanceof Ok) {
1487
+ vc = $[0];
1488
+ } else {
1489
+ throw makeError(
1490
+ "let_assert",
1491
+ FILEPATH,
1492
+ "parser_test",
1493
+ 626,
1494
+ "assert_parse_vc",
1495
+ "Pattern match failed, no pattern matched the value.",
1496
+ {
1497
+ value: $,
1498
+ start: 19517,
1499
+ end: 19568,
1500
+ pattern_start: 19528,
1501
+ pattern_end: 19534
1502
+ }
1503
+ )
1504
+ }
1505
+ return vc;
1506
+ }
1507
+
1508
+ export function parse_valid_skill_yaml_dependencies_test() {
1509
+ let content = read_fixture("valid-skill/skill.yaml");
1510
+ let $ = $parser.parse_skill_yaml(content);
1511
+ let skill;
1512
+ if ($ instanceof Ok) {
1513
+ skill = $[0];
1514
+ } else {
1515
+ throw makeError(
1516
+ "let_assert",
1517
+ FILEPATH,
1518
+ "parser_test",
1519
+ 39,
1520
+ "parse_valid_skill_yaml_dependencies_test",
1521
+ "Pattern match failed, no pattern matched the value.",
1522
+ {
1523
+ value: $,
1524
+ start: 1446,
1525
+ end: 1501,
1526
+ pattern_start: 1457,
1527
+ pattern_end: 1466
1528
+ }
1529
+ )
1530
+ }
1531
+ return $should.equal(
1532
+ skill.dependencies,
1533
+ toList([
1534
+ new $types.Dependency("helper-skill", assert_parse_vc("^1.0.0"), false),
1535
+ new $types.Dependency("extra-skill", assert_parse_vc("~2.1.0"), true),
1536
+ ]),
1537
+ );
1538
+ }
1539
+
1540
+ export function dependency_with_name_and_version_test() {
1541
+ let yaml = "name: dep-test\ndescription: Test\nversion: 1.0.0\ndependencies:\n - name: my-dep\n version: ^1.0.0\n - name: optional-dep\n version: ~2.0.0\n optional: true\n";
1542
+ let $ = $parser.parse_skill_yaml(yaml);
1543
+ let skill;
1544
+ if ($ instanceof Ok) {
1545
+ skill = $[0];
1546
+ } else {
1547
+ throw makeError(
1548
+ "let_assert",
1549
+ FILEPATH,
1550
+ "parser_test",
1551
+ 250,
1552
+ "dependency_with_name_and_version_test",
1553
+ "Pattern match failed, no pattern matched the value.",
1554
+ {
1555
+ value: $,
1556
+ start: 8372,
1557
+ end: 8424,
1558
+ pattern_start: 8383,
1559
+ pattern_end: 8392
1560
+ }
1561
+ )
1562
+ }
1563
+ return $should.equal(
1564
+ skill.dependencies,
1565
+ toList([
1566
+ new $types.Dependency("my-dep", assert_parse_vc("^1.0.0"), false),
1567
+ new $types.Dependency("optional-dep", assert_parse_vc("~2.0.0"), true),
1568
+ ]),
1569
+ );
1570
+ }
1571
+
1572
+ export function dependency_without_name_skipped_test() {
1573
+ let yaml = "name: dep-test\ndescription: Test\nversion: 1.0.0\ndependencies:\n - version: ^1.0.0\n - name: valid-dep\n version: ~2.0.0\n";
1574
+ let $ = $parser.parse_skill_yaml(yaml);
1575
+ let skill;
1576
+ if ($ instanceof Ok) {
1577
+ skill = $[0];
1578
+ } else {
1579
+ throw makeError(
1580
+ "let_assert",
1581
+ FILEPATH,
1582
+ "parser_test",
1583
+ 297,
1584
+ "dependency_without_name_skipped_test",
1585
+ "Pattern match failed, no pattern matched the value.",
1586
+ {
1587
+ value: $,
1588
+ start: 9741,
1589
+ end: 9793,
1590
+ pattern_start: 9752,
1591
+ pattern_end: 9761
1592
+ }
1593
+ )
1594
+ }
1595
+ return $should.equal(
1596
+ skill.dependencies,
1597
+ toList([
1598
+ new $types.Dependency("valid-dep", assert_parse_vc("~2.0.0"), false),
1599
+ ]),
1600
+ );
1601
+ }