Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mrjacobbloom/type-xml
This is an experiment in pushing the limits of the TypeScript compiler: an XML parser that operates entirely on string literal types.
https://github.com/mrjacobbloom/type-xml
Last synced: 6 days ago
JSON representation
This is an experiment in pushing the limits of the TypeScript compiler: an XML parser that operates entirely on string literal types.
- Host: GitHub
- URL: https://github.com/mrjacobbloom/type-xml
- Owner: mrjacobbloom
- License: mit
- Created: 2022-01-18T06:44:21.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2022-01-18T06:54:39.000Z (almost 3 years ago)
- Last Synced: 2024-12-16T11:10:38.710Z (20 days ago)
- Language: TypeScript
- Size: 8.79 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# type-xml
This is an experiment in pushing the limits of the TypeScript compiler: an XML parser that operates entirely on string literal types. You can parse a string literal type and get meaningful data out of it, and 100% of the code will go away when compiled.
```
# to install:
npm install type-xml
``````typescript
import { Parse } from 'type-xml';type input = `
`;
Foo
Bar
Baz
Quxtype output = Parse[0]; // "Returns" an array (tuple) of string types and Node object types
type a = output['tag']; // "div"
type b = output['attributes']['style']; // "background: blue"
type c = output['children']; // [Node<'selfClosing'>, "Foo", ...] (note: several whitespace text nodes removed for clarity)
```## Caveats
This is largely a proof of concept/experiment. It's certainly not spec compliant and is not suitable for use in a production environment. Some things worth noting:- It can only handle fairly small input strings. The longest I've gotten it to parse was 1250 characters long, and about 270 tokens. I'm not sure whether it's the character length or number of tokens, but either way longer files cause TypeScript to hit its maximum recursion depth.
- Behavior for poorly-formed XML isn't guaranteed to be correct.
- The spec explicitly lists character ranges that are acceptable in tag/attribute names. Reproducing those character lists in TS would quickly get unwieldy and is probably impossible, so this parser errs on the side of being forgiving. That means that invalid names like `<1^ />` will be treated as valid.### Supported XML language features
Only a subset of XML language features are supported. If your documents are well-formed and limited to tags, text-nodes, attributes, self-closing tags, doctypes/XML-declarations, and comments, you should be safe.- Entities (escaped characters) are not handled. so `` will give you a value for bar of `"`.
- Comments,`