Conversation
|
This pull request is being automatically deployed with Vercel (learn more). 🔍 Inspect: https://vercel.com/markedjs/markedjs/38ErXbTFie3utmH93Wg33w7gpLRQ |
This edge case is already handled within the splitCells function
…child/marked into RefactorTableCellTokens
|
Bonus! CodeQL found a Regex vulnerability for an edge case that we already handled in #2126 |
| item.header.tokens[j] = []; | ||
| this.lexer.inlineTokens(item.header.text[j], item.header.tokens[j]); |
There was a problem hiding this comment.
Now that I think about it the tokens property here is an array of token arrays.
Maybe instead we should do:
{
type: 'table',
align: [null, null],
raw: '| a | b |\n|---|---|\n| 1 | 2 |\n',
header: {
items: [
{
text: 'a',
tokens: [{ type: 'text', raw: 'a', text: 'a' }],
},
{
text: 'b',
tokens: [{ type: 'text', raw: 'b', text: 'b' }],
}
]
},
rows: [ // replace `cells` with `rows`
{ // row 1
items: [
{
text: '1',
tokens: [{ type: 'text', raw: '1', text: '1' }],
},
{
text: '2',
tokens: [{ type: 'text', raw: '2', text: '2' }],
}
]
}
]
}That seems to be more consistent with the rest of the tokens (including lists)
There was a problem hiding this comment.
Hm. Good point. I have a thought on this then:
Is it worth it to have header and row as objects with a single property items? An object with a single property seems redundant and maybe slightly slows things with extra object accesses? What if instead header and rows are just arrays like items is an array? So a List has Items, a Table has Headers and Rows, but they use the same format of being an array of "sub-tokens" (with rows being and array of arrays of sub-tokens):
{
type: 'table',
align: [null, null],
raw: '| a | b |\n|---|---|\n| 1 | 2 |\n',
header: [
{
text: 'a',
tokens: [{ type: 'text', raw: 'a', text: 'a' }],
},
{
text: 'b',
tokens: [{ type: 'text', raw: 'b', text: 'b' }],
}
],
rows: [ // replace `cells` with `rows`
[ // row 1
{
text: '1',
tokens: [{ type: 'text', raw: '1', text: '1' }],
},
{
text: '2',
tokens: [{ type: 'text', raw: '2', text: '2' }],
}
]
]
}
TLDR:
Instead of
Table- which has a property of
header
*which has as sub-token ofitemswhich seems like one level too deep.
- which has a property of
we could have:
Table- which as some sub-tokens
header.
- which as some sub-tokens
There was a problem hiding this comment.
@UziTech This is now changed. Want another look at it?
224e0e2 to
3f57f4e
Compare
# [3.0.0](v2.1.3...v3.0.0) (2021-08-16) ### Bug Fixes * Add module field to package.json ([#2143](#2143)) ([edc2e6d](edc2e6d)) * drop node 10 support ([#2157](#2157)) ([433b16f](433b16f)) * Full Commonmark compliance for Lists ([#2112](#2112)) ([eb33d3b](eb33d3b)) * Refactor table tokens ([#2166](#2166)) ([bc400ac](bc400ac)) ### BREAKING CHANGES * - `table` tokens `header` property changed to contain an array of objects for each header cell with `text` and `tokens` properties. - `table` tokens `cells` property changed to `rows` and is an array of rows where each row contains an array of objects for each cell with `text` and `tokens` properties. v2: ```json { "type": "table", "align": [null, null], "raw": "| a | b |\n|---|---|\n| 1 | 2 |\n", "header": ["a", "b"], "cells": [["1", "2"]], "tokens": { "header": [ [{ "type": "text", "raw": "a", "text": "a" }], [{ "type": "text", "raw": "b", "text": "b" }] ], "cells": [[ [{ "type": "text", "raw": "1", "text": "1" }], [{ "type": "text", "raw": "2", "text": "2" }] ]] } } ``` v3: ```json { "type": "table", "align": [null, null], "raw": "| a | b |\n|---|---|\n| 1 | 2 |\n", "header": [ { "text": "a", "tokens": [{ "type": "text", "raw": "a", "text": "a" }] }, { "text": "b", "tokens": [{ "type": "text", "raw": "b", "text": "b" }] } ], "rows": [ { "text": "1", "tokens": [{ "type": "text", "raw": "1", "text": "1" }] }, { "text": "2", "tokens": [{ "type": "text", "raw": "2", "text": "2" }] } ] } ``` * Add module field to package.json * drop node 10 support
|
🎉 This PR is included in version 3.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
# [3.0.0](markedjs/marked@v2.1.3...v3.0.0) (2021-08-16) ### Bug Fixes * Add module field to package.json ([#2143](markedjs/marked#2143)) ([7f3e691](markedjs/marked@7f3e691)) * drop node 10 support ([#2157](markedjs/marked#2157)) ([29676e3](markedjs/marked@29676e3)) * Full Commonmark compliance for Lists ([#2112](markedjs/marked#2112)) ([907ccdf](markedjs/marked@907ccdf)) * Refactor table tokens ([#2166](markedjs/marked#2166)) ([5f5051e](markedjs/marked@5f5051e)) ### BREAKING CHANGES * - `table` tokens `header` property changed to contain an array of objects for each header cell with `text` and `tokens` properties. - `table` tokens `cells` property changed to `rows` and is an array of rows where each row contains an array of objects for each cell with `text` and `tokens` properties. v2: ```json { "type": "table", "align": [null, null], "raw": "| a | b |\n|---|---|\n| 1 | 2 |\n", "header": ["a", "b"], "cells": [["1", "2"]], "tokens": { "header": [ [{ "type": "text", "raw": "a", "text": "a" }], [{ "type": "text", "raw": "b", "text": "b" }] ], "cells": [[ [{ "type": "text", "raw": "1", "text": "1" }], [{ "type": "text", "raw": "2", "text": "2" }] ]] } } ``` v3: ```json { "type": "table", "align": [null, null], "raw": "| a | b |\n|---|---|\n| 1 | 2 |\n", "header": [ { "text": "a", "tokens": [{ "type": "text", "raw": "a", "text": "a" }] }, { "text": "b", "tokens": [{ "type": "text", "raw": "b", "text": "b" }] } ], "rows": [ { "text": "1", "tokens": [{ "type": "text", "raw": "1", "text": "1" }] }, { "text": "2", "tokens": [{ "type": "text", "raw": "2", "text": "2" }] } ] } ``` * Add module field to package.json * drop node 10 support
Pretty small change to address #2165.
headerandcellsare now formatted as "sub-tokens" (similar tolist itemsin alist) rather than having separateheadersandtokens.headers. This also means child tokens are now in atokensproperty to follow the convention of the other lexer tokens for consistency.Changes the Table signature though so this is breaking and should be in V3.0
Previous token signature:
New token signature