Comments (4)
(Originally posted this on #160, reproducing here for completeness)
The underlying problem here is with the way that Markdoc identifies the end of a tag construct in content. When it sees a {%
in the text, it scans forward each character until it finds a matching %}
that is not inside of a string. It does this in order to avoid prematurely identifying the tag end when it encounters tag-like syntax inside of a string attribute value. This means that if a tag has an unterminated string, the parser assumes that the actual closing is still inside of that string and it declines to match it as a tag.
What we should probably do is solve this in the markdown-it plugin and make the parser generate an error for the whole block any time it sees the tag start syntax without a matched end. I think this would be cleaner than trying to identify malformed tags during the validation process. I will tackle fixing this myself at some point in the next week or two.
For now, if you want to be able to catch these cases reliably during validation without a large surface area of potential false positives, I would suggest overriding the text
schema node and doing the validation check there. Here's a quick-and-dirty example of something you can include in your Markdoc config to achieve this:
export const text: Schema = {
attributes: {
content: { type: String, required: true },
},
transform(node) {
return node.attributes.content;
},
validate(node: Node, config: Config) {
if (node.attributes?.content?.match?.(/{%[^%}]+%}/)) {
return [{
id: 'attribute-value-invalid',
level: 'error',
message:
'The string attribute must have an opening and closing quote',
}]
return [];
}
Thanks for raising this issue!
from markdoc.
What happened?
This was quite hard to debug. I had the following:
{% quote content="test /%}
No error was thrown. I'd expect that the parser throws an error.
To reproduce
See above.
Version
0.1.3
Additional context
No response
Test
from markdoc.
What happened?
This was quite hard to debug. I had the following:
{% quote content="test /%}
No error was thrown. I'd expect that the parser throws an error.
To reproduce
See above.
Version
0.1.3
Additional context
No response
Test
Test
from markdoc.
What happened?
This was quite hard to debug. I had the following:
{% quote content="test /%}
No error was thrown. I'd expect that the parser throws an error.
To reproduce
See above.
Version
0.1.3
Additional context
No response
Test
Test
{% quote content="test /%}
from markdoc.
Related Issues (20)
- Markdoc Language Server: HOT 9
- Code block followed by a string adds a <space> into the code block instead of outside HOT 1
- next.js plugin is missing types HOT 1
- appDir Configuration No Longer Working in Next.js 13.5 with markdoc/next.js HOT 4
- Markdoc language server extension fails to run in VS Code HOT 1
- Fetching markdoc props inside the next app router HOT 1
- Allow metadata export to be optional in markdoc/next.js
- html-nodejs example: document undefined error in Windows system, but same works in macOS
- `\n` in string attribute causes syntax error HOT 2
- allowIndentation docs are outdated HOT 3
- Table's width attribute throws type error on strings HOT 1
- Unclosed selfClosing tag vacuums everything after it in the page HOT 4
- Update Config types to account for Schema render function
- Attributes don't render on Cloudflare Workers (but work locally) HOT 1
- Render image with data URI (image/svg+xml) HOT 3
- Code fence doesn't pass through info string HOT 2
- Markdoc `module.exports` pattern not working with Next.js `14.1.0` HOT 5
- Website using markdoc getting crash randomly with TypeError: Cannot read properties of undefined (reading 'content') HOT 1
- `transform` should work with Promises but doesn't HOT 2
- Replace the Tag class by a POJO to make the RenderableTreeNode serializable HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from markdoc.