+4
-1
.formatter.exs
+4
-1
.formatter.exs
+7
-1
CHANGELOG.md
+7
-1
CHANGELOG.md
···
+309
lib/atex/lexicon.ex
+309
lib/atex/lexicon.ex
···+Provide `deflexicon` macro for defining a module with types and schemas from an entire lexicon definition.+# Better way to get the real map, without having to eval? (custom function to compose one from quoted?)+@spec field_to_schema(field_def :: %{type: String.t()}, nsid :: String.t()) :: Peri.schema_def()+# Can't unquote the inner_schema beforehand as that would risk evaluating `get_schema`s which don't exist yet.+|> then(fn {:custom, {:{}, c, [Validators.Array, :validate, [quoted_inner_schema | args]]}} ->
+265
lib/atex/lexicon/schema.ex
+265
lib/atex/lexicon/schema.ex
···+~r/^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\.[a-zA-Z]([a-zA-Z]{0,61}[a-zA-Z])?)$/}}},+~r/^(?=.)(?:[a-zA-Z](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?:\.[a-zA-Z](?:[a-zA-Z]{0,61}[a-zA-Z])?))?(?:#[a-zA-Z](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)?$/
+26
-5
lib/atex/lexicon/validators.ex
+26
-5
lib/atex/lexicon/validators.ex
·········
+32
lib/atex/lexicon/validators/bytes.ex
+32
lib/atex/lexicon/validators/bytes.ex
···
+2
-17
lib/atex/lexicon/validators/integer.ex
+2
-17
lib/atex/lexicon/validators/integer.ex
······
+2
-19
lib/atex/lexicon/validators/string.ex
+2
-19
lib/atex/lexicon/validators/string.ex
·········
+29
lib/atex/nsid.ex
+29
lib/atex/nsid.ex
···
+23
lib/atex/peri.ex
+23
lib/atex/peri.ex
···
+115
lib/atproto/sh/comet/v0/actor/profile.ex
+115
lib/atproto/sh/comet/v0/actor/profile.ex
···+"Metadata about the requesting account's relationship with the user. TODO: determine if we create our own graph or inherit bsky's.",
+44
lib/atproto/sh/comet/v0/feed/defs.ex
+44
lib/atproto/sh/comet/v0/feed/defs.ex
···+"Link for the track. Usually to acquire it in some way, e.g. via free download or purchase. | TODO: multiple links?",+"Metadata about the requesting account's relationship with the subject content. Only has meaningful content for authed requests.",
+45
lib/atproto/sh/comet/v0/feed/getActorTracks.ex
+45
lib/atproto/sh/comet/v0/feed/getActorTracks.ex
···
+189
lib/atproto/sh/comet/v0/feed/track.ex
+189
lib/atproto/sh/comet/v0/feed/track.ex
···+# TODO: need an example with `nullable` fields to demonstrate how those are handled (and also the weird extra types in lexicon defs like union)+"A Comet audio track. TODO: should probably have some sort of pre-calculated waveform, or have a query to get one from a blob?",+"Whether the track contains explicit content that may objectionable to some people, usually swearing or adult themes.",+"Timestamp for when the track was released. If in the future, may be used to implement pre-savable tracks.",+"URL pointing to where the audio data for the track can be fetched. May be re-encoded from the original blob.",
+70
lib/atproto/sh/comet/v0/richtext/facet.ex
+70
lib/atproto/sh/comet/v0/richtext/facet.ex
···+"Specifies the sub-string range a facet feature applies to. Start index is inclusive, end index is exclusive. Indices are zero-indexed, counting bytes of the UTF-8 encoded text. NOTE: some languages, like Javascript, use UTF-16 or Unicode codepoints for string slice indexing; in these languages, convert to byte arrays before working with facets.",+"Facet feature for a URL. The text URL may have been simplified or truncated, but the facet reference should be a complete URL.",+"Facet feature for mention of another account. The text is usually a handle, including a '@' prefix, but the facet reference is a DID.",+"Facet feature for a hashtag. The text usually includes a '#' prefix, but the facet reference should not (except in the case of 'double hash tags').",+"Facet feature for a timestamp in a track. The text usually is in the format of 'hh:mm:ss' with the hour section being omitted if unnecessary.",
+1
-1
mix.exs
+1
-1
mix.exs
+1
-1
mix.lock
+1
-1
mix.lock
···"nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"},"nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"},"nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"},-"peri": {:hex, :peri, "0.5.1", "2140fd94095282aea1435c98307f25dde42005d319abb9927179301c310619c1", [:mix], [{:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:stream_data, "~> 1.1", [hex: :stream_data, repo: "hexpm", optional: true]}], "hexpm", "c214590d3bdf9d0e5f6d36df1cc87d956b7625c9ba32ca786983ba6df1936be3"},+"peri": {:hex, :peri, "0.6.0", "0758aa037f862f7a3aa0823cb82195916f61a8071f6eaabcff02103558e61a70", [:mix], [{:ecto, "~> 3.12", [hex: :ecto, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:stream_data, "~> 1.1", [hex: :stream_data, repo: "hexpm", optional: true]}], "hexpm", "b27f118f3317fbc357c4a04b3f3c98561efdd8865edd4ec0e24fd936c7ff36c8"},"recase": {:hex, :recase, "0.8.1", "ab98cd35857a86fa5ca99036f575241d71d77d9c2ab0c39aacf1c9b61f6f7d1d", [:mix], [], "hexpm", "9fd8d63e7e43bd9ea385b12364e305778b2bbd92537e95c4b2e26fc507d5e4c2"},"req": {:hex, :req, "0.5.12", "7ce85835867a114c28b6cfc2d8a412f86660290907315ceb173a00e587b853d2", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:ezstd, "~> 1.0", [hex: :ezstd, repo: "hexpm", optional: true]}, {:finch, "~> 0.17", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "d65f3d0e7032eb245706554cb5240dbe7a07493154e2dd34e7bb65001aa6ef32"},