aboutsummaryrefslogtreecommitdiffstats
path: root/teal-src
Commit message (Collapse)AuthorAgeFilesLines
* util.datamapper: Improve handling of schemas with non-obvious "type"Kim Alvefur2022-07-081-12/+31
| | | | | | | | | | | | The JSON Schema specification says that schemas are objects or booleans, and that the 'type' property is optional and can be an array. This module previously allowed bare type names as schemas and did not really handle booleans. It now handles missing 'type' properties and boolean 'true' as a schema. Objects and arrays are guessed based on the presence of 'properties' or 'items' field.
* util.jsonschema: Fix validation to not assume presence of "type" fieldKim Alvefur2022-07-081-147/+152
| | | | | | | | | | | | | | | | | | | | | | MattJ reported a curious issue where validation did not work as expected. Primarily that the "type" field was expected to be mandatory, and thus leaving it out would result in no checks being performed. This was likely caused by misreading during initial development. Spent some time testing against https://github.com/json-schema-org/JSON-Schema-Test-Suite.git and discovered a multitude of issues, far too many to bother splitting into separate commits. More than half of them fail. Many because of features not implemented, which have been marked NYI. For example, some require deep comparisons e.g. when objects or arrays are present in enums fields. Some because of quirks with how Lua differs from JavaScript, e.g. no distinct array or object types. Tests involving fractional floating point numbers. We're definitely not going to follow references to remote resources. Or deal with UTF-16 sillyness. One test asserted that 1.0 is an integer, where Lua 5.3+ will disagree.
* util.jsonpointer: Fix off-by-one in array resolutionKim Alvefur2022-05-081-1/+1
| | | | | | Fixes #1753 Not known to be used anywhere
* mod_cron: Fix recording last task run time #1751Kim Alvefur2022-05-051-0/+1
| | | | | | | The type checks, they do nothing! Observed: Tasks that were supposed to run weekly or daily were running each hour.
* Spelling: Fix various spelling mistakes (thanks timeless)Kim Alvefur2022-03-071-1/+1
| | | | | | Words, sometimes I wonder how they even work Maybe I missed something.
* util.poll: Add support for the poll() APIKim Alvefur2022-02-231-1/+3
| | | | Might be better than select(), more portable than epoll.
* util.poll: Expose API (epoll or select) usedKim Alvefur2022-02-271-0/+5
| | | | Could he handy to know for debugging or decisions
* util.xtemplate: Yet another string template libraryKim Alvefur2022-01-241-0/+101
| | | | | | This one takes a stanza as input Roughly based on util.interpolation
* mod_cron: Allow for a small amount of timer driftKim Alvefur2022-01-151-1/+1
| | | | | | | | | If the timer activates a bit early then a task might be just a few seconds short of being allowed to run. This would run such a task rather than wait another hour. The value 0.5% chosen so that a weekly task does not run an entire hour earlier than last time.
* util.datamapper: Add support for $ref pointersKim Alvefur2021-12-291-21/+39
| | | | Allows reuse of repetitive definitions in schemas.
* util.jsonschema: Add support for $ref pointersKim Alvefur2021-12-291-23/+37
|
* util.jsonpointer: Resolve JSON Pointers per RFC 6901Kim Alvefur2021-12-291-0/+46
|
* util.smqueue: Simplify compat table, fix dependent modules (thanks Martin)Kim Alvefur2021-12-161-15/+6
| | | | | | There was an off-by-one in the modulo calculation. Switching to a plain old array-table makes the apparent size of the queue wrong, but since some of the queue may not be available this is likely for the best.
* util.smqueue: Add missing method to Teal record specKim Alvefur2021-12-161-1/+2
|
* util.smqueue: Abstract queue with acknowledgements and overflowKim Alvefur2021-12-141-0/+107
| | | | | | | | Meant to be used in mod_smacks for XEP-0198 Meant to have a larger virtual size than actual number of items stored, on the theory that in most cases, the excess will be acked before needed for a resumption event.
* mod_cron: Add a 'weekly' job frequencyKim Alvefur2021-12-031-1/+2
|
* mod_cron: Initialize timestamp of new tasks to start of periodKim Alvefur2021-12-031-3/+3
| | | | | Makes it more generic so new periods (e.g. weekly etc) can be added easily.
* mod_cron: Follow convention of imports at the topKim Alvefur2021-12-031-1/+2
|
* mod_cron: Initialize daily tasks so they run around midnight UTCKim Alvefur2021-12-031-0/+5
| | | | | | Eventually the goal is to have daily tasks run while there is little activity, but that will vary with the server and the usage patterns of its users. This is a start anyway.
* mod_cron: Initial commit of periodic task runnerKim Alvefur2021-11-211-0/+98
| | | | | | A number of modules now have periodic tasks that need to run, e.g. for cleaning out old messages or files. This has highlighted a need for coordinating and optimizing scheduling of such tasks.
* teal: Describe the module API interfaceKim Alvefur2021-03-241-0/+145
| | | | Helps when writing modules in Teal
* util.pposix: Bind isatty(3)Kim Alvefur2021-07-041-0/+2
| | | | | Useful for disabling certain behavior, ANSI colors etc when not connected to a terminal.
* util.stanza: Export pretty printing functionKim Alvefur2021-06-291-0/+1
|
* teal: Add type spec for util.signalKim Alvefur2021-05-201-0/+41
|
* teal: Add type spec for util.ringbufferKim Alvefur2021-05-201-0/+20
|
* teal: Describe util.net.local_addresses() return typeKim Alvefur2021-05-201-1/+1
|
* teal: Add new util.hashes APIsKim Alvefur2021-05-201-0/+2
|
* util.datamapper: Don't include empty unwrapped arraysKim Alvefur2021-03-241-1/+4
| | | | | | Since there is no way to distinguish an empty such array from a zero-length array. Dropping it seems like the least annoying thing to do.
* util.datamapper: Fix error on attempt to coerce nil to somethingKim Alvefur2021-03-231-0/+1
| | | | | | Turns falsy values into nil instead of nothing, which ensures this function always has 1 return value, or table.insert({}) complains. Would still happen on some unexpected input, but that's actually a good thing.
* util.datamapper: Deal with locally built stanzas missing xmlnsKim Alvefur2021-03-231-5/+5
| | | | | | | | | | | | | | | | | | | | | So the problem is that xmlns is not inherited when building a stanza, and then :get_child(n, ns) with an explicit namespace does not find that such child tags. E.g. local t = st.stanza("foo", { xmlns = "urn:example:bar" }) :text_tag("hello", "world"); assert(t:get_child("hello", "urn:example:bar"), "This fails"); Meanwhile, during parsing (util.xmppstream or util.xml) child tags do get the parents xmlns when not overriding them. Thus, in the above example, if the stanza is passed trough `t = util.xml.parse(tostring(t))` then the assert succeeds. This change makes it so that it leaves out the namespace argument to :get_child when it is the same as the current/parent namespace, which behaves the same for both built and parsed stanzas.
* util.datamapper: Factor out conversion from any value to XML stringKim Alvefur2021-03-221-29/+17
| | | | Since this was the last severely duplicated code left.
* util.datamapper: Handle nested arrays or objects in arraysKim Alvefur2021-03-221-4/+22
|
* util.datamapper: Fix to skip parsing wrapped arrays that aren't thereKim Alvefur2021-03-221-2/+0
| | | | Turns out the unreachable error is reachable :D
* util.datamapper: Clear done TODO (arrays)Kim Alvefur2021-03-211-1/+0
| | | | | | | | | Relevant commits: * 6a51749af7f4 * 0e00fa518688 * d1982b7eb00d * c098d07e6717 * 348b191cd850
* util.datamapper: Complete array building supportKim Alvefur2021-03-201-12/+3
|
* util.datamapper: Factor out handling of object properties for array reuseKim Alvefur2021-03-201-79/+82
|
* util.datamapper: Finally implement support for parsing arraysKim Alvefur2021-03-201-17/+13
|
* util.datamapper: Factor out extraction of the XML part to useKim Alvefur2021-03-201-40/+42
| | | | | | | | So extract_value() takes an XML tag and details about which part we're interested in and returns that. Factoring this out will help with array implementation since this will be common behavior.
* util.datamapper: Only get element name if there's an elementKim Alvefur2021-03-191-1/+3
| | | | Fixes error due to attempting to index a nil value
* util.datamapper: Fix arrays nesting one level too deepKim Alvefur2021-03-191-9/+7
|
* util.datamapper: Deal with type name changes in util.jsonschemaKim Alvefur2021-03-191-29/+33
|
* util.jsonschema: Rename types for improved readabilityKim Alvefur2021-03-182-27/+44
|
* teal: Use new integer support in Teal 0.13.0Kim Alvefur2021-03-1814-53/+57
|
* util.datamapper: Limited support for unparsing simple arrays of stringsKim Alvefur2021-03-181-2/+32
|
* util.datamapper: Add initial support for parsing arraysKim Alvefur2021-03-181-9/+47
|
* util.datamapper: Factor out common schema unpackingKim Alvefur2021-03-141-83/+57
| | | | | This code extracts the bits from the schema that determines how the data is to be mapped to/from XML.
* util.datamapper: Separate extraction of xml from coercion to target typeKim Alvefur2021-03-141-34/+28
| | | | | | Now it gets the text, attribute or name first, then turns it into whatever the schema wants. This should be easier to further factor out into preparation for array support.
* util.datamapper: Use enum instead of mutually exclusive booleansKim Alvefur2021-03-141-20/+27
| | | | Cleaner and rules out invalid combinations.
* util.datamapper: Enumerated elementsKim Alvefur2021-03-121-1/+20
| | | | E.g. error conditions or chat states.
* util.datamapper: Some TODOsKim Alvefur2021-03-101-0/+4
|