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.
- package/README.md +24 -0
- package/bin/skillc.mjs +3 -0
- package/build/dev/javascript/argv/_gleam_artefacts/argv.cache +0 -0
- package/build/dev/javascript/argv/_gleam_artefacts/argv.cache_inline +0 -0
- package/build/dev/javascript/argv/_gleam_artefacts/argv.cache_meta +0 -0
- package/build/dev/javascript/argv/argv.erl +12 -0
- package/build/dev/javascript/argv/argv.mjs +31 -0
- package/build/dev/javascript/argv/argv_ffi.erl +27 -0
- package/build/dev/javascript/argv/argv_ffi.mjs +20 -0
- package/build/dev/javascript/argv/gleam.mjs +1 -0
- package/build/dev/javascript/filepath/_gleam_artefacts/filepath.cache +0 -0
- package/build/dev/javascript/filepath/_gleam_artefacts/filepath.cache_inline +0 -0
- package/build/dev/javascript/filepath/_gleam_artefacts/filepath.cache_meta +0 -0
- package/build/dev/javascript/filepath/filepath.erl +425 -0
- package/build/dev/javascript/filepath/filepath.mjs +529 -0
- package/build/dev/javascript/filepath/filepath_ffi.erl +9 -0
- package/build/dev/javascript/filepath/filepath_ffi.mjs +6 -0
- package/build/dev/javascript/filepath/gleam.mjs +1 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bit_array.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bool.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@bytes_tree.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dict.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@dynamic@decode.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@float.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@function.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@int.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@io.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@list.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@option.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@order.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@pair.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@result.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@set.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@string_tree.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_inline +0 -0
- package/build/dev/javascript/gleam_stdlib/_gleam_artefacts/gleam@uri.cache_meta +0 -0
- package/build/dev/javascript/gleam_stdlib/dict.mjs +710 -0
- package/build/dev/javascript/gleam_stdlib/gleam/bit_array.mjs +285 -0
- package/build/dev/javascript/gleam_stdlib/gleam/bool.mjs +313 -0
- package/build/dev/javascript/gleam_stdlib/gleam/bytes_tree.mjs +225 -0
- package/build/dev/javascript/gleam_stdlib/gleam/dict.mjs +456 -0
- package/build/dev/javascript/gleam_stdlib/gleam/dynamic/decode.mjs +985 -0
- package/build/dev/javascript/gleam_stdlib/gleam/dynamic.mjs +35 -0
- package/build/dev/javascript/gleam_stdlib/gleam/float.mjs +572 -0
- package/build/dev/javascript/gleam_stdlib/gleam/function.mjs +6 -0
- package/build/dev/javascript/gleam_stdlib/gleam/int.mjs +832 -0
- package/build/dev/javascript/gleam_stdlib/gleam/io.mjs +8 -0
- package/build/dev/javascript/gleam_stdlib/gleam/list.mjs +3160 -0
- package/build/dev/javascript/gleam_stdlib/gleam/option.mjs +418 -0
- package/build/dev/javascript/gleam_stdlib/gleam/order.mjs +178 -0
- package/build/dev/javascript/gleam_stdlib/gleam/pair.mjs +102 -0
- package/build/dev/javascript/gleam_stdlib/gleam/result.mjs +480 -0
- package/build/dev/javascript/gleam_stdlib/gleam/set.mjs +416 -0
- package/build/dev/javascript/gleam_stdlib/gleam/string.mjs +723 -0
- package/build/dev/javascript/gleam_stdlib/gleam/string_tree.mjs +133 -0
- package/build/dev/javascript/gleam_stdlib/gleam/uri.mjs +1155 -0
- package/build/dev/javascript/gleam_stdlib/gleam.mjs +1 -0
- package/build/dev/javascript/gleam_stdlib/gleam@bit_array.erl +347 -0
- package/build/dev/javascript/gleam_stdlib/gleam@bool.erl +352 -0
- package/build/dev/javascript/gleam_stdlib/gleam@bytes_tree.erl +211 -0
- package/build/dev/javascript/gleam_stdlib/gleam@dict.erl +521 -0
- package/build/dev/javascript/gleam_stdlib/gleam@dynamic.erl +106 -0
- package/build/dev/javascript/gleam_stdlib/gleam@dynamic@decode.erl +1112 -0
- package/build/dev/javascript/gleam_stdlib/gleam@float.erl +764 -0
- package/build/dev/javascript/gleam_stdlib/gleam@function.erl +18 -0
- package/build/dev/javascript/gleam_stdlib/gleam@int.erl +1004 -0
- package/build/dev/javascript/gleam_stdlib/gleam@io.erl +80 -0
- package/build/dev/javascript/gleam_stdlib/gleam@list.erl +2832 -0
- package/build/dev/javascript/gleam_stdlib/gleam@option.erl +413 -0
- package/build/dev/javascript/gleam_stdlib/gleam@order.erl +200 -0
- package/build/dev/javascript/gleam_stdlib/gleam@pair.erl +110 -0
- package/build/dev/javascript/gleam_stdlib/gleam@result.erl +532 -0
- package/build/dev/javascript/gleam_stdlib/gleam@set.erl +433 -0
- package/build/dev/javascript/gleam_stdlib/gleam@string.erl +1012 -0
- package/build/dev/javascript/gleam_stdlib/gleam@string_tree.erl +207 -0
- package/build/dev/javascript/gleam_stdlib/gleam@uri.erl +1049 -0
- package/build/dev/javascript/gleam_stdlib/gleam_stdlib.erl +529 -0
- package/build/dev/javascript/gleam_stdlib/gleam_stdlib.mjs +1050 -0
- package/build/dev/javascript/gleam_version +1 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit.cache +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit.cache_inline +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit.cache_meta +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@gleam_panic.cache +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@gleam_panic.cache_inline +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@gleam_panic.cache_meta +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@reporting.cache +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@reporting.cache_inline +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@internal@reporting.cache_meta +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@should.cache +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@should.cache_inline +0 -0
- package/build/dev/javascript/gleeunit/_gleam_artefacts/gleeunit@should.cache_meta +0 -0
- package/build/dev/javascript/gleeunit/gleam.mjs +1 -0
- package/build/dev/javascript/gleeunit/gleeunit/internal/gleam_panic.mjs +180 -0
- package/build/dev/javascript/gleeunit/gleeunit/internal/gleeunit_gleam_panic_ffi.erl +49 -0
- package/build/dev/javascript/gleeunit/gleeunit/internal/gleeunit_gleam_panic_ffi.mjs +91 -0
- package/build/dev/javascript/gleeunit/gleeunit/internal/reporting.mjs +256 -0
- package/build/dev/javascript/gleeunit/gleeunit/should.mjs +135 -0
- package/build/dev/javascript/gleeunit/gleeunit.erl +89 -0
- package/build/dev/javascript/gleeunit/gleeunit.mjs +62 -0
- package/build/dev/javascript/gleeunit/gleeunit@internal@gleam_panic.erl +56 -0
- package/build/dev/javascript/gleeunit/gleeunit@internal@reporting.erl +343 -0
- package/build/dev/javascript/gleeunit/gleeunit@should.erl +153 -0
- package/build/dev/javascript/gleeunit/gleeunit_ffi.erl +21 -0
- package/build/dev/javascript/gleeunit/gleeunit_ffi.mjs +100 -0
- package/build/dev/javascript/gleeunit/gleeunit_progress.erl +72 -0
- package/build/dev/javascript/prelude.mjs +1575 -0
- package/build/dev/javascript/simplifile/_gleam_artefacts/simplifile.cache +0 -0
- package/build/dev/javascript/simplifile/_gleam_artefacts/simplifile.cache_inline +0 -0
- package/build/dev/javascript/simplifile/_gleam_artefacts/simplifile.cache_meta +0 -0
- package/build/dev/javascript/simplifile/gleam.mjs +1 -0
- package/build/dev/javascript/simplifile/simplifile.erl +893 -0
- package/build/dev/javascript/simplifile/simplifile.mjs +893 -0
- package/build/dev/javascript/simplifile/simplifile_erl.erl +244 -0
- package/build/dev/javascript/simplifile/simplifile_js.mjs +400 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/cli_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/cli_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/cli_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/cli_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/compiler_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/compiler_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/compiler_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/compiler_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/config_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/config_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/config_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/config_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/importer_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/importer_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/importer_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/importer_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/parser_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/parser_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/parser_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/parser_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/path_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/path_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/path_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/path_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/provider_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/provider_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/provider_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/provider_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/registry_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/registry_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/registry_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/registry_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/scaffold_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/scaffold_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/scaffold_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/scaffold_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@compiler.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@compiler.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@compiler.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@compiler.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@config.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@config.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@config.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@config.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@error.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@error.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@error.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@error.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@fs.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@fs.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@fs.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@fs.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@importer.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@importer.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@importer.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@importer.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@parser.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@parser.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@parser.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@parser.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@path.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@path.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@path.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@path.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@platform.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@platform.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@platform.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@platform.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@provider.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@provider.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@provider.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@provider.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@registry.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@registry.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@registry.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@registry.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@scaffold.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@scaffold.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@scaffold.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@scaffold.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@semver.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@semver.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@semver.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@semver.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@shell.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@shell.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@shell.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@shell.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@template.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@template.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@template.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@template.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@types.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@types.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@types.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@types.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@version_constraint.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@version_constraint.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@version_constraint.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@version_constraint.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@yaml.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@yaml.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@yaml.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc@yaml.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/skillc_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/template_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/template_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/template_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/template_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/version_constraint_test.cache +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/version_constraint_test.cache_inline +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/version_constraint_test.cache_meta +0 -0
- package/build/dev/javascript/skillc/_gleam_artefacts/version_constraint_test.cache_warnings +0 -0
- package/build/dev/javascript/skillc/cli_test.mjs +461 -0
- package/build/dev/javascript/skillc/compiler_test.mjs +3089 -0
- package/build/dev/javascript/skillc/config_test.mjs +308 -0
- package/build/dev/javascript/skillc/gleam.main.mjs +2 -0
- package/build/dev/javascript/skillc/gleam.mjs +1 -0
- package/build/dev/javascript/skillc/importer_test.mjs +1643 -0
- package/build/dev/javascript/skillc/parser_test.mjs +1601 -0
- package/build/dev/javascript/skillc/path_test.mjs +26 -0
- package/build/dev/javascript/skillc/provider_test.mjs +221 -0
- package/build/dev/javascript/skillc/registry_test.mjs +359 -0
- package/build/dev/javascript/skillc/scaffold_test.mjs +405 -0
- package/build/dev/javascript/skillc/skillc/compiler.mjs +724 -0
- package/build/dev/javascript/skillc/skillc/config.mjs +172 -0
- package/build/dev/javascript/skillc/skillc/error.mjs +145 -0
- package/build/dev/javascript/skillc/skillc/fs.mjs +40 -0
- package/build/dev/javascript/skillc/skillc/importer.mjs +975 -0
- package/build/dev/javascript/skillc/skillc/parser.mjs +427 -0
- package/build/dev/javascript/skillc/skillc/path.mjs +52 -0
- package/build/dev/javascript/skillc/skillc/platform.mjs +44 -0
- package/build/dev/javascript/skillc/skillc/provider.mjs +86 -0
- package/build/dev/javascript/skillc/skillc/registry.mjs +701 -0
- package/build/dev/javascript/skillc/skillc/scaffold.mjs +117 -0
- package/build/dev/javascript/skillc/skillc/semver.mjs +293 -0
- package/build/dev/javascript/skillc/skillc/shell.mjs +14 -0
- package/build/dev/javascript/skillc/skillc/template.mjs +1177 -0
- package/build/dev/javascript/skillc/skillc/types.mjs +249 -0
- package/build/dev/javascript/skillc/skillc/version_constraint.mjs +290 -0
- package/build/dev/javascript/skillc/skillc/yaml.mjs +51 -0
- package/build/dev/javascript/skillc/skillc.mjs +873 -0
- package/build/dev/javascript/skillc/skillc_ffi.mjs +30 -0
- package/build/dev/javascript/skillc/skillc_test.mjs +5 -0
- package/build/dev/javascript/skillc/template_test.mjs +1638 -0
- package/build/dev/javascript/skillc/version_constraint_test.mjs +1325 -0
- package/build/dev/javascript/yay/_gleam_artefacts/yay.cache +0 -0
- package/build/dev/javascript/yay/_gleam_artefacts/yay.cache_inline +0 -0
- package/build/dev/javascript/yay/_gleam_artefacts/yay.cache_meta +0 -0
- package/build/dev/javascript/yay/gleam.mjs +1 -0
- package/build/dev/javascript/yay/yaml_ffi.erl +106 -0
- package/build/dev/javascript/yay/yaml_ffi.mjs +373 -0
- package/build/dev/javascript/yay/yay.erl +1218 -0
- package/build/dev/javascript/yay/yay.mjs +1403 -0
- package/package.json +28 -0
- package/src/skillc/compiler.gleam +561 -0
- package/src/skillc/config.gleam +91 -0
- package/src/skillc/error.gleam +37 -0
- package/src/skillc/fs.gleam +31 -0
- package/src/skillc/importer.gleam +709 -0
- package/src/skillc/parser.gleam +279 -0
- package/src/skillc/path.gleam +30 -0
- package/src/skillc/platform.gleam +25 -0
- package/src/skillc/provider.gleam +58 -0
- package/src/skillc/registry.gleam +472 -0
- package/src/skillc/scaffold.gleam +112 -0
- package/src/skillc/semver.gleam +165 -0
- package/src/skillc/shell.gleam +12 -0
- package/src/skillc/template.gleam +885 -0
- package/src/skillc/types.gleam +93 -0
- package/src/skillc/version_constraint.gleam +163 -0
- package/src/skillc/yaml.gleam +27 -0
- package/src/skillc.gleam +466 -0
- package/src/skillc_ffi.mjs +30 -0
|
@@ -0,0 +1,1638 @@
|
|
|
1
|
+
import * as $option from "../gleam_stdlib/gleam/option.mjs";
|
|
2
|
+
import { None, Some } from "../gleam_stdlib/gleam/option.mjs";
|
|
3
|
+
import * as $string from "../gleam_stdlib/gleam/string.mjs";
|
|
4
|
+
import * as $should from "../gleeunit/gleeunit/should.mjs";
|
|
5
|
+
import * as $yay from "../yay/yay.mjs";
|
|
6
|
+
import { Ok, Error, toList, makeError } from "./gleam.mjs";
|
|
7
|
+
import * as $error from "./skillc/error.mjs";
|
|
8
|
+
import * as $semver from "./skillc/semver.mjs";
|
|
9
|
+
import * as $template from "./skillc/template.mjs";
|
|
10
|
+
import * as $types from "./skillc/types.mjs";
|
|
11
|
+
import { ConfigField, Optional, Required, Skill, SkillMetadata } from "./skillc/types.mjs";
|
|
12
|
+
import * as $version_constraint from "./skillc/version_constraint.mjs";
|
|
13
|
+
|
|
14
|
+
const FILEPATH = "test/template_test.gleam";
|
|
15
|
+
|
|
16
|
+
export function provider_block_included_test() {
|
|
17
|
+
let content = "before\n{{#provider \"openclaw\"}}openclaw content{{/provider}}\nafter";
|
|
18
|
+
let $ = $template.process_provider_blocks(content, new $types.OpenClaw());
|
|
19
|
+
let result;
|
|
20
|
+
if ($ instanceof Ok) {
|
|
21
|
+
result = $[0];
|
|
22
|
+
} else {
|
|
23
|
+
throw makeError(
|
|
24
|
+
"let_assert",
|
|
25
|
+
FILEPATH,
|
|
26
|
+
"template_test",
|
|
27
|
+
20,
|
|
28
|
+
"provider_block_included_test",
|
|
29
|
+
"Pattern match failed, no pattern matched the value.",
|
|
30
|
+
{ value: $, start: 605, end: 686, pattern_start: 616, pattern_end: 626 }
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
$should.be_true($string.contains(result, "openclaw content"));
|
|
34
|
+
$should.be_true($string.contains(result, "before"));
|
|
35
|
+
return $should.be_true($string.contains(result, "after"));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function provider_block_excluded_test() {
|
|
39
|
+
let content = "before\n{{#provider \"openclaw\"}}openclaw content{{/provider}}\nafter";
|
|
40
|
+
let $ = $template.process_provider_blocks(content, new $types.ClaudeCode());
|
|
41
|
+
let result;
|
|
42
|
+
if ($ instanceof Ok) {
|
|
43
|
+
result = $[0];
|
|
44
|
+
} else {
|
|
45
|
+
throw makeError(
|
|
46
|
+
"let_assert",
|
|
47
|
+
FILEPATH,
|
|
48
|
+
"template_test",
|
|
49
|
+
29,
|
|
50
|
+
"provider_block_excluded_test",
|
|
51
|
+
"Pattern match failed, no pattern matched the value.",
|
|
52
|
+
{ value: $, start: 990, end: 1077, pattern_start: 1001, pattern_end: 1011 }
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
$should.be_false($string.contains(result, "openclaw content"));
|
|
56
|
+
$should.be_true($string.contains(result, "before"));
|
|
57
|
+
return $should.be_true($string.contains(result, "after"));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function multi_provider_block_included_test() {
|
|
61
|
+
let content = "{{#provider \"openclaw\" \"codex\"}}shared content{{/provider}}";
|
|
62
|
+
let $ = $template.process_provider_blocks(content, new $types.OpenClaw());
|
|
63
|
+
let result_openclaw;
|
|
64
|
+
if ($ instanceof Ok) {
|
|
65
|
+
result_openclaw = $[0];
|
|
66
|
+
} else {
|
|
67
|
+
throw makeError(
|
|
68
|
+
"let_assert",
|
|
69
|
+
FILEPATH,
|
|
70
|
+
"template_test",
|
|
71
|
+
39,
|
|
72
|
+
"multi_provider_block_included_test",
|
|
73
|
+
"Pattern match failed, no pattern matched the value.",
|
|
74
|
+
{
|
|
75
|
+
value: $,
|
|
76
|
+
start: 1381,
|
|
77
|
+
end: 1475,
|
|
78
|
+
pattern_start: 1392,
|
|
79
|
+
pattern_end: 1411
|
|
80
|
+
}
|
|
81
|
+
)
|
|
82
|
+
}
|
|
83
|
+
let $1 = $template.process_provider_blocks(content, new $types.Codex());
|
|
84
|
+
let result_codex;
|
|
85
|
+
if ($1 instanceof Ok) {
|
|
86
|
+
result_codex = $1[0];
|
|
87
|
+
} else {
|
|
88
|
+
throw makeError(
|
|
89
|
+
"let_assert",
|
|
90
|
+
FILEPATH,
|
|
91
|
+
"template_test",
|
|
92
|
+
41,
|
|
93
|
+
"multi_provider_block_included_test",
|
|
94
|
+
"Pattern match failed, no pattern matched the value.",
|
|
95
|
+
{
|
|
96
|
+
value: $1,
|
|
97
|
+
start: 1478,
|
|
98
|
+
end: 1566,
|
|
99
|
+
pattern_start: 1489,
|
|
100
|
+
pattern_end: 1505
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
}
|
|
104
|
+
$should.be_true($string.contains(result_openclaw, "shared content"));
|
|
105
|
+
return $should.be_true($string.contains(result_codex, "shared content"));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export function multi_provider_block_excluded_test() {
|
|
109
|
+
let content = "{{#provider \"openclaw\" \"codex\"}}shared content{{/provider}}";
|
|
110
|
+
let $ = $template.process_provider_blocks(content, new $types.ClaudeCode());
|
|
111
|
+
let result;
|
|
112
|
+
if ($ instanceof Ok) {
|
|
113
|
+
result = $[0];
|
|
114
|
+
} else {
|
|
115
|
+
throw makeError(
|
|
116
|
+
"let_assert",
|
|
117
|
+
FILEPATH,
|
|
118
|
+
"template_test",
|
|
119
|
+
50,
|
|
120
|
+
"multi_provider_block_excluded_test",
|
|
121
|
+
"Pattern match failed, no pattern matched the value.",
|
|
122
|
+
{
|
|
123
|
+
value: $,
|
|
124
|
+
start: 1839,
|
|
125
|
+
end: 1926,
|
|
126
|
+
pattern_start: 1850,
|
|
127
|
+
pattern_end: 1860
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
}
|
|
131
|
+
return $should.be_false($string.contains(result, "shared content"));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export function empty_provider_block_test() {
|
|
135
|
+
let content = "before{{#provider \"openclaw\"}}{{/provider}}after";
|
|
136
|
+
let $ = $template.process_provider_blocks(content, new $types.OpenClaw());
|
|
137
|
+
let result;
|
|
138
|
+
if ($ instanceof Ok) {
|
|
139
|
+
result = $[0];
|
|
140
|
+
} else {
|
|
141
|
+
throw makeError(
|
|
142
|
+
"let_assert",
|
|
143
|
+
FILEPATH,
|
|
144
|
+
"template_test",
|
|
145
|
+
57,
|
|
146
|
+
"empty_provider_block_test",
|
|
147
|
+
"Pattern match failed, no pattern matched the value.",
|
|
148
|
+
{
|
|
149
|
+
value: $,
|
|
150
|
+
start: 2099,
|
|
151
|
+
end: 2180,
|
|
152
|
+
pattern_start: 2110,
|
|
153
|
+
pattern_end: 2120
|
|
154
|
+
}
|
|
155
|
+
)
|
|
156
|
+
}
|
|
157
|
+
$should.be_true($string.contains(result, "before"));
|
|
158
|
+
return $should.be_true($string.contains(result, "after"));
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
export function nested_provider_blocks_test() {
|
|
162
|
+
let content = "{{#provider \"openclaw\"}}outer{{#provider \"openclaw\"}}inner{{/provider}}end{{/provider}}";
|
|
163
|
+
let $ = $template.process_provider_blocks(content, new $types.OpenClaw());
|
|
164
|
+
let result;
|
|
165
|
+
if ($ instanceof Ok) {
|
|
166
|
+
result = $[0];
|
|
167
|
+
} else {
|
|
168
|
+
throw makeError(
|
|
169
|
+
"let_assert",
|
|
170
|
+
FILEPATH,
|
|
171
|
+
"template_test",
|
|
172
|
+
65,
|
|
173
|
+
"nested_provider_blocks_test",
|
|
174
|
+
"Pattern match failed, no pattern matched the value.",
|
|
175
|
+
{
|
|
176
|
+
value: $,
|
|
177
|
+
start: 2442,
|
|
178
|
+
end: 2523,
|
|
179
|
+
pattern_start: 2453,
|
|
180
|
+
pattern_end: 2463
|
|
181
|
+
}
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
$should.be_true($string.contains(result, "outer"));
|
|
185
|
+
return $should.be_true($string.contains(result, "inner"));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export function unclosed_provider_block_returns_error_test() {
|
|
189
|
+
let content = "before\n{{#provider \"openclaw\"}}no closing tag";
|
|
190
|
+
let result = $template.process_provider_blocks(content, new $types.OpenClaw());
|
|
191
|
+
return $should.be_error(result);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export function malformed_provider_tag_returns_error_test() {
|
|
195
|
+
let content = "{{#provider \"openclaw\" some content";
|
|
196
|
+
let result = $template.process_provider_blocks(content, new $types.OpenClaw());
|
|
197
|
+
return $should.be_error(result);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
export function unclosed_provider_error_has_line_number_test() {
|
|
201
|
+
let content = "line 1\nline 2\n{{#provider \"openclaw\"}}no close";
|
|
202
|
+
let result = $template.process_provider_blocks(content, new $types.OpenClaw());
|
|
203
|
+
$should.be_error(result);
|
|
204
|
+
let line;
|
|
205
|
+
let msg;
|
|
206
|
+
if (result instanceof Error) {
|
|
207
|
+
let $ = result[0];
|
|
208
|
+
if ($ instanceof $error.TemplateError) {
|
|
209
|
+
line = $.line;
|
|
210
|
+
msg = $.message;
|
|
211
|
+
} else {
|
|
212
|
+
throw makeError(
|
|
213
|
+
"let_assert",
|
|
214
|
+
FILEPATH,
|
|
215
|
+
"template_test",
|
|
216
|
+
628,
|
|
217
|
+
"unclosed_provider_error_has_line_number_test",
|
|
218
|
+
"Pattern match failed, no pattern matched the value.",
|
|
219
|
+
{
|
|
220
|
+
value: result,
|
|
221
|
+
start: 18133,
|
|
222
|
+
end: 18190,
|
|
223
|
+
pattern_start: 18144,
|
|
224
|
+
pattern_end: 18181
|
|
225
|
+
}
|
|
226
|
+
)
|
|
227
|
+
}
|
|
228
|
+
} else {
|
|
229
|
+
throw makeError(
|
|
230
|
+
"let_assert",
|
|
231
|
+
FILEPATH,
|
|
232
|
+
"template_test",
|
|
233
|
+
628,
|
|
234
|
+
"unclosed_provider_error_has_line_number_test",
|
|
235
|
+
"Pattern match failed, no pattern matched the value.",
|
|
236
|
+
{
|
|
237
|
+
value: result,
|
|
238
|
+
start: 18133,
|
|
239
|
+
end: 18190,
|
|
240
|
+
pattern_start: 18144,
|
|
241
|
+
pattern_end: 18181
|
|
242
|
+
}
|
|
243
|
+
)
|
|
244
|
+
}
|
|
245
|
+
$should.equal(line, 3);
|
|
246
|
+
return $should.be_true($string.contains(msg, "Unclosed"));
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
function test_skill() {
|
|
250
|
+
let $ = $semver.parse("1.0.0");
|
|
251
|
+
let v;
|
|
252
|
+
if ($ instanceof Ok) {
|
|
253
|
+
v = $[0];
|
|
254
|
+
} else {
|
|
255
|
+
throw makeError(
|
|
256
|
+
"let_assert",
|
|
257
|
+
FILEPATH,
|
|
258
|
+
"template_test",
|
|
259
|
+
715,
|
|
260
|
+
"test_skill",
|
|
261
|
+
"Pattern match failed, no pattern matched the value.",
|
|
262
|
+
{
|
|
263
|
+
value: $,
|
|
264
|
+
start: 20589,
|
|
265
|
+
end: 20629,
|
|
266
|
+
pattern_start: 20600,
|
|
267
|
+
pattern_end: 20605
|
|
268
|
+
}
|
|
269
|
+
)
|
|
270
|
+
}
|
|
271
|
+
return new Skill(
|
|
272
|
+
"test-skill",
|
|
273
|
+
"A test skill",
|
|
274
|
+
v,
|
|
275
|
+
new Some("MIT"),
|
|
276
|
+
new None(),
|
|
277
|
+
new None(),
|
|
278
|
+
new Some(new SkillMetadata(new Some("Test"), new None(), toList([]))),
|
|
279
|
+
toList([]),
|
|
280
|
+
toList([new ConfigField("api_key", "API key", new Required(), true)]),
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export function if_with_empty_string_is_falsy_test() {
|
|
285
|
+
let meta = new $yay.NodeMap(
|
|
286
|
+
toList([[new $yay.NodeStr("empty_field"), new $yay.NodeStr("")]]),
|
|
287
|
+
);
|
|
288
|
+
let result = $template.render_template(
|
|
289
|
+
"before{{#if meta.empty_field}}hidden{{/if}}after",
|
|
290
|
+
new $types.OpenClaw(),
|
|
291
|
+
test_skill(),
|
|
292
|
+
meta,
|
|
293
|
+
);
|
|
294
|
+
let output;
|
|
295
|
+
if (result instanceof Ok) {
|
|
296
|
+
output = result[0];
|
|
297
|
+
} else {
|
|
298
|
+
throw makeError(
|
|
299
|
+
"let_assert",
|
|
300
|
+
FILEPATH,
|
|
301
|
+
"template_test",
|
|
302
|
+
659,
|
|
303
|
+
"if_with_empty_string_is_falsy_test",
|
|
304
|
+
"Pattern match failed, no pattern matched the value.",
|
|
305
|
+
{
|
|
306
|
+
value: result,
|
|
307
|
+
start: 19130,
|
|
308
|
+
end: 19160,
|
|
309
|
+
pattern_start: 19141,
|
|
310
|
+
pattern_end: 19151
|
|
311
|
+
}
|
|
312
|
+
)
|
|
313
|
+
}
|
|
314
|
+
return $should.equal(output, "beforeafter");
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
function assert_parse_vc(input) {
|
|
318
|
+
let $ = $version_constraint.parse(input);
|
|
319
|
+
let vc;
|
|
320
|
+
if ($ instanceof Ok) {
|
|
321
|
+
vc = $[0];
|
|
322
|
+
} else {
|
|
323
|
+
throw makeError(
|
|
324
|
+
"let_assert",
|
|
325
|
+
FILEPATH,
|
|
326
|
+
"template_test",
|
|
327
|
+
739,
|
|
328
|
+
"assert_parse_vc",
|
|
329
|
+
"Pattern match failed, no pattern matched the value.",
|
|
330
|
+
{
|
|
331
|
+
value: $,
|
|
332
|
+
start: 21146,
|
|
333
|
+
end: 21197,
|
|
334
|
+
pattern_start: 21157,
|
|
335
|
+
pattern_end: 21163
|
|
336
|
+
}
|
|
337
|
+
)
|
|
338
|
+
}
|
|
339
|
+
return vc;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
function test_provider_meta() {
|
|
343
|
+
return new $yay.NodeMap(
|
|
344
|
+
toList([
|
|
345
|
+
[new $yay.NodeStr("emoji"), new $yay.NodeStr("🧪")],
|
|
346
|
+
[
|
|
347
|
+
new $yay.NodeStr("requires"),
|
|
348
|
+
new $yay.NodeMap(
|
|
349
|
+
toList([
|
|
350
|
+
[
|
|
351
|
+
new $yay.NodeStr("bins"),
|
|
352
|
+
new $yay.NodeSeq(
|
|
353
|
+
toList([new $yay.NodeStr("python3"), new $yay.NodeStr("curl")]),
|
|
354
|
+
),
|
|
355
|
+
],
|
|
356
|
+
]),
|
|
357
|
+
),
|
|
358
|
+
],
|
|
359
|
+
]),
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
export function variable_name_test() {
|
|
364
|
+
let result = $template.render_template(
|
|
365
|
+
"Hello {{name}}",
|
|
366
|
+
new $types.OpenClaw(),
|
|
367
|
+
test_skill(),
|
|
368
|
+
test_provider_meta(),
|
|
369
|
+
);
|
|
370
|
+
let output;
|
|
371
|
+
if (result instanceof Ok) {
|
|
372
|
+
output = result[0];
|
|
373
|
+
} else {
|
|
374
|
+
throw makeError(
|
|
375
|
+
"let_assert",
|
|
376
|
+
FILEPATH,
|
|
377
|
+
"template_test",
|
|
378
|
+
95,
|
|
379
|
+
"variable_name_test",
|
|
380
|
+
"Pattern match failed, no pattern matched the value.",
|
|
381
|
+
{
|
|
382
|
+
value: result,
|
|
383
|
+
start: 3468,
|
|
384
|
+
end: 3498,
|
|
385
|
+
pattern_start: 3479,
|
|
386
|
+
pattern_end: 3489
|
|
387
|
+
}
|
|
388
|
+
)
|
|
389
|
+
}
|
|
390
|
+
return $should.be_true($string.contains(output, "Hello test-skill"));
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
export function variable_version_test() {
|
|
394
|
+
let result = $template.render_template(
|
|
395
|
+
"v{{version}}",
|
|
396
|
+
new $types.OpenClaw(),
|
|
397
|
+
test_skill(),
|
|
398
|
+
test_provider_meta(),
|
|
399
|
+
);
|
|
400
|
+
let output;
|
|
401
|
+
if (result instanceof Ok) {
|
|
402
|
+
output = result[0];
|
|
403
|
+
} else {
|
|
404
|
+
throw makeError(
|
|
405
|
+
"let_assert",
|
|
406
|
+
FILEPATH,
|
|
407
|
+
"template_test",
|
|
408
|
+
107,
|
|
409
|
+
"variable_version_test",
|
|
410
|
+
"Pattern match failed, no pattern matched the value.",
|
|
411
|
+
{
|
|
412
|
+
value: result,
|
|
413
|
+
start: 3742,
|
|
414
|
+
end: 3772,
|
|
415
|
+
pattern_start: 3753,
|
|
416
|
+
pattern_end: 3763
|
|
417
|
+
}
|
|
418
|
+
)
|
|
419
|
+
}
|
|
420
|
+
return $should.be_true($string.contains(output, "v1.0.0"));
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
export function variable_description_test() {
|
|
424
|
+
let result = $template.render_template(
|
|
425
|
+
"{{description}}",
|
|
426
|
+
new $types.OpenClaw(),
|
|
427
|
+
test_skill(),
|
|
428
|
+
test_provider_meta(),
|
|
429
|
+
);
|
|
430
|
+
let output;
|
|
431
|
+
if (result instanceof Ok) {
|
|
432
|
+
output = result[0];
|
|
433
|
+
} else {
|
|
434
|
+
throw makeError(
|
|
435
|
+
"let_assert",
|
|
436
|
+
FILEPATH,
|
|
437
|
+
"template_test",
|
|
438
|
+
119,
|
|
439
|
+
"variable_description_test",
|
|
440
|
+
"Pattern match failed, no pattern matched the value.",
|
|
441
|
+
{
|
|
442
|
+
value: result,
|
|
443
|
+
start: 4013,
|
|
444
|
+
end: 4043,
|
|
445
|
+
pattern_start: 4024,
|
|
446
|
+
pattern_end: 4034
|
|
447
|
+
}
|
|
448
|
+
)
|
|
449
|
+
}
|
|
450
|
+
return $should.be_true($string.contains(output, "A test skill"));
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
export function variable_meta_field_test() {
|
|
454
|
+
let result = $template.render_template(
|
|
455
|
+
"Icon: {{meta.emoji}}",
|
|
456
|
+
new $types.OpenClaw(),
|
|
457
|
+
test_skill(),
|
|
458
|
+
test_provider_meta(),
|
|
459
|
+
);
|
|
460
|
+
let output;
|
|
461
|
+
if (result instanceof Ok) {
|
|
462
|
+
output = result[0];
|
|
463
|
+
} else {
|
|
464
|
+
throw makeError(
|
|
465
|
+
"let_assert",
|
|
466
|
+
FILEPATH,
|
|
467
|
+
"template_test",
|
|
468
|
+
131,
|
|
469
|
+
"variable_meta_field_test",
|
|
470
|
+
"Pattern match failed, no pattern matched the value.",
|
|
471
|
+
{
|
|
472
|
+
value: result,
|
|
473
|
+
start: 4294,
|
|
474
|
+
end: 4324,
|
|
475
|
+
pattern_start: 4305,
|
|
476
|
+
pattern_end: 4315
|
|
477
|
+
}
|
|
478
|
+
)
|
|
479
|
+
}
|
|
480
|
+
return $should.be_true($string.contains(output, "Icon: 🧪"));
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
export function undefined_variable_renders_empty_test() {
|
|
484
|
+
let result = $template.render_template(
|
|
485
|
+
"before{{nonexistent}}after",
|
|
486
|
+
new $types.OpenClaw(),
|
|
487
|
+
test_skill(),
|
|
488
|
+
test_provider_meta(),
|
|
489
|
+
);
|
|
490
|
+
let output;
|
|
491
|
+
if (result instanceof Ok) {
|
|
492
|
+
output = result[0];
|
|
493
|
+
} else {
|
|
494
|
+
throw makeError(
|
|
495
|
+
"let_assert",
|
|
496
|
+
FILEPATH,
|
|
497
|
+
"template_test",
|
|
498
|
+
143,
|
|
499
|
+
"undefined_variable_renders_empty_test",
|
|
500
|
+
"Pattern match failed, no pattern matched the value.",
|
|
501
|
+
{
|
|
502
|
+
value: result,
|
|
503
|
+
start: 4592,
|
|
504
|
+
end: 4622,
|
|
505
|
+
pattern_start: 4603,
|
|
506
|
+
pattern_end: 4613
|
|
507
|
+
}
|
|
508
|
+
)
|
|
509
|
+
}
|
|
510
|
+
return $should.equal(output, "beforeafter");
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
export function nested_metadata_access_test() {
|
|
514
|
+
let result = $template.render_template(
|
|
515
|
+
"{{#each meta.requires.bins}}{{this}} {{/each}}",
|
|
516
|
+
new $types.OpenClaw(),
|
|
517
|
+
test_skill(),
|
|
518
|
+
test_provider_meta(),
|
|
519
|
+
);
|
|
520
|
+
let output;
|
|
521
|
+
if (result instanceof Ok) {
|
|
522
|
+
output = result[0];
|
|
523
|
+
} else {
|
|
524
|
+
throw makeError(
|
|
525
|
+
"let_assert",
|
|
526
|
+
FILEPATH,
|
|
527
|
+
"template_test",
|
|
528
|
+
156,
|
|
529
|
+
"nested_metadata_access_test",
|
|
530
|
+
"Pattern match failed, no pattern matched the value.",
|
|
531
|
+
{
|
|
532
|
+
value: result,
|
|
533
|
+
start: 4927,
|
|
534
|
+
end: 4957,
|
|
535
|
+
pattern_start: 4938,
|
|
536
|
+
pattern_end: 4948
|
|
537
|
+
}
|
|
538
|
+
)
|
|
539
|
+
}
|
|
540
|
+
$should.be_true($string.contains(output, "python3"));
|
|
541
|
+
return $should.be_true($string.contains(output, "curl"));
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
export function if_block_truthy_test() {
|
|
545
|
+
let result = $template.render_template(
|
|
546
|
+
"{{#if meta.emoji}}has emoji{{/if}}",
|
|
547
|
+
new $types.OpenClaw(),
|
|
548
|
+
test_skill(),
|
|
549
|
+
test_provider_meta(),
|
|
550
|
+
);
|
|
551
|
+
let output;
|
|
552
|
+
if (result instanceof Ok) {
|
|
553
|
+
output = result[0];
|
|
554
|
+
} else {
|
|
555
|
+
throw makeError(
|
|
556
|
+
"let_assert",
|
|
557
|
+
FILEPATH,
|
|
558
|
+
"template_test",
|
|
559
|
+
173,
|
|
560
|
+
"if_block_truthy_test",
|
|
561
|
+
"Pattern match failed, no pattern matched the value.",
|
|
562
|
+
{
|
|
563
|
+
value: result,
|
|
564
|
+
start: 5455,
|
|
565
|
+
end: 5485,
|
|
566
|
+
pattern_start: 5466,
|
|
567
|
+
pattern_end: 5476
|
|
568
|
+
}
|
|
569
|
+
)
|
|
570
|
+
}
|
|
571
|
+
return $should.be_true($string.contains(output, "has emoji"));
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
export function unless_block_test() {
|
|
575
|
+
let result = $template.render_template(
|
|
576
|
+
"{{#unless meta.nonexistent}}no field{{/unless}}",
|
|
577
|
+
new $types.OpenClaw(),
|
|
578
|
+
test_skill(),
|
|
579
|
+
test_provider_meta(),
|
|
580
|
+
);
|
|
581
|
+
let output;
|
|
582
|
+
if (result instanceof Ok) {
|
|
583
|
+
output = result[0];
|
|
584
|
+
} else {
|
|
585
|
+
throw makeError(
|
|
586
|
+
"let_assert",
|
|
587
|
+
FILEPATH,
|
|
588
|
+
"template_test",
|
|
589
|
+
185,
|
|
590
|
+
"unless_block_test",
|
|
591
|
+
"Pattern match failed, no pattern matched the value.",
|
|
592
|
+
{
|
|
593
|
+
value: result,
|
|
594
|
+
start: 5753,
|
|
595
|
+
end: 5783,
|
|
596
|
+
pattern_start: 5764,
|
|
597
|
+
pattern_end: 5774
|
|
598
|
+
}
|
|
599
|
+
)
|
|
600
|
+
}
|
|
601
|
+
return $should.be_true($string.contains(output, "no field"));
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
export function if_block_falsy_path_test() {
|
|
605
|
+
let result = $template.render_template(
|
|
606
|
+
"before{{#if meta.nonexistent}}hidden{{/if}}after",
|
|
607
|
+
new $types.OpenClaw(),
|
|
608
|
+
test_skill(),
|
|
609
|
+
test_provider_meta(),
|
|
610
|
+
);
|
|
611
|
+
let output;
|
|
612
|
+
if (result instanceof Ok) {
|
|
613
|
+
output = result[0];
|
|
614
|
+
} else {
|
|
615
|
+
throw makeError(
|
|
616
|
+
"let_assert",
|
|
617
|
+
FILEPATH,
|
|
618
|
+
"template_test",
|
|
619
|
+
198,
|
|
620
|
+
"if_block_falsy_path_test",
|
|
621
|
+
"Pattern match failed, no pattern matched the value.",
|
|
622
|
+
{
|
|
623
|
+
value: result,
|
|
624
|
+
start: 6119,
|
|
625
|
+
end: 6149,
|
|
626
|
+
pattern_start: 6130,
|
|
627
|
+
pattern_end: 6140
|
|
628
|
+
}
|
|
629
|
+
)
|
|
630
|
+
}
|
|
631
|
+
return $should.equal(output, "beforeafter");
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
export function if_block_false_bool_test() {
|
|
635
|
+
let _block;
|
|
636
|
+
let _record = test_skill();
|
|
637
|
+
_block = new Skill(
|
|
638
|
+
_record.name,
|
|
639
|
+
_record.description,
|
|
640
|
+
_record.version,
|
|
641
|
+
_record.license,
|
|
642
|
+
_record.homepage,
|
|
643
|
+
_record.repository,
|
|
644
|
+
_record.metadata,
|
|
645
|
+
_record.dependencies,
|
|
646
|
+
toList([new ConfigField("test", "test", new Optional(), false)]),
|
|
647
|
+
);
|
|
648
|
+
let skill = _block;
|
|
649
|
+
let result = $template.render_template(
|
|
650
|
+
"{{#each config}}{{#if this.required}}req{{/if}}{{#unless this.required}}opt{{/unless}}{{/each}}",
|
|
651
|
+
new $types.OpenClaw(),
|
|
652
|
+
skill,
|
|
653
|
+
test_provider_meta(),
|
|
654
|
+
);
|
|
655
|
+
let output;
|
|
656
|
+
if (result instanceof Ok) {
|
|
657
|
+
output = result[0];
|
|
658
|
+
} else {
|
|
659
|
+
throw makeError(
|
|
660
|
+
"let_assert",
|
|
661
|
+
FILEPATH,
|
|
662
|
+
"template_test",
|
|
663
|
+
220,
|
|
664
|
+
"if_block_false_bool_test",
|
|
665
|
+
"Pattern match failed, no pattern matched the value.",
|
|
666
|
+
{
|
|
667
|
+
value: result,
|
|
668
|
+
start: 6691,
|
|
669
|
+
end: 6721,
|
|
670
|
+
pattern_start: 6702,
|
|
671
|
+
pattern_end: 6712
|
|
672
|
+
}
|
|
673
|
+
)
|
|
674
|
+
}
|
|
675
|
+
$should.be_true($string.contains(output, "opt"));
|
|
676
|
+
return $should.be_false($string.contains(output, "req"));
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
export function each_block_test() {
|
|
680
|
+
let result = $template.render_template(
|
|
681
|
+
"{{#each config}}{{this.name}} {{/each}}",
|
|
682
|
+
new $types.OpenClaw(),
|
|
683
|
+
test_skill(),
|
|
684
|
+
test_provider_meta(),
|
|
685
|
+
);
|
|
686
|
+
let output;
|
|
687
|
+
if (result instanceof Ok) {
|
|
688
|
+
output = result[0];
|
|
689
|
+
} else {
|
|
690
|
+
throw makeError(
|
|
691
|
+
"let_assert",
|
|
692
|
+
FILEPATH,
|
|
693
|
+
"template_test",
|
|
694
|
+
233,
|
|
695
|
+
"each_block_test",
|
|
696
|
+
"Pattern match failed, no pattern matched the value.",
|
|
697
|
+
{
|
|
698
|
+
value: result,
|
|
699
|
+
start: 7023,
|
|
700
|
+
end: 7053,
|
|
701
|
+
pattern_start: 7034,
|
|
702
|
+
pattern_end: 7044
|
|
703
|
+
}
|
|
704
|
+
)
|
|
705
|
+
}
|
|
706
|
+
return $should.be_true($string.contains(output, "api_key"));
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
export function each_block_at_index_test() {
|
|
710
|
+
let _block;
|
|
711
|
+
let _record = test_skill();
|
|
712
|
+
_block = new Skill(
|
|
713
|
+
_record.name,
|
|
714
|
+
_record.description,
|
|
715
|
+
_record.version,
|
|
716
|
+
_record.license,
|
|
717
|
+
_record.homepage,
|
|
718
|
+
_record.repository,
|
|
719
|
+
_record.metadata,
|
|
720
|
+
_record.dependencies,
|
|
721
|
+
toList([
|
|
722
|
+
new ConfigField("a", "", new Optional(), false),
|
|
723
|
+
new ConfigField("b", "", new Optional(), false),
|
|
724
|
+
]),
|
|
725
|
+
);
|
|
726
|
+
let skill = _block;
|
|
727
|
+
let result = $template.render_template(
|
|
728
|
+
"{{#each config}}{{@index}}:{{this.name}} {{/each}}",
|
|
729
|
+
new $types.OpenClaw(),
|
|
730
|
+
skill,
|
|
731
|
+
test_provider_meta(),
|
|
732
|
+
);
|
|
733
|
+
let output;
|
|
734
|
+
if (result instanceof Ok) {
|
|
735
|
+
output = result[0];
|
|
736
|
+
} else {
|
|
737
|
+
throw makeError(
|
|
738
|
+
"let_assert",
|
|
739
|
+
FILEPATH,
|
|
740
|
+
"template_test",
|
|
741
|
+
260,
|
|
742
|
+
"each_block_at_index_test",
|
|
743
|
+
"Pattern match failed, no pattern matched the value.",
|
|
744
|
+
{
|
|
745
|
+
value: result,
|
|
746
|
+
start: 7631,
|
|
747
|
+
end: 7661,
|
|
748
|
+
pattern_start: 7642,
|
|
749
|
+
pattern_end: 7652
|
|
750
|
+
}
|
|
751
|
+
)
|
|
752
|
+
}
|
|
753
|
+
$should.be_true($string.contains(output, "0:a"));
|
|
754
|
+
return $should.be_true($string.contains(output, "1:b"));
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
export function each_block_at_first_last_test() {
|
|
758
|
+
let _block;
|
|
759
|
+
let _record = test_skill();
|
|
760
|
+
_block = new Skill(
|
|
761
|
+
_record.name,
|
|
762
|
+
_record.description,
|
|
763
|
+
_record.version,
|
|
764
|
+
_record.license,
|
|
765
|
+
_record.homepage,
|
|
766
|
+
_record.repository,
|
|
767
|
+
_record.metadata,
|
|
768
|
+
_record.dependencies,
|
|
769
|
+
toList([
|
|
770
|
+
new ConfigField("first", "", new Optional(), false),
|
|
771
|
+
new ConfigField("middle", "", new Optional(), false),
|
|
772
|
+
new ConfigField("last", "", new Optional(), false),
|
|
773
|
+
]),
|
|
774
|
+
);
|
|
775
|
+
let skill = _block;
|
|
776
|
+
let result = $template.render_template(
|
|
777
|
+
"{{#each config}}{{#if @first}}[FIRST]{{/if}}{{#if @last}}[LAST]{{/if}}{{this.name}} {{/each}}",
|
|
778
|
+
new $types.OpenClaw(),
|
|
779
|
+
skill,
|
|
780
|
+
test_provider_meta(),
|
|
781
|
+
);
|
|
782
|
+
let output;
|
|
783
|
+
if (result instanceof Ok) {
|
|
784
|
+
output = result[0];
|
|
785
|
+
} else {
|
|
786
|
+
throw makeError(
|
|
787
|
+
"let_assert",
|
|
788
|
+
FILEPATH,
|
|
789
|
+
"template_test",
|
|
790
|
+
294,
|
|
791
|
+
"each_block_at_first_last_test",
|
|
792
|
+
"Pattern match failed, no pattern matched the value.",
|
|
793
|
+
{
|
|
794
|
+
value: result,
|
|
795
|
+
start: 8470,
|
|
796
|
+
end: 8500,
|
|
797
|
+
pattern_start: 8481,
|
|
798
|
+
pattern_end: 8491
|
|
799
|
+
}
|
|
800
|
+
)
|
|
801
|
+
}
|
|
802
|
+
$should.be_true($string.contains(output, "[FIRST]first"));
|
|
803
|
+
$should.be_true($string.contains(output, "[LAST]last"));
|
|
804
|
+
$should.be_false($string.contains(output, "[FIRST]middle"));
|
|
805
|
+
return $should.be_false($string.contains(output, "[LAST]middle"));
|
|
806
|
+
}
|
|
807
|
+
|
|
808
|
+
export function each_empty_list_test() {
|
|
809
|
+
let _block;
|
|
810
|
+
let _record = test_skill();
|
|
811
|
+
_block = new Skill(
|
|
812
|
+
_record.name,
|
|
813
|
+
_record.description,
|
|
814
|
+
_record.version,
|
|
815
|
+
_record.license,
|
|
816
|
+
_record.homepage,
|
|
817
|
+
_record.repository,
|
|
818
|
+
_record.metadata,
|
|
819
|
+
_record.dependencies,
|
|
820
|
+
toList([]),
|
|
821
|
+
);
|
|
822
|
+
let skill = _block;
|
|
823
|
+
let result = $template.render_template(
|
|
824
|
+
"before{{#each config}}item{{/each}}after",
|
|
825
|
+
new $types.OpenClaw(),
|
|
826
|
+
skill,
|
|
827
|
+
test_provider_meta(),
|
|
828
|
+
);
|
|
829
|
+
let output;
|
|
830
|
+
if (result instanceof Ok) {
|
|
831
|
+
output = result[0];
|
|
832
|
+
} else {
|
|
833
|
+
throw makeError(
|
|
834
|
+
"let_assert",
|
|
835
|
+
FILEPATH,
|
|
836
|
+
"template_test",
|
|
837
|
+
310,
|
|
838
|
+
"each_empty_list_test",
|
|
839
|
+
"Pattern match failed, no pattern matched the value.",
|
|
840
|
+
{
|
|
841
|
+
value: result,
|
|
842
|
+
start: 8983,
|
|
843
|
+
end: 9013,
|
|
844
|
+
pattern_start: 8994,
|
|
845
|
+
pattern_end: 9004
|
|
846
|
+
}
|
|
847
|
+
)
|
|
848
|
+
}
|
|
849
|
+
return $should.equal(output, "beforeafter");
|
|
850
|
+
}
|
|
851
|
+
|
|
852
|
+
export function if_else_truthy_renders_if_branch_test() {
|
|
853
|
+
let result = $template.render_template(
|
|
854
|
+
"{{#if meta.emoji}}has emoji{{else}}no emoji{{/if}}",
|
|
855
|
+
new $types.OpenClaw(),
|
|
856
|
+
test_skill(),
|
|
857
|
+
test_provider_meta(),
|
|
858
|
+
);
|
|
859
|
+
let output;
|
|
860
|
+
if (result instanceof Ok) {
|
|
861
|
+
output = result[0];
|
|
862
|
+
} else {
|
|
863
|
+
throw makeError(
|
|
864
|
+
"let_assert",
|
|
865
|
+
FILEPATH,
|
|
866
|
+
"template_test",
|
|
867
|
+
326,
|
|
868
|
+
"if_else_truthy_renders_if_branch_test",
|
|
869
|
+
"Pattern match failed, no pattern matched the value.",
|
|
870
|
+
{
|
|
871
|
+
value: result,
|
|
872
|
+
start: 9482,
|
|
873
|
+
end: 9512,
|
|
874
|
+
pattern_start: 9493,
|
|
875
|
+
pattern_end: 9503
|
|
876
|
+
}
|
|
877
|
+
)
|
|
878
|
+
}
|
|
879
|
+
$should.be_true($string.contains(output, "has emoji"));
|
|
880
|
+
return $should.be_false($string.contains(output, "no emoji"));
|
|
881
|
+
}
|
|
882
|
+
|
|
883
|
+
export function if_else_falsy_renders_else_branch_test() {
|
|
884
|
+
let result = $template.render_template(
|
|
885
|
+
"{{#if meta.nonexistent}}yes{{else}}no{{/if}}",
|
|
886
|
+
new $types.OpenClaw(),
|
|
887
|
+
test_skill(),
|
|
888
|
+
test_provider_meta(),
|
|
889
|
+
);
|
|
890
|
+
let output;
|
|
891
|
+
if (result instanceof Ok) {
|
|
892
|
+
output = result[0];
|
|
893
|
+
} else {
|
|
894
|
+
throw makeError(
|
|
895
|
+
"let_assert",
|
|
896
|
+
FILEPATH,
|
|
897
|
+
"template_test",
|
|
898
|
+
339,
|
|
899
|
+
"if_else_falsy_renders_else_branch_test",
|
|
900
|
+
"Pattern match failed, no pattern matched the value.",
|
|
901
|
+
{
|
|
902
|
+
value: result,
|
|
903
|
+
start: 9853,
|
|
904
|
+
end: 9883,
|
|
905
|
+
pattern_start: 9864,
|
|
906
|
+
pattern_end: 9874
|
|
907
|
+
}
|
|
908
|
+
)
|
|
909
|
+
}
|
|
910
|
+
$should.be_true($string.contains(output, "no"));
|
|
911
|
+
return $should.be_false($string.contains(output, "yes"));
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
export function unless_else_truthy_renders_else_branch_test() {
|
|
915
|
+
let result = $template.render_template(
|
|
916
|
+
"{{#unless meta.emoji}}hidden{{else}}shown{{/unless}}",
|
|
917
|
+
new $types.OpenClaw(),
|
|
918
|
+
test_skill(),
|
|
919
|
+
test_provider_meta(),
|
|
920
|
+
);
|
|
921
|
+
let output;
|
|
922
|
+
if (result instanceof Ok) {
|
|
923
|
+
output = result[0];
|
|
924
|
+
} else {
|
|
925
|
+
throw makeError(
|
|
926
|
+
"let_assert",
|
|
927
|
+
FILEPATH,
|
|
928
|
+
"template_test",
|
|
929
|
+
352,
|
|
930
|
+
"unless_else_truthy_renders_else_branch_test",
|
|
931
|
+
"Pattern match failed, no pattern matched the value.",
|
|
932
|
+
{
|
|
933
|
+
value: result,
|
|
934
|
+
start: 10225,
|
|
935
|
+
end: 10255,
|
|
936
|
+
pattern_start: 10236,
|
|
937
|
+
pattern_end: 10246
|
|
938
|
+
}
|
|
939
|
+
)
|
|
940
|
+
}
|
|
941
|
+
$should.be_true($string.contains(output, "shown"));
|
|
942
|
+
return $should.be_false($string.contains(output, "hidden"));
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
export function unless_else_falsy_renders_unless_branch_test() {
|
|
946
|
+
let result = $template.render_template(
|
|
947
|
+
"{{#unless meta.nonexistent}}shown{{else}}hidden{{/unless}}",
|
|
948
|
+
new $types.OpenClaw(),
|
|
949
|
+
test_skill(),
|
|
950
|
+
test_provider_meta(),
|
|
951
|
+
);
|
|
952
|
+
let output;
|
|
953
|
+
if (result instanceof Ok) {
|
|
954
|
+
output = result[0];
|
|
955
|
+
} else {
|
|
956
|
+
throw makeError(
|
|
957
|
+
"let_assert",
|
|
958
|
+
FILEPATH,
|
|
959
|
+
"template_test",
|
|
960
|
+
365,
|
|
961
|
+
"unless_else_falsy_renders_unless_branch_test",
|
|
962
|
+
"Pattern match failed, no pattern matched the value.",
|
|
963
|
+
{
|
|
964
|
+
value: result,
|
|
965
|
+
start: 10610,
|
|
966
|
+
end: 10640,
|
|
967
|
+
pattern_start: 10621,
|
|
968
|
+
pattern_end: 10631
|
|
969
|
+
}
|
|
970
|
+
)
|
|
971
|
+
}
|
|
972
|
+
$should.be_true($string.contains(output, "shown"));
|
|
973
|
+
return $should.be_false($string.contains(output, "hidden"));
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
export function if_else_with_variables_test() {
|
|
977
|
+
let result = $template.render_template(
|
|
978
|
+
"{{#if meta.emoji}}Icon: {{meta.emoji}}{{else}}Name: {{name}}{{/if}}",
|
|
979
|
+
new $types.OpenClaw(),
|
|
980
|
+
test_skill(),
|
|
981
|
+
test_provider_meta(),
|
|
982
|
+
);
|
|
983
|
+
let output;
|
|
984
|
+
if (result instanceof Ok) {
|
|
985
|
+
output = result[0];
|
|
986
|
+
} else {
|
|
987
|
+
throw makeError(
|
|
988
|
+
"let_assert",
|
|
989
|
+
FILEPATH,
|
|
990
|
+
"template_test",
|
|
991
|
+
378,
|
|
992
|
+
"if_else_with_variables_test",
|
|
993
|
+
"Pattern match failed, no pattern matched the value.",
|
|
994
|
+
{
|
|
995
|
+
value: result,
|
|
996
|
+
start: 10987,
|
|
997
|
+
end: 11017,
|
|
998
|
+
pattern_start: 10998,
|
|
999
|
+
pattern_end: 11008
|
|
1000
|
+
}
|
|
1001
|
+
)
|
|
1002
|
+
}
|
|
1003
|
+
return $should.be_true($string.contains(output, "Icon:"));
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
export function if_else_falsy_with_variables_test() {
|
|
1007
|
+
let result = $template.render_template(
|
|
1008
|
+
"{{#if meta.nonexistent}}hidden{{else}}fallback: {{name}}{{/if}}",
|
|
1009
|
+
new $types.OpenClaw(),
|
|
1010
|
+
test_skill(),
|
|
1011
|
+
test_provider_meta(),
|
|
1012
|
+
);
|
|
1013
|
+
let output;
|
|
1014
|
+
if (result instanceof Ok) {
|
|
1015
|
+
output = result[0];
|
|
1016
|
+
} else {
|
|
1017
|
+
throw makeError(
|
|
1018
|
+
"let_assert",
|
|
1019
|
+
FILEPATH,
|
|
1020
|
+
"template_test",
|
|
1021
|
+
390,
|
|
1022
|
+
"if_else_falsy_with_variables_test",
|
|
1023
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1024
|
+
{
|
|
1025
|
+
value: result,
|
|
1026
|
+
start: 11313,
|
|
1027
|
+
end: 11343,
|
|
1028
|
+
pattern_start: 11324,
|
|
1029
|
+
pattern_end: 11334
|
|
1030
|
+
}
|
|
1031
|
+
)
|
|
1032
|
+
}
|
|
1033
|
+
return $should.be_true($string.contains(output, "fallback: test-skill"));
|
|
1034
|
+
}
|
|
1035
|
+
|
|
1036
|
+
export function nested_if_else_test() {
|
|
1037
|
+
let result = $template.render_template(
|
|
1038
|
+
"{{#if meta.emoji}}{{#if meta.nonexistent}}inner{{else}}outer else{{/if}}{{else}}top else{{/if}}",
|
|
1039
|
+
new $types.OpenClaw(),
|
|
1040
|
+
test_skill(),
|
|
1041
|
+
test_provider_meta(),
|
|
1042
|
+
);
|
|
1043
|
+
let output;
|
|
1044
|
+
if (result instanceof Ok) {
|
|
1045
|
+
output = result[0];
|
|
1046
|
+
} else {
|
|
1047
|
+
throw makeError(
|
|
1048
|
+
"let_assert",
|
|
1049
|
+
FILEPATH,
|
|
1050
|
+
"template_test",
|
|
1051
|
+
402,
|
|
1052
|
+
"nested_if_else_test",
|
|
1053
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1054
|
+
{
|
|
1055
|
+
value: result,
|
|
1056
|
+
start: 11672,
|
|
1057
|
+
end: 11702,
|
|
1058
|
+
pattern_start: 11683,
|
|
1059
|
+
pattern_end: 11693
|
|
1060
|
+
}
|
|
1061
|
+
)
|
|
1062
|
+
}
|
|
1063
|
+
$should.be_true($string.contains(output, "outer else"));
|
|
1064
|
+
$should.be_false($string.contains(output, "inner"));
|
|
1065
|
+
return $should.be_false($string.contains(output, "top else"));
|
|
1066
|
+
}
|
|
1067
|
+
|
|
1068
|
+
export function if_else_empty_else_block_test() {
|
|
1069
|
+
let result = $template.render_template(
|
|
1070
|
+
"before{{#if meta.nonexistent}}content{{else}}{{/if}}after",
|
|
1071
|
+
new $types.OpenClaw(),
|
|
1072
|
+
test_skill(),
|
|
1073
|
+
test_provider_meta(),
|
|
1074
|
+
);
|
|
1075
|
+
let output;
|
|
1076
|
+
if (result instanceof Ok) {
|
|
1077
|
+
output = result[0];
|
|
1078
|
+
} else {
|
|
1079
|
+
throw makeError(
|
|
1080
|
+
"let_assert",
|
|
1081
|
+
FILEPATH,
|
|
1082
|
+
"template_test",
|
|
1083
|
+
416,
|
|
1084
|
+
"if_else_empty_else_block_test",
|
|
1085
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1086
|
+
{
|
|
1087
|
+
value: result,
|
|
1088
|
+
start: 12100,
|
|
1089
|
+
end: 12130,
|
|
1090
|
+
pattern_start: 12111,
|
|
1091
|
+
pattern_end: 12121
|
|
1092
|
+
}
|
|
1093
|
+
)
|
|
1094
|
+
}
|
|
1095
|
+
return $should.equal(output, "beforeafter");
|
|
1096
|
+
}
|
|
1097
|
+
|
|
1098
|
+
export function backslash_escape_test() {
|
|
1099
|
+
let result = $template.render_template(
|
|
1100
|
+
"\\{{not processed}}",
|
|
1101
|
+
new $types.OpenClaw(),
|
|
1102
|
+
test_skill(),
|
|
1103
|
+
test_provider_meta(),
|
|
1104
|
+
);
|
|
1105
|
+
let output;
|
|
1106
|
+
if (result instanceof Ok) {
|
|
1107
|
+
output = result[0];
|
|
1108
|
+
} else {
|
|
1109
|
+
throw makeError(
|
|
1110
|
+
"let_assert",
|
|
1111
|
+
FILEPATH,
|
|
1112
|
+
"template_test",
|
|
1113
|
+
432,
|
|
1114
|
+
"backslash_escape_test",
|
|
1115
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1116
|
+
{
|
|
1117
|
+
value: result,
|
|
1118
|
+
start: 12536,
|
|
1119
|
+
end: 12566,
|
|
1120
|
+
pattern_start: 12547,
|
|
1121
|
+
pattern_end: 12557
|
|
1122
|
+
}
|
|
1123
|
+
)
|
|
1124
|
+
}
|
|
1125
|
+
return $should.be_true($string.contains(output, "{{not processed}}"));
|
|
1126
|
+
}
|
|
1127
|
+
|
|
1128
|
+
export function raw_block_test() {
|
|
1129
|
+
let result = $template.render_template(
|
|
1130
|
+
"{{{{raw}}}}{{name}} should not be replaced{{{{/raw}}}}",
|
|
1131
|
+
new $types.OpenClaw(),
|
|
1132
|
+
test_skill(),
|
|
1133
|
+
test_provider_meta(),
|
|
1134
|
+
);
|
|
1135
|
+
let output;
|
|
1136
|
+
if (result instanceof Ok) {
|
|
1137
|
+
output = result[0];
|
|
1138
|
+
} else {
|
|
1139
|
+
throw makeError(
|
|
1140
|
+
"let_assert",
|
|
1141
|
+
FILEPATH,
|
|
1142
|
+
"template_test",
|
|
1143
|
+
444,
|
|
1144
|
+
"raw_block_test",
|
|
1145
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1146
|
+
{
|
|
1147
|
+
value: result,
|
|
1148
|
+
start: 12846,
|
|
1149
|
+
end: 12876,
|
|
1150
|
+
pattern_start: 12857,
|
|
1151
|
+
pattern_end: 12867
|
|
1152
|
+
}
|
|
1153
|
+
)
|
|
1154
|
+
}
|
|
1155
|
+
$should.be_false($string.contains(output, "test-skill"));
|
|
1156
|
+
return $should.be_true($string.contains(output, "{{name}}"));
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
export function context_includes_provider_test() {
|
|
1160
|
+
let result = $template.render_template(
|
|
1161
|
+
"Provider: {{provider}}",
|
|
1162
|
+
new $types.OpenClaw(),
|
|
1163
|
+
test_skill(),
|
|
1164
|
+
test_provider_meta(),
|
|
1165
|
+
);
|
|
1166
|
+
let output;
|
|
1167
|
+
if (result instanceof Ok) {
|
|
1168
|
+
output = result[0];
|
|
1169
|
+
} else {
|
|
1170
|
+
throw makeError(
|
|
1171
|
+
"let_assert",
|
|
1172
|
+
FILEPATH,
|
|
1173
|
+
"template_test",
|
|
1174
|
+
461,
|
|
1175
|
+
"context_includes_provider_test",
|
|
1176
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1177
|
+
{
|
|
1178
|
+
value: result,
|
|
1179
|
+
start: 13375,
|
|
1180
|
+
end: 13405,
|
|
1181
|
+
pattern_start: 13386,
|
|
1182
|
+
pattern_end: 13396
|
|
1183
|
+
}
|
|
1184
|
+
)
|
|
1185
|
+
}
|
|
1186
|
+
return $should.be_true($string.contains(output, "Provider: openclaw"));
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
export function context_includes_top_level_fields_test() {
|
|
1190
|
+
let result = $template.render_template(
|
|
1191
|
+
"{{name}} {{version}} {{description}}",
|
|
1192
|
+
new $types.OpenClaw(),
|
|
1193
|
+
test_skill(),
|
|
1194
|
+
test_provider_meta(),
|
|
1195
|
+
);
|
|
1196
|
+
let output;
|
|
1197
|
+
if (result instanceof Ok) {
|
|
1198
|
+
output = result[0];
|
|
1199
|
+
} else {
|
|
1200
|
+
throw makeError(
|
|
1201
|
+
"let_assert",
|
|
1202
|
+
FILEPATH,
|
|
1203
|
+
"template_test",
|
|
1204
|
+
473,
|
|
1205
|
+
"context_includes_top_level_fields_test",
|
|
1206
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1207
|
+
{
|
|
1208
|
+
value: result,
|
|
1209
|
+
start: 13692,
|
|
1210
|
+
end: 13722,
|
|
1211
|
+
pattern_start: 13703,
|
|
1212
|
+
pattern_end: 13713
|
|
1213
|
+
}
|
|
1214
|
+
)
|
|
1215
|
+
}
|
|
1216
|
+
$should.be_true($string.contains(output, "test-skill"));
|
|
1217
|
+
$should.be_true($string.contains(output, "1.0.0"));
|
|
1218
|
+
return $should.be_true($string.contains(output, "A test skill"));
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
export function unclosed_if_block_fails_test() {
|
|
1222
|
+
let result = $template.render_template(
|
|
1223
|
+
"{{#if meta.emoji}}unclosed",
|
|
1224
|
+
new $types.OpenClaw(),
|
|
1225
|
+
test_skill(),
|
|
1226
|
+
test_provider_meta(),
|
|
1227
|
+
);
|
|
1228
|
+
return $should.be_error(result);
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
export function unclosed_provider_block_fails_test() {
|
|
1232
|
+
let result = $template.render_template(
|
|
1233
|
+
"{{#if meta.emoji}}unclosed if and also {{unbalanced",
|
|
1234
|
+
new $types.OpenClaw(),
|
|
1235
|
+
test_skill(),
|
|
1236
|
+
test_provider_meta(),
|
|
1237
|
+
);
|
|
1238
|
+
return $should.be_error(result);
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1241
|
+
export function unclosed_each_block_fails_test() {
|
|
1242
|
+
let result = $template.render_template(
|
|
1243
|
+
"{{#each config}}no closing tag",
|
|
1244
|
+
new $types.OpenClaw(),
|
|
1245
|
+
test_skill(),
|
|
1246
|
+
test_provider_meta(),
|
|
1247
|
+
);
|
|
1248
|
+
return $should.be_error(result);
|
|
1249
|
+
}
|
|
1250
|
+
|
|
1251
|
+
export function unclosed_unless_block_fails_test() {
|
|
1252
|
+
let result = $template.render_template(
|
|
1253
|
+
"{{#unless meta.emoji}}no closing tag",
|
|
1254
|
+
new $types.OpenClaw(),
|
|
1255
|
+
test_skill(),
|
|
1256
|
+
test_provider_meta(),
|
|
1257
|
+
);
|
|
1258
|
+
return $should.be_error(result);
|
|
1259
|
+
}
|
|
1260
|
+
|
|
1261
|
+
export function each_dependencies_test() {
|
|
1262
|
+
let _block;
|
|
1263
|
+
let _record = test_skill();
|
|
1264
|
+
_block = new Skill(
|
|
1265
|
+
_record.name,
|
|
1266
|
+
_record.description,
|
|
1267
|
+
_record.version,
|
|
1268
|
+
_record.license,
|
|
1269
|
+
_record.homepage,
|
|
1270
|
+
_record.repository,
|
|
1271
|
+
_record.metadata,
|
|
1272
|
+
toList([
|
|
1273
|
+
new $types.Dependency("helper-skill", assert_parse_vc("^1.0.0"), false),
|
|
1274
|
+
new $types.Dependency("extra-skill", assert_parse_vc("~2.0.0"), true),
|
|
1275
|
+
]),
|
|
1276
|
+
_record.config,
|
|
1277
|
+
);
|
|
1278
|
+
let skill = _block;
|
|
1279
|
+
let result = $template.render_template(
|
|
1280
|
+
"{{#each dependencies}}{{this.name}}({{this.version}}) {{/each}}",
|
|
1281
|
+
new $types.OpenClaw(),
|
|
1282
|
+
skill,
|
|
1283
|
+
test_provider_meta(),
|
|
1284
|
+
);
|
|
1285
|
+
let output;
|
|
1286
|
+
if (result instanceof Ok) {
|
|
1287
|
+
output = result[0];
|
|
1288
|
+
} else {
|
|
1289
|
+
throw makeError(
|
|
1290
|
+
"let_assert",
|
|
1291
|
+
FILEPATH,
|
|
1292
|
+
"template_test",
|
|
1293
|
+
555,
|
|
1294
|
+
"each_dependencies_test",
|
|
1295
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1296
|
+
{
|
|
1297
|
+
value: result,
|
|
1298
|
+
start: 15985,
|
|
1299
|
+
end: 16015,
|
|
1300
|
+
pattern_start: 15996,
|
|
1301
|
+
pattern_end: 16006
|
|
1302
|
+
}
|
|
1303
|
+
)
|
|
1304
|
+
}
|
|
1305
|
+
$should.be_true($string.contains(output, "helper-skill(^1.0.0)"));
|
|
1306
|
+
return $should.be_true($string.contains(output, "extra-skill(~2.0.0)"));
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1309
|
+
export function metadata_author_in_context_test() {
|
|
1310
|
+
let result = $template.render_template(
|
|
1311
|
+
"Author: {{metadata.author}}",
|
|
1312
|
+
new $types.OpenClaw(),
|
|
1313
|
+
test_skill(),
|
|
1314
|
+
test_provider_meta(),
|
|
1315
|
+
);
|
|
1316
|
+
let output;
|
|
1317
|
+
if (result instanceof Ok) {
|
|
1318
|
+
output = result[0];
|
|
1319
|
+
} else {
|
|
1320
|
+
throw makeError(
|
|
1321
|
+
"let_assert",
|
|
1322
|
+
FILEPATH,
|
|
1323
|
+
"template_test",
|
|
1324
|
+
568,
|
|
1325
|
+
"metadata_author_in_context_test",
|
|
1326
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1327
|
+
{
|
|
1328
|
+
value: result,
|
|
1329
|
+
start: 16353,
|
|
1330
|
+
end: 16383,
|
|
1331
|
+
pattern_start: 16364,
|
|
1332
|
+
pattern_end: 16374
|
|
1333
|
+
}
|
|
1334
|
+
)
|
|
1335
|
+
}
|
|
1336
|
+
return $should.be_true($string.contains(output, "Author: Test"));
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
export function metadata_tags_in_context_test() {
|
|
1340
|
+
let _block;
|
|
1341
|
+
let _record = test_skill();
|
|
1342
|
+
_block = new Skill(
|
|
1343
|
+
_record.name,
|
|
1344
|
+
_record.description,
|
|
1345
|
+
_record.version,
|
|
1346
|
+
_record.license,
|
|
1347
|
+
_record.homepage,
|
|
1348
|
+
_record.repository,
|
|
1349
|
+
new Some(new SkillMetadata(new None(), new None(), toList(["web", "api"]))),
|
|
1350
|
+
_record.dependencies,
|
|
1351
|
+
_record.config,
|
|
1352
|
+
);
|
|
1353
|
+
let skill = _block;
|
|
1354
|
+
let result = $template.render_template(
|
|
1355
|
+
"{{#each metadata.tags}}{{this}} {{/each}}",
|
|
1356
|
+
new $types.OpenClaw(),
|
|
1357
|
+
skill,
|
|
1358
|
+
test_provider_meta(),
|
|
1359
|
+
);
|
|
1360
|
+
let output;
|
|
1361
|
+
if (result instanceof Ok) {
|
|
1362
|
+
output = result[0];
|
|
1363
|
+
} else {
|
|
1364
|
+
throw makeError(
|
|
1365
|
+
"let_assert",
|
|
1366
|
+
FILEPATH,
|
|
1367
|
+
"template_test",
|
|
1368
|
+
587,
|
|
1369
|
+
"metadata_tags_in_context_test",
|
|
1370
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1371
|
+
{
|
|
1372
|
+
value: result,
|
|
1373
|
+
start: 16816,
|
|
1374
|
+
end: 16846,
|
|
1375
|
+
pattern_start: 16827,
|
|
1376
|
+
pattern_end: 16837
|
|
1377
|
+
}
|
|
1378
|
+
)
|
|
1379
|
+
}
|
|
1380
|
+
$should.be_true($string.contains(output, "web"));
|
|
1381
|
+
return $should.be_true($string.contains(output, "api"));
|
|
1382
|
+
}
|
|
1383
|
+
|
|
1384
|
+
export function template_error_has_line_number_test() {
|
|
1385
|
+
let result = $template.render_template(
|
|
1386
|
+
"line 1\nline 2\n{{#if meta.emoji}}unclosed",
|
|
1387
|
+
new $types.OpenClaw(),
|
|
1388
|
+
test_skill(),
|
|
1389
|
+
test_provider_meta(),
|
|
1390
|
+
);
|
|
1391
|
+
$should.be_error(result);
|
|
1392
|
+
let line;
|
|
1393
|
+
let msg;
|
|
1394
|
+
if (result instanceof Error) {
|
|
1395
|
+
let $ = result[0];
|
|
1396
|
+
if ($ instanceof $error.TemplateError) {
|
|
1397
|
+
line = $.line;
|
|
1398
|
+
msg = $.message;
|
|
1399
|
+
} else {
|
|
1400
|
+
throw makeError(
|
|
1401
|
+
"let_assert",
|
|
1402
|
+
FILEPATH,
|
|
1403
|
+
"template_test",
|
|
1404
|
+
606,
|
|
1405
|
+
"template_error_has_line_number_test",
|
|
1406
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1407
|
+
{
|
|
1408
|
+
value: result,
|
|
1409
|
+
start: 17437,
|
|
1410
|
+
end: 17494,
|
|
1411
|
+
pattern_start: 17448,
|
|
1412
|
+
pattern_end: 17485
|
|
1413
|
+
}
|
|
1414
|
+
)
|
|
1415
|
+
}
|
|
1416
|
+
} else {
|
|
1417
|
+
throw makeError(
|
|
1418
|
+
"let_assert",
|
|
1419
|
+
FILEPATH,
|
|
1420
|
+
"template_test",
|
|
1421
|
+
606,
|
|
1422
|
+
"template_error_has_line_number_test",
|
|
1423
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1424
|
+
{
|
|
1425
|
+
value: result,
|
|
1426
|
+
start: 17437,
|
|
1427
|
+
end: 17494,
|
|
1428
|
+
pattern_start: 17448,
|
|
1429
|
+
pattern_end: 17485
|
|
1430
|
+
}
|
|
1431
|
+
)
|
|
1432
|
+
}
|
|
1433
|
+
$should.equal(line, 3);
|
|
1434
|
+
return $should.be_true($string.contains(msg, "Unclosed"));
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
export function unbalanced_tag_error_has_line_number_test() {
|
|
1438
|
+
let result = $template.render_template(
|
|
1439
|
+
"line 1\nline 2\nline 3\n{{unbalanced",
|
|
1440
|
+
new $types.OpenClaw(),
|
|
1441
|
+
test_skill(),
|
|
1442
|
+
test_provider_meta(),
|
|
1443
|
+
);
|
|
1444
|
+
$should.be_error(result);
|
|
1445
|
+
let line;
|
|
1446
|
+
if (result instanceof Error) {
|
|
1447
|
+
let $ = result[0];
|
|
1448
|
+
if ($ instanceof $error.TemplateError) {
|
|
1449
|
+
line = $.line;
|
|
1450
|
+
} else {
|
|
1451
|
+
throw makeError(
|
|
1452
|
+
"let_assert",
|
|
1453
|
+
FILEPATH,
|
|
1454
|
+
"template_test",
|
|
1455
|
+
620,
|
|
1456
|
+
"unbalanced_tag_error_has_line_number_test",
|
|
1457
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1458
|
+
{
|
|
1459
|
+
value: result,
|
|
1460
|
+
start: 17821,
|
|
1461
|
+
end: 17879,
|
|
1462
|
+
pattern_start: 17832,
|
|
1463
|
+
pattern_end: 17870
|
|
1464
|
+
}
|
|
1465
|
+
)
|
|
1466
|
+
}
|
|
1467
|
+
} else {
|
|
1468
|
+
throw makeError(
|
|
1469
|
+
"let_assert",
|
|
1470
|
+
FILEPATH,
|
|
1471
|
+
"template_test",
|
|
1472
|
+
620,
|
|
1473
|
+
"unbalanced_tag_error_has_line_number_test",
|
|
1474
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1475
|
+
{
|
|
1476
|
+
value: result,
|
|
1477
|
+
start: 17821,
|
|
1478
|
+
end: 17879,
|
|
1479
|
+
pattern_start: 17832,
|
|
1480
|
+
pattern_end: 17870
|
|
1481
|
+
}
|
|
1482
|
+
)
|
|
1483
|
+
}
|
|
1484
|
+
return $should.equal(line, 4);
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
export function unless_with_truthy_value_excludes_content_test() {
|
|
1488
|
+
let result = $template.render_template(
|
|
1489
|
+
"before{{#unless meta.emoji}}hidden{{/unless}}after",
|
|
1490
|
+
new $types.OpenClaw(),
|
|
1491
|
+
test_skill(),
|
|
1492
|
+
test_provider_meta(),
|
|
1493
|
+
);
|
|
1494
|
+
let output;
|
|
1495
|
+
if (result instanceof Ok) {
|
|
1496
|
+
output = result[0];
|
|
1497
|
+
} else {
|
|
1498
|
+
throw makeError(
|
|
1499
|
+
"let_assert",
|
|
1500
|
+
FILEPATH,
|
|
1501
|
+
"template_test",
|
|
1502
|
+
645,
|
|
1503
|
+
"unless_with_truthy_value_excludes_content_test",
|
|
1504
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1505
|
+
{
|
|
1506
|
+
value: result,
|
|
1507
|
+
start: 18719,
|
|
1508
|
+
end: 18749,
|
|
1509
|
+
pattern_start: 18730,
|
|
1510
|
+
pattern_end: 18740
|
|
1511
|
+
}
|
|
1512
|
+
)
|
|
1513
|
+
}
|
|
1514
|
+
return $should.equal(output, "beforeafter");
|
|
1515
|
+
}
|
|
1516
|
+
|
|
1517
|
+
export function if_with_empty_list_is_falsy_test() {
|
|
1518
|
+
let _block;
|
|
1519
|
+
let _record = test_skill();
|
|
1520
|
+
_block = new Skill(
|
|
1521
|
+
_record.name,
|
|
1522
|
+
_record.description,
|
|
1523
|
+
_record.version,
|
|
1524
|
+
_record.license,
|
|
1525
|
+
_record.homepage,
|
|
1526
|
+
_record.repository,
|
|
1527
|
+
_record.metadata,
|
|
1528
|
+
toList([]),
|
|
1529
|
+
toList([]),
|
|
1530
|
+
);
|
|
1531
|
+
let skill = _block;
|
|
1532
|
+
let result = $template.render_template(
|
|
1533
|
+
"before{{#if config}}shown{{/if}}after",
|
|
1534
|
+
new $types.OpenClaw(),
|
|
1535
|
+
skill,
|
|
1536
|
+
test_provider_meta(),
|
|
1537
|
+
);
|
|
1538
|
+
let output;
|
|
1539
|
+
if (result instanceof Ok) {
|
|
1540
|
+
output = result[0];
|
|
1541
|
+
} else {
|
|
1542
|
+
throw makeError(
|
|
1543
|
+
"let_assert",
|
|
1544
|
+
FILEPATH,
|
|
1545
|
+
"template_test",
|
|
1546
|
+
672,
|
|
1547
|
+
"if_with_empty_list_is_falsy_test",
|
|
1548
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1549
|
+
{
|
|
1550
|
+
value: result,
|
|
1551
|
+
start: 19475,
|
|
1552
|
+
end: 19505,
|
|
1553
|
+
pattern_start: 19486,
|
|
1554
|
+
pattern_end: 19496
|
|
1555
|
+
}
|
|
1556
|
+
)
|
|
1557
|
+
}
|
|
1558
|
+
return $should.equal(output, "beforeafter");
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
export function each_with_simple_string_items_test() {
|
|
1562
|
+
let result = $template.render_template(
|
|
1563
|
+
"{{#each metadata.tags}}[{{this}}]{{/each}}",
|
|
1564
|
+
new $types.OpenClaw(),
|
|
1565
|
+
(() => {
|
|
1566
|
+
let _record = test_skill();
|
|
1567
|
+
return new Skill(
|
|
1568
|
+
_record.name,
|
|
1569
|
+
_record.description,
|
|
1570
|
+
_record.version,
|
|
1571
|
+
_record.license,
|
|
1572
|
+
_record.homepage,
|
|
1573
|
+
_record.repository,
|
|
1574
|
+
new Some(
|
|
1575
|
+
new SkillMetadata(
|
|
1576
|
+
new None(),
|
|
1577
|
+
new None(),
|
|
1578
|
+
toList(["web", "api", "test"]),
|
|
1579
|
+
),
|
|
1580
|
+
),
|
|
1581
|
+
_record.dependencies,
|
|
1582
|
+
_record.config,
|
|
1583
|
+
);
|
|
1584
|
+
})(),
|
|
1585
|
+
test_provider_meta(),
|
|
1586
|
+
);
|
|
1587
|
+
let output;
|
|
1588
|
+
if (result instanceof Ok) {
|
|
1589
|
+
output = result[0];
|
|
1590
|
+
} else {
|
|
1591
|
+
throw makeError(
|
|
1592
|
+
"let_assert",
|
|
1593
|
+
FILEPATH,
|
|
1594
|
+
"template_test",
|
|
1595
|
+
694,
|
|
1596
|
+
"each_with_simple_string_items_test",
|
|
1597
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1598
|
+
{
|
|
1599
|
+
value: result,
|
|
1600
|
+
start: 20021,
|
|
1601
|
+
end: 20051,
|
|
1602
|
+
pattern_start: 20032,
|
|
1603
|
+
pattern_end: 20042
|
|
1604
|
+
}
|
|
1605
|
+
)
|
|
1606
|
+
}
|
|
1607
|
+
return $should.equal(output, "[web][api][test]");
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
export function undefined_deep_nested_path_resolves_empty_test() {
|
|
1611
|
+
let result = $template.render_template(
|
|
1612
|
+
"before{{a.b.c.d}}after",
|
|
1613
|
+
new $types.OpenClaw(),
|
|
1614
|
+
test_skill(),
|
|
1615
|
+
test_provider_meta(),
|
|
1616
|
+
);
|
|
1617
|
+
let output;
|
|
1618
|
+
if (result instanceof Ok) {
|
|
1619
|
+
output = result[0];
|
|
1620
|
+
} else {
|
|
1621
|
+
throw makeError(
|
|
1622
|
+
"let_assert",
|
|
1623
|
+
FILEPATH,
|
|
1624
|
+
"template_test",
|
|
1625
|
+
706,
|
|
1626
|
+
"undefined_deep_nested_path_resolves_empty_test",
|
|
1627
|
+
"Pattern match failed, no pattern matched the value.",
|
|
1628
|
+
{
|
|
1629
|
+
value: result,
|
|
1630
|
+
start: 20311,
|
|
1631
|
+
end: 20341,
|
|
1632
|
+
pattern_start: 20322,
|
|
1633
|
+
pattern_end: 20332
|
|
1634
|
+
}
|
|
1635
|
+
)
|
|
1636
|
+
}
|
|
1637
|
+
return $should.equal(output, "beforeafter");
|
|
1638
|
+
}
|