Trading card city builder game?

was adding some interop layer but this glepack is not implemented right

+424 -8
+13 -5
Justfile
··· 23 23 npx concurrently --names "sveltekit,migrate,server" \ 24 24 "npx vite dev --host" \ 25 25 "npx graphile-migrate watch" \ 26 + "cd api && watchexec -e .gleam,.toml,.js,.erl gleam build --target javascript" \ 26 27 "cd server && gleam run" 27 28 28 29 [group: "run"] ··· 30 31 npx concurrently --names "sveltekit,migrate,server,tauri" \ 31 32 "npx vite dev --host" \ 32 33 "npx graphile-migrate watch" \ 34 + "cd api && watchexec -e .gleam,.toml,.js,.erl gleam build --target javascript" \ 33 35 "cd server && gleam run" \ 34 36 "npx tauri dev" 35 37 36 38 [group: "dev"] 37 - init: get 38 - cp .env.example .env.local 39 + init: 40 + mise install 41 + cargo install watchexec-cli --locked 42 + cp -n .env.example .env.local 39 43 cd .git/hooks && ln -sf ../../.hooks/* . 40 44 if [ ! -f .env ]; then ln -s .env.local .env; fi 45 + just get 41 46 just up 42 47 43 48 [group: "dev"] ··· 73 78 74 79 [group: "dev"] 75 80 check: 81 + cd api && gleam check 82 + cd server && gleam check 76 83 npx svelte-kit sync 77 84 npx svelte-check --tsconfig ./tsconfig.json 78 85 cd src-tauri && cargo check 79 - cd server && gleam check 80 86 81 87 [group: "dev"] 82 88 watch: ··· 90 96 91 97 [group: "dev"] 92 98 fmt: 99 + cd api && gleam format 100 + cd server && gleam format 93 101 npx prettier --write . --cache 94 102 cd src-tauri && cargo fmt 95 - cd server && gleam format 96 103 97 104 [group: "dev"] 98 105 test: 106 + cd api && gleam test 107 + cd server && gleam test 99 108 npm test 100 - cd server && gleam test 101 109 cd src-tauri && cargo test 102 110 103 111 [group: "database"]
+23
api/.github/workflows/test.yml
··· 1 + name: test 2 + 3 + on: 4 + push: 5 + branches: 6 + - master 7 + - main 8 + pull_request: 9 + 10 + jobs: 11 + test: 12 + runs-on: ubuntu-latest 13 + steps: 14 + - uses: actions/checkout@v4 15 + - uses: erlef/setup-beam@v1 16 + with: 17 + otp-version: "28" 18 + gleam-version: "1.13.0" 19 + rebar3-version: "3" 20 + # elixir-version: "1" 21 + - run: gleam deps download 22 + - run: gleam test 23 + - run: gleam format --check src test
+4
api/.gitignore
··· 1 + *.beam 2 + *.ez 3 + /build 4 + erl_crash.dump
+24
api/README.md
··· 1 + # cartography_api 2 + 3 + [![Package Version](https://img.shields.io/hexpm/v/cartography_api)](https://hex.pm/packages/cartography_api) 4 + [![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/cartography_api/) 5 + 6 + ```sh 7 + gleam add cartography_api@1 8 + ``` 9 + ```gleam 10 + import cartography_api 11 + 12 + pub fn main() -> Nil { 13 + // TODO: An example of the project in use 14 + } 15 + ``` 16 + 17 + Further documentation can be found at <https://hexdocs.pm/cartography_api>. 18 + 19 + ## Development 20 + 21 + ```sh 22 + gleam run # Run the project 23 + gleam test # Run the tests 24 + ```
+26
api/gleam.toml
··· 1 + name = "cartography_api" 2 + version = "1.0.0" 3 + target = "javascript" 4 + 5 + # Fill out these fields if you intend to generate HTML documentation or publish 6 + # your project to the Hex package manager. 7 + # 8 + # description = "" 9 + # licences = ["Apache-2.0"] 10 + # repository = { type = "github", user = "", repo = "" } 11 + # links = [{ title = "Website", href = "" }] 12 + # 13 + # For a full reference of all the available options, you can have a look at 14 + # https://gleam.run/writing-gleam/gleam-toml/. 15 + 16 + [javascript] 17 + typescript_declarations = true 18 + runtime = "node" 19 + 20 + [dependencies] 21 + gleam_stdlib = ">= 0.44.0 and < 2.0.0" 22 + gleam_json = ">= 3.1.0 and < 4.0.0" 23 + glepack = { git = "https://github.com/Lemorz56/glepack", ref = "main" } 24 + 25 + [dev-dependencies] 26 + gleeunit = ">= 1.0.0 and < 2.0.0"
+15
api/manifest.toml
··· 1 + # This file was generated by Gleam 2 + # You typically do not need to edit this file 3 + 4 + packages = [ 5 + { name = "gleam_json", version = "3.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "44FDAA8847BE8FC48CA7A1C089706BD54BADCC4C45B237A992EDDF9F2CDB2836" }, 6 + { name = "gleam_stdlib", version = "0.68.1", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "F7FAEBD8EF260664E86A46C8DBA23508D1D11BB3BCC6EE1B89B3BC3E5C83FF1E" }, 7 + { name = "gleeunit", version = "1.9.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "DA9553CE58B67924B3C631F96FE3370C49EB6D6DC6B384EC4862CC4AAA718F3C" }, 8 + { name = "glepack", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], source = "git", repo = "https://github.com/Lemorz56/glepack", commit = "7a7df549845ccec8f92c757adbfb9c76e6c70692" }, 9 + ] 10 + 11 + [requirements] 12 + gleam_json = { version = ">= 3.1.0 and < 4.0.0" } 13 + gleam_stdlib = { version = ">= 0.44.0 and < 2.0.0" } 14 + gleeunit = { version = ">= 1.0.0 and < 2.0.0" } 15 + glepack = { git = "https://github.com/Lemorz56/glepack", ref = "main" }
+13
api/src/codable.gleam
··· 1 + import gleam/dict.{type Dict} 2 + 3 + pub type Codable { 4 + Nil 5 + Bool(Bool) 6 + Int(Int) 7 + Float(Float) 8 + String(String) 9 + Binary(BitArray) 10 + List(List(Codable)) 11 + Record(Dict(String, Codable)) 12 + Struct(String, Codable) 13 + }
+44
api/src/codec.gleam
··· 1 + import coder.{type Coder} 2 + import gleam/result 3 + 4 + pub type CodecError(decoding_error, encoding_error) { 5 + DecodingError(decoding_error) 6 + EncodingError(encoding_error) 7 + } 8 + 9 + pub opaque type Codec(from, to, from_error, to_error) { 10 + Codec(from_coder: Coder(from, from_error), to_coder: Coder(to, to_error)) 11 + } 12 + 13 + pub fn codec( 14 + from from_coder: Coder(from, from_error), 15 + to to_coder: Coder(to, to_error), 16 + ) -> Codec(from, to, from_error, to_error) { 17 + Codec(from_coder:, to_coder:) 18 + } 19 + 20 + pub fn encode( 21 + codec: Codec(from, to, from_error, to_error), 22 + data: from, 23 + ) -> Result(to, CodecError(from_error, to_error)) { 24 + use codable <- result.try( 25 + data |> coder.decode(codec.from_coder) |> result.map_error(DecodingError), 26 + ) 27 + use encoding <- result.try( 28 + codable |> coder.encode(codec.to_coder) |> result.map_error(EncodingError), 29 + ) 30 + Ok(encoding) 31 + } 32 + 33 + pub fn decode( 34 + codec: Codec(from, to, from_error, to_error), 35 + data: to, 36 + ) -> Result(from, CodecError(to_error, from_error)) { 37 + use codable <- result.try( 38 + data |> coder.decode(codec.to_coder) |> result.map_error(DecodingError), 39 + ) 40 + use decoding <- result.try( 41 + codable |> coder.encode(codec.from_coder) |> result.map_error(EncodingError), 42 + ) 43 + Ok(decoding) 44 + }
+230
api/src/coder.gleam
··· 1 + import codable.{type Codable} 2 + import gleam/bit_array 3 + import gleam/dict 4 + import gleam/dynamic/decode 5 + import gleam/function 6 + import gleam/json.{type Json} as gleam_json 7 + import gleam/list 8 + import gleam/option 9 + import gleam/result 10 + import glepack/data as glepack_data 11 + import glepack/decode as glepack_decode 12 + import glepack/encode as glepack_encode 13 + import glepack/error as glepack_error 14 + 15 + pub opaque type Coder(encoding, err) { 16 + Coder( 17 + encode: fn(Codable) -> Result(encoding, err), 18 + decode: fn(encoding) -> Result(Codable, err), 19 + ) 20 + } 21 + 22 + pub fn encode( 23 + data: Codable, 24 + codec: Coder(encoding, err), 25 + ) -> Result(encoding, err) { 26 + codec.encode(data) 27 + } 28 + 29 + pub fn decode( 30 + data: encoding, 31 + codec: Coder(encoding, err), 32 + ) -> Result(Codable, err) { 33 + codec.decode(data) 34 + } 35 + 36 + pub type JsonError { 37 + JsonError(gleam_json.DecodeError) 38 + } 39 + 40 + pub const json = Coder(encode: encode_json, decode: decode_json) 41 + 42 + fn codable_to_json(codable: Codable) -> Json { 43 + case codable { 44 + codable.Nil -> gleam_json.null() 45 + codable.Bool(bool) -> gleam_json.bool(bool) 46 + codable.Int(int) -> gleam_json.int(int) 47 + codable.Float(float) -> gleam_json.float(float) 48 + codable.String(string) -> gleam_json.string(string) 49 + codable.List(list) -> gleam_json.array(list, codable_to_json) 50 + codable.Binary(binary) -> 51 + gleam_json.object([ 52 + #("#type", gleam_json.string("binary")), 53 + #("#payload", gleam_json.string(bit_array.base64_encode(binary, False))), 54 + ]) 55 + codable.Record(record) -> 56 + gleam_json.object([ 57 + #("#type", gleam_json.string("record")), 58 + #( 59 + "#payload", 60 + gleam_json.dict(record, function.identity, codable_to_json), 61 + ), 62 + ]) 63 + codable.Struct(tag, value) -> 64 + gleam_json.object([ 65 + #("#type", gleam_json.string("struct")), 66 + #("#tag", gleam_json.string(tag)), 67 + #("#payload", codable_to_json(value)), 68 + ]) 69 + } 70 + } 71 + 72 + fn json_to_codable() -> decode.Decoder(Codable) { 73 + let typed_decoder = { 74 + use type_key <- decode.field("#type", decode.string) 75 + case type_key { 76 + "binary" -> { 77 + use payload <- decode.field("#payload", decode.string) 78 + case bit_array.base64_decode(payload) { 79 + Ok(binary) -> decode.success(codable.Binary(binary)) 80 + Error(_) -> 81 + decode.failure(codable.Binary(<<>>), "base64 encoded string") 82 + } 83 + } 84 + "record" -> { 85 + use payload <- decode.field( 86 + "#payload", 87 + decode.dict(decode.string, json_to_codable()), 88 + ) 89 + decode.success(codable.Record(payload)) 90 + } 91 + "struct" -> { 92 + use tag <- decode.field("#tag", decode.string) 93 + use payload <- decode.field("#payload", json_to_codable()) 94 + decode.success(codable.Struct(tag, payload)) 95 + } 96 + _ -> decode.failure(codable.Nil, "`binary`, `struct`, or `record`") 97 + } 98 + } 99 + use opt <- decode.map( 100 + decode.optional( 101 + decode.one_of(typed_decoder, [ 102 + decode.map(decode.bool, codable.Bool), 103 + decode.map(decode.float, codable.Float), 104 + decode.map(decode.int, codable.Int), 105 + decode.map(decode.string, codable.String), 106 + decode.map(decode.list(json_to_codable()), codable.List), 107 + ]), 108 + ), 109 + ) 110 + case opt { 111 + option.Some(value) -> value 112 + option.None -> codable.Nil 113 + } 114 + } 115 + 116 + fn encode_json(codable: Codable) -> Result(String, JsonError) { 117 + codable 118 + |> codable_to_json() 119 + |> gleam_json.to_string() 120 + |> Ok() 121 + } 122 + 123 + fn decode_json(json_string: String) -> Result(Codable, JsonError) { 124 + gleam_json.parse(json_string, json_to_codable()) 125 + |> result.map_error(JsonError) 126 + } 127 + 128 + pub type MessagePackError { 129 + MessagePackError(glepack_error.DecodeError) 130 + NonTotalMessage(Codable, BitArray) 131 + MapKeysMustBeStrings 132 + StructTagMustBeString 133 + UnknownExtension(Int) 134 + } 135 + 136 + pub const messagepack = Coder( 137 + encode: encode_messagepack, 138 + decode: decode_messagepack, 139 + ) 140 + 141 + fn codable_to_messagepack(codable: Codable) -> glepack_data.Value { 142 + case codable { 143 + codable.Nil -> glepack_data.Nil 144 + codable.Bool(bool) -> glepack_data.Boolean(bool) 145 + codable.Int(int) -> glepack_data.Integer(int) 146 + codable.Float(float) -> glepack_data.Float(float) 147 + codable.String(string) -> glepack_data.String(string) 148 + codable.Binary(binary) -> glepack_data.Binary(binary) 149 + codable.List(list) -> 150 + glepack_data.Array(list.map(list, codable_to_messagepack)) 151 + codable.Record(dict) -> 152 + dict 153 + |> dict.to_list() 154 + |> list.map(fn(tuple) { 155 + let #(key, value) = tuple 156 + #(glepack_data.String(key), codable_to_messagepack(value)) 157 + }) 158 + |> dict.from_list() 159 + |> glepack_data.Map() 160 + codable.Struct(tag, value) -> { 161 + let assert Ok(key) = glepack_encode.string(tag) 162 + let assert Ok(value) = encode_messagepack(value) 163 + glepack_data.Extension(0, bit_array.append(key, value)) 164 + } 165 + } 166 + } 167 + 168 + fn messagepack_to_codable( 169 + value: glepack_data.Value, 170 + ) -> Result(Codable, MessagePackError) { 171 + case value { 172 + glepack_data.Nil -> Ok(codable.Nil) 173 + glepack_data.Boolean(bool) -> Ok(codable.Bool(bool)) 174 + glepack_data.Integer(int) -> Ok(codable.Int(int)) 175 + glepack_data.Float(float) -> Ok(codable.Float(float)) 176 + glepack_data.String(string) -> Ok(codable.String(string)) 177 + glepack_data.Binary(binary) -> Ok(codable.Binary(binary)) 178 + glepack_data.Array(array) -> { 179 + list.map(array, messagepack_to_codable) 180 + |> result.all() 181 + |> result.map(codable.List) 182 + } 183 + glepack_data.Map(map) -> 184 + map 185 + |> dict.to_list() 186 + |> list.map(fn(tuple) { 187 + case tuple { 188 + #(glepack_data.String(string), value) -> { 189 + use codable <- result.try(messagepack_to_codable(value)) 190 + Ok(#(string, codable)) 191 + } 192 + _ -> Error(MapKeysMustBeStrings) 193 + } 194 + }) 195 + |> result.all() 196 + |> result.map(fn(pairs) { pairs |> dict.from_list() |> codable.Record() }) 197 + glepack_data.Extension(0, bit_array) -> { 198 + use #(tag, trailer) <- result.try( 199 + glepack_decode.value(bit_array) |> result.map_error(MessagePackError), 200 + ) 201 + use tag <- result.try(case tag { 202 + glepack_data.String(tag) -> Ok(tag) 203 + _ -> Error(StructTagMustBeString) 204 + }) 205 + use payload <- result.try(decode_messagepack(trailer)) 206 + Ok(codable.Struct(tag, payload)) 207 + } 208 + glepack_data.Extension(ext, _) -> { 209 + Error(UnknownExtension(ext)) 210 + } 211 + } 212 + } 213 + 214 + fn encode_messagepack(codable: Codable) -> Result(BitArray, MessagePackError) { 215 + let assert Ok(bits) = 216 + codable_to_messagepack(codable) 217 + |> glepack_encode.value() 218 + Ok(bits) 219 + } 220 + 221 + fn decode_messagepack(bit_array: BitArray) -> Result(Codable, MessagePackError) { 222 + use #(value, trailer) <- result.try( 223 + glepack_decode.value(bit_array) |> result.map_error(MessagePackError), 224 + ) 225 + use value <- result.try(messagepack_to_codable(value)) 226 + case trailer { 227 + <<>> -> Ok(value) 228 + _ -> Error(NonTotalMessage(value, trailer)) 229 + } 230 + }
+12
api/src/request.gleam
··· 1 + pub opaque type Request { 2 + Authenticate(auth_token: String) 3 + DebugAddCard(card_id: String) 4 + } 5 + 6 + pub fn authenticate(auth_token: String) -> Request { 7 + Authenticate(auth_token) 8 + } 9 + 10 + pub fn debug_add_card(card_id: String) -> Request { 11 + DebugAddCard(card_id) 12 + }
api/src/response.gleam

This is a binary file and will not be displayed.

+13
api/test/cartography_api_test.gleam
··· 1 + import gleeunit 2 + 3 + pub fn main() -> Nil { 4 + gleeunit.main() 5 + } 6 + 7 + // gleeunit test functions end in `_test` 8 + pub fn hello_world_test() { 9 + let name = "Joe" 10 + let greeting = "Hello, " <> name <> "!" 11 + 12 + assert greeting == "Hello, Joe!" 13 + }
+2 -1
server/gleam.toml
··· 15 15 [dependencies] 16 16 gleam_stdlib = ">= 0.44.0 and < 2.0.0" 17 17 gleam_otp = ">= 1.2.0 and < 2.0.0" 18 - pog = { git = "https://github.com/foxfriends/pog.git", ref = "20bf422" } # ">= 4.1.0 and < 5.0.0" 18 + pog = ">= 4.1.0 and < 5.0.0" 19 19 envoy = ">= 1.1.0 and < 2.0.0" 20 20 gleam_erlang = ">= 1.3.0 and < 2.0.0" 21 21 mist = ">= 5.0.3 and < 6.0.0" ··· 24 24 gleam_time = ">= 1.6.0 and < 2.0.0" 25 25 palabres = ">= 1.0.3 and < 2.0.0" 26 26 squirrel = ">= 4.6.0 and < 5.0.0" 27 + cartography_api = { path = "../api" } 27 28 28 29 [dev-dependencies] 29 30 gleeunit = ">= 1.0.0 and < 2.0.0"
+5 -2
server/manifest.toml
··· 4 4 packages = [ 5 5 { name = "argv", version = "1.0.2", build_tools = ["gleam"], requirements = [], otp_app = "argv", source = "hex", outer_checksum = "BA1FF0929525DEBA1CE67256E5ADF77A7CDDFE729E3E3F57A5BDCAA031DED09D" }, 6 6 { name = "backoff", version = "1.1.6", build_tools = ["rebar3"], requirements = [], otp_app = "backoff", source = "hex", outer_checksum = "CF0CFFF8995FB20562F822E5CC47D8CCF664C5ECDC26A684CBE85C225F9D7C39" }, 7 + { name = "cartography_api", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_json", "gleam_stdlib", "glepack"], source = "local", path = "../api" }, 7 8 { name = "envoy", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "envoy", source = "hex", outer_checksum = "850DA9D29D2E5987735872A2B5C81035146D7FE19EFC486129E44440D03FD832" }, 8 9 { name = "eval", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "eval", source = "hex", outer_checksum = "264DAF4B49DF807F303CA4A4E4EBC012070429E40BE384C58FE094C4958F9BDA" }, 9 10 { name = "exception", version = "2.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "exception", source = "hex", outer_checksum = "329D269D5C2A314F7364BD2711372B6F2C58FA6F39981572E5CA68624D291F8C" }, ··· 21 22 { name = "gleam_time", version = "1.6.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_time", source = "hex", outer_checksum = "0DF3834D20193F0A38D0EB21F0A78D48F2EC276C285969131B86DF8D4EF9E762" }, 22 23 { name = "gleam_yielder", version = "1.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_yielder", source = "hex", outer_checksum = "8E4E4ECFA7982859F430C57F549200C7749823C106759F4A19A78AEA6687717A" }, 23 24 { name = "gleeunit", version = "1.9.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "DA9553CE58B67924B3C631F96FE3370C49EB6D6DC6B384EC4862CC4AAA718F3C" }, 25 + { name = "glepack", version = "0.1.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "glepack", source = "hex", outer_checksum = "37865B894E3745A215E334E2DC48E8AE0EC745ADB29242F883DC895DF3680706" }, 24 26 { name = "glexer", version = "2.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib", "splitter"], otp_app = "glexer", source = "hex", outer_checksum = "40A1FB0919FA080AD6C5809B4C7DBA545841CAAC8168FACDFA0B0667C22475CC" }, 25 27 { name = "glisten", version = "8.0.1", build_tools = ["gleam"], requirements = ["gleam_erlang", "gleam_otp", "gleam_stdlib", "logging", "telemetry"], otp_app = "glisten", source = "hex", outer_checksum = "534BB27C71FB9E506345A767C0D76B17A9E9199934340C975DC003C710E3692D" }, 26 28 { name = "gramps", version = "6.0.0", build_tools = ["gleam"], requirements = ["gleam_crypto", "gleam_erlang", "gleam_http", "gleam_stdlib"], otp_app = "gramps", source = "hex", outer_checksum = "8B7195978FBFD30B43DF791A8A272041B81E45D245314D7A41FC57237AA882A0" }, ··· 34 36 { name = "palabres", version = "1.0.4", build_tools = ["gleam"], requirements = ["envoy", "gleam_stdlib"], otp_app = "palabres", source = "hex", outer_checksum = "2809B7C10AE929E82454B4A6A0FB7D02073C5A509F9A63EE9F7B268A75D98965" }, 35 37 { name = "pg_types", version = "0.6.0", build_tools = ["rebar3"], requirements = [], otp_app = "pg_types", source = "hex", outer_checksum = "9949A4849DD13408FA249AB7B745E0D2DFDB9532AEE2B9722326E33CD082A778" }, 36 38 { name = "pgo", version = "0.20.0", build_tools = ["rebar3"], requirements = ["backoff", "opentelemetry_api", "pg_types"], otp_app = "pgo", source = "hex", outer_checksum = "2F11E6649CEB38E569EF56B16BE1D04874AE5B11A02867080A2817CE423C683B" }, 37 - { name = "pog", version = "4.1.0", build_tools = ["gleam"], requirements = ["exception", "gleam_erlang", "gleam_otp", "gleam_stdlib", "gleam_time", "pgo"], source = "git", repo = "https://github.com/foxfriends/pog.git", commit = "20bf4222c9914ca98fa897a0eb5bcbf8968a5061" }, 39 + { name = "pog", version = "4.1.0", build_tools = ["gleam"], requirements = ["exception", "gleam_erlang", "gleam_otp", "gleam_stdlib", "gleam_time", "pgo"], otp_app = "pog", source = "hex", outer_checksum = "E4AFBA39A5FAA2E77291836C9683ADE882E65A06AB28CA7D61AE7A3AD61EBBD5" }, 38 40 { name = "simplifile", version = "2.3.2", build_tools = ["gleam"], requirements = ["filepath", "gleam_stdlib"], otp_app = "simplifile", source = "hex", outer_checksum = "E049B4DACD4D206D87843BCF4C775A50AE0F50A52031A2FFB40C9ED07D6EC70A" }, 39 41 { name = "splitter", version = "1.2.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "splitter", source = "hex", outer_checksum = "3DFD6B6C49E61EDAF6F7B27A42054A17CFF6CA2135FF553D0CB61C234D281DD0" }, 40 42 { name = "squirrel", version = "4.6.0", build_tools = ["gleam"], requirements = ["argv", "envoy", "eval", "filepath", "glam", "gleam_community_ansi", "gleam_crypto", "gleam_json", "gleam_regexp", "gleam_stdlib", "gleam_time", "glexer", "justin", "mug", "non_empty_list", "pog", "simplifile", "term_size", "tom", "tote", "youid"], otp_app = "squirrel", source = "hex", outer_checksum = "0ED10A868BDD1A5D4B68D99CD1C72DC3F23C6E36E16D33454C5F0C31BAC9CB1E" }, ··· 46 48 ] 47 49 48 50 [requirements] 51 + cartography_api = { path = "../api" } 49 52 envoy = { version = ">= 1.1.0 and < 2.0.0" } 50 53 gleam_erlang = { version = ">= 1.3.0 and < 2.0.0" } 51 54 gleam_http = { version = ">= 4.3.0 and < 5.0.0" } ··· 56 59 gleeunit = { version = ">= 1.0.0 and < 2.0.0" } 57 60 mist = { version = ">= 5.0.3 and < 6.0.0" } 58 61 palabres = { version = ">= 1.0.3 and < 2.0.0" } 59 - pog = { git = "https://github.com/foxfriends/pog.git", ref = "20bf422" } 62 + pog = { version = ">= 4.1.0 and < 5.0.0" } 60 63 squirrel = { version = ">= 4.6.0 and < 5.0.0" }