Refactor routing in App component to enhance navigation and improve error handling by integrating dynamic routes and updating the NotFound route.
This commit is contained in:
171
node_modules/markdown-table/index.d.ts
generated
vendored
Normal file
171
node_modules/markdown-table/index.d.ts
generated
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
/**
|
||||
* Generate a markdown
|
||||
* ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))
|
||||
* table.
|
||||
*
|
||||
* @param {ReadonlyArray<ReadonlyArray<string | null | undefined>>} table
|
||||
* Table data (matrix of strings).
|
||||
* @param {Readonly<Options> | null | undefined} [options]
|
||||
* Configuration (optional).
|
||||
* @returns {string}
|
||||
* Result.
|
||||
*/
|
||||
export function markdownTable(table: ReadonlyArray<ReadonlyArray<string | null | undefined>>, options?: Readonly<Options> | null | undefined): string;
|
||||
/**
|
||||
* Configuration.
|
||||
*/
|
||||
export type MarkdownTableOptions = Options;
|
||||
/**
|
||||
* Configuration.
|
||||
*/
|
||||
export type Options = {
|
||||
/**
|
||||
* Whether to align the delimiters (default: `true`);
|
||||
* they are aligned by default:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | ----- | ----- |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*
|
||||
* Pass `false` to make them staggered:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | - | - |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*/
|
||||
alignDelimiters?: boolean | null | undefined;
|
||||
/**
|
||||
* How to align columns (default: `''`);
|
||||
* one style for all columns or styles for their respective columns;
|
||||
* each style is either `'l'` (left), `'r'` (right), or `'c'` (center);
|
||||
* other values are treated as `''`, which doesn’t place the colon in the
|
||||
* alignment row but does align left;
|
||||
* *only the lowercased first character is used, so `Right` is fine.*
|
||||
*/
|
||||
align?: ReadonlyArray<string | null | undefined> | string | null | undefined;
|
||||
/**
|
||||
* Whether to end each row with the delimiter (default: `true`).
|
||||
*
|
||||
* > 👉 **Note**: please don’t use this: it could create fragile structures
|
||||
* > that aren’t understandable to some markdown parsers.
|
||||
*
|
||||
* When `true`, there are ending delimiters:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | ----- | ----- |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*
|
||||
* When `false`, there are no ending delimiters:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B
|
||||
* | ----- | -----
|
||||
* | C | Delta
|
||||
* ```
|
||||
*/
|
||||
delimiterEnd?: boolean | null | undefined;
|
||||
/**
|
||||
* Whether to begin each row with the delimiter (default: `true`).
|
||||
*
|
||||
* > 👉 **Note**: please don’t use this: it could create fragile structures
|
||||
* > that aren’t understandable to some markdown parsers.
|
||||
*
|
||||
* When `true`, there are starting delimiters:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | ----- | ----- |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*
|
||||
* When `false`, there are no starting delimiters:
|
||||
*
|
||||
* ```markdown
|
||||
* Alpha | B |
|
||||
* ----- | ----- |
|
||||
* C | Delta |
|
||||
* ```
|
||||
*/
|
||||
delimiterStart?: boolean | null | undefined;
|
||||
/**
|
||||
* Whether to add a space of padding between delimiters and cells
|
||||
* (default: `true`).
|
||||
*
|
||||
* When `true`, there is padding:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | ----- | ----- |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*
|
||||
* When `false`, there is no padding:
|
||||
*
|
||||
* ```markdown
|
||||
* |Alpha|B |
|
||||
* |-----|-----|
|
||||
* |C |Delta|
|
||||
* ```
|
||||
*/
|
||||
padding?: boolean | null | undefined;
|
||||
/**
|
||||
* Function to detect the length of table cell content (optional);
|
||||
* this is used when aligning the delimiters (`|`) between table cells;
|
||||
* full-width characters and emoji mess up delimiter alignment when viewing
|
||||
* the markdown source;
|
||||
* to fix this, you can pass this function,
|
||||
* which receives the cell content and returns its “visible” size;
|
||||
* note that what is and isn’t visible depends on where the text is displayed.
|
||||
*
|
||||
* Without such a function, the following:
|
||||
*
|
||||
* ```js
|
||||
* markdownTable([
|
||||
* ['Alpha', 'Bravo'],
|
||||
* ['中文', 'Charlie'],
|
||||
* ['👩❤️👩', 'Delta']
|
||||
* ])
|
||||
* ```
|
||||
*
|
||||
* Yields:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | Bravo |
|
||||
* | - | - |
|
||||
* | 中文 | Charlie |
|
||||
* | 👩❤️👩 | Delta |
|
||||
* ```
|
||||
*
|
||||
* With [`string-width`](https://github.com/sindresorhus/string-width):
|
||||
*
|
||||
* ```js
|
||||
* import stringWidth from 'string-width'
|
||||
*
|
||||
* markdownTable(
|
||||
* [
|
||||
* ['Alpha', 'Bravo'],
|
||||
* ['中文', 'Charlie'],
|
||||
* ['👩❤️👩', 'Delta']
|
||||
* ],
|
||||
* {stringLength: stringWidth}
|
||||
* )
|
||||
* ```
|
||||
*
|
||||
* Yields:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | Bravo |
|
||||
* | ----- | ------- |
|
||||
* | 中文 | Charlie |
|
||||
* | 👩❤️👩 | Delta |
|
||||
* ```
|
||||
*/
|
||||
stringLength?: ((value: string) => number) | null | undefined;
|
||||
};
|
||||
//# sourceMappingURL=index.d.ts.map
|
1
node_modules/markdown-table/index.d.ts.map
generated
vendored
Normal file
1
node_modules/markdown-table/index.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.js"],"names":[],"mappings":"AA6JA;;;;;;;;;;;GAWG;AACH,qCAPW,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,YAEvD,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAElC,MAAM,CAsMlB;;;;mCA1WY,OAAO;;;;;;;;;;;;;;;;;;;;;;;sBAON,OAAO,GAAG,IAAI,GAAG,SAAS;;;;;;;;;YAiB1B,aAAa,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;mBAOpE,OAAO,GAAG,IAAI,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;qBAqB1B,OAAO,GAAG,IAAI,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;cAqB1B,OAAO,GAAG,IAAI,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAmB1B,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS"}
|
393
node_modules/markdown-table/index.js
generated
vendored
Normal file
393
node_modules/markdown-table/index.js
generated
vendored
Normal file
@@ -0,0 +1,393 @@
|
||||
// To do: next major: remove.
|
||||
/**
|
||||
* @typedef {Options} MarkdownTableOptions
|
||||
* Configuration.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef Options
|
||||
* Configuration.
|
||||
* @property {boolean | null | undefined} [alignDelimiters=true]
|
||||
* Whether to align the delimiters (default: `true`);
|
||||
* they are aligned by default:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | ----- | ----- |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*
|
||||
* Pass `false` to make them staggered:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | - | - |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
* @property {ReadonlyArray<string | null | undefined> | string | null | undefined} [align]
|
||||
* How to align columns (default: `''`);
|
||||
* one style for all columns or styles for their respective columns;
|
||||
* each style is either `'l'` (left), `'r'` (right), or `'c'` (center);
|
||||
* other values are treated as `''`, which doesn’t place the colon in the
|
||||
* alignment row but does align left;
|
||||
* *only the lowercased first character is used, so `Right` is fine.*
|
||||
* @property {boolean | null | undefined} [delimiterEnd=true]
|
||||
* Whether to end each row with the delimiter (default: `true`).
|
||||
*
|
||||
* > 👉 **Note**: please don’t use this: it could create fragile structures
|
||||
* > that aren’t understandable to some markdown parsers.
|
||||
*
|
||||
* When `true`, there are ending delimiters:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | ----- | ----- |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*
|
||||
* When `false`, there are no ending delimiters:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B
|
||||
* | ----- | -----
|
||||
* | C | Delta
|
||||
* ```
|
||||
* @property {boolean | null | undefined} [delimiterStart=true]
|
||||
* Whether to begin each row with the delimiter (default: `true`).
|
||||
*
|
||||
* > 👉 **Note**: please don’t use this: it could create fragile structures
|
||||
* > that aren’t understandable to some markdown parsers.
|
||||
*
|
||||
* When `true`, there are starting delimiters:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | ----- | ----- |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*
|
||||
* When `false`, there are no starting delimiters:
|
||||
*
|
||||
* ```markdown
|
||||
* Alpha | B |
|
||||
* ----- | ----- |
|
||||
* C | Delta |
|
||||
* ```
|
||||
* @property {boolean | null | undefined} [padding=true]
|
||||
* Whether to add a space of padding between delimiters and cells
|
||||
* (default: `true`).
|
||||
*
|
||||
* When `true`, there is padding:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | B |
|
||||
* | ----- | ----- |
|
||||
* | C | Delta |
|
||||
* ```
|
||||
*
|
||||
* When `false`, there is no padding:
|
||||
*
|
||||
* ```markdown
|
||||
* |Alpha|B |
|
||||
* |-----|-----|
|
||||
* |C |Delta|
|
||||
* ```
|
||||
* @property {((value: string) => number) | null | undefined} [stringLength]
|
||||
* Function to detect the length of table cell content (optional);
|
||||
* this is used when aligning the delimiters (`|`) between table cells;
|
||||
* full-width characters and emoji mess up delimiter alignment when viewing
|
||||
* the markdown source;
|
||||
* to fix this, you can pass this function,
|
||||
* which receives the cell content and returns its “visible” size;
|
||||
* note that what is and isn’t visible depends on where the text is displayed.
|
||||
*
|
||||
* Without such a function, the following:
|
||||
*
|
||||
* ```js
|
||||
* markdownTable([
|
||||
* ['Alpha', 'Bravo'],
|
||||
* ['中文', 'Charlie'],
|
||||
* ['👩❤️👩', 'Delta']
|
||||
* ])
|
||||
* ```
|
||||
*
|
||||
* Yields:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | Bravo |
|
||||
* | - | - |
|
||||
* | 中文 | Charlie |
|
||||
* | 👩❤️👩 | Delta |
|
||||
* ```
|
||||
*
|
||||
* With [`string-width`](https://github.com/sindresorhus/string-width):
|
||||
*
|
||||
* ```js
|
||||
* import stringWidth from 'string-width'
|
||||
*
|
||||
* markdownTable(
|
||||
* [
|
||||
* ['Alpha', 'Bravo'],
|
||||
* ['中文', 'Charlie'],
|
||||
* ['👩❤️👩', 'Delta']
|
||||
* ],
|
||||
* {stringLength: stringWidth}
|
||||
* )
|
||||
* ```
|
||||
*
|
||||
* Yields:
|
||||
*
|
||||
* ```markdown
|
||||
* | Alpha | Bravo |
|
||||
* | ----- | ------- |
|
||||
* | 中文 | Charlie |
|
||||
* | 👩❤️👩 | Delta |
|
||||
* ```
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param {string} value
|
||||
* Cell value.
|
||||
* @returns {number}
|
||||
* Cell size.
|
||||
*/
|
||||
function defaultStringLength(value) {
|
||||
return value.length
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate a markdown
|
||||
* ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))
|
||||
* table.
|
||||
*
|
||||
* @param {ReadonlyArray<ReadonlyArray<string | null | undefined>>} table
|
||||
* Table data (matrix of strings).
|
||||
* @param {Readonly<Options> | null | undefined} [options]
|
||||
* Configuration (optional).
|
||||
* @returns {string}
|
||||
* Result.
|
||||
*/
|
||||
export function markdownTable(table, options) {
|
||||
const settings = options || {}
|
||||
// To do: next major: change to spread.
|
||||
const align = (settings.align || []).concat()
|
||||
const stringLength = settings.stringLength || defaultStringLength
|
||||
/** @type {Array<number>} Character codes as symbols for alignment per column. */
|
||||
const alignments = []
|
||||
/** @type {Array<Array<string>>} Cells per row. */
|
||||
const cellMatrix = []
|
||||
/** @type {Array<Array<number>>} Sizes of each cell per row. */
|
||||
const sizeMatrix = []
|
||||
/** @type {Array<number>} */
|
||||
const longestCellByColumn = []
|
||||
let mostCellsPerRow = 0
|
||||
let rowIndex = -1
|
||||
|
||||
// This is a superfluous loop if we don’t align delimiters, but otherwise we’d
|
||||
// do superfluous work when aligning, so optimize for aligning.
|
||||
while (++rowIndex < table.length) {
|
||||
/** @type {Array<string>} */
|
||||
const row = []
|
||||
/** @type {Array<number>} */
|
||||
const sizes = []
|
||||
let columnIndex = -1
|
||||
|
||||
if (table[rowIndex].length > mostCellsPerRow) {
|
||||
mostCellsPerRow = table[rowIndex].length
|
||||
}
|
||||
|
||||
while (++columnIndex < table[rowIndex].length) {
|
||||
const cell = serialize(table[rowIndex][columnIndex])
|
||||
|
||||
if (settings.alignDelimiters !== false) {
|
||||
const size = stringLength(cell)
|
||||
sizes[columnIndex] = size
|
||||
|
||||
if (
|
||||
longestCellByColumn[columnIndex] === undefined ||
|
||||
size > longestCellByColumn[columnIndex]
|
||||
) {
|
||||
longestCellByColumn[columnIndex] = size
|
||||
}
|
||||
}
|
||||
|
||||
row.push(cell)
|
||||
}
|
||||
|
||||
cellMatrix[rowIndex] = row
|
||||
sizeMatrix[rowIndex] = sizes
|
||||
}
|
||||
|
||||
// Figure out which alignments to use.
|
||||
let columnIndex = -1
|
||||
|
||||
if (typeof align === 'object' && 'length' in align) {
|
||||
while (++columnIndex < mostCellsPerRow) {
|
||||
alignments[columnIndex] = toAlignment(align[columnIndex])
|
||||
}
|
||||
} else {
|
||||
const code = toAlignment(align)
|
||||
|
||||
while (++columnIndex < mostCellsPerRow) {
|
||||
alignments[columnIndex] = code
|
||||
}
|
||||
}
|
||||
|
||||
// Inject the alignment row.
|
||||
columnIndex = -1
|
||||
/** @type {Array<string>} */
|
||||
const row = []
|
||||
/** @type {Array<number>} */
|
||||
const sizes = []
|
||||
|
||||
while (++columnIndex < mostCellsPerRow) {
|
||||
const code = alignments[columnIndex]
|
||||
let before = ''
|
||||
let after = ''
|
||||
|
||||
if (code === 99 /* `c` */) {
|
||||
before = ':'
|
||||
after = ':'
|
||||
} else if (code === 108 /* `l` */) {
|
||||
before = ':'
|
||||
} else if (code === 114 /* `r` */) {
|
||||
after = ':'
|
||||
}
|
||||
|
||||
// There *must* be at least one hyphen-minus in each alignment cell.
|
||||
let size =
|
||||
settings.alignDelimiters === false
|
||||
? 1
|
||||
: Math.max(
|
||||
1,
|
||||
longestCellByColumn[columnIndex] - before.length - after.length
|
||||
)
|
||||
|
||||
const cell = before + '-'.repeat(size) + after
|
||||
|
||||
if (settings.alignDelimiters !== false) {
|
||||
size = before.length + size + after.length
|
||||
|
||||
if (size > longestCellByColumn[columnIndex]) {
|
||||
longestCellByColumn[columnIndex] = size
|
||||
}
|
||||
|
||||
sizes[columnIndex] = size
|
||||
}
|
||||
|
||||
row[columnIndex] = cell
|
||||
}
|
||||
|
||||
// Inject the alignment row.
|
||||
cellMatrix.splice(1, 0, row)
|
||||
sizeMatrix.splice(1, 0, sizes)
|
||||
|
||||
rowIndex = -1
|
||||
/** @type {Array<string>} */
|
||||
const lines = []
|
||||
|
||||
while (++rowIndex < cellMatrix.length) {
|
||||
const row = cellMatrix[rowIndex]
|
||||
const sizes = sizeMatrix[rowIndex]
|
||||
columnIndex = -1
|
||||
/** @type {Array<string>} */
|
||||
const line = []
|
||||
|
||||
while (++columnIndex < mostCellsPerRow) {
|
||||
const cell = row[columnIndex] || ''
|
||||
let before = ''
|
||||
let after = ''
|
||||
|
||||
if (settings.alignDelimiters !== false) {
|
||||
const size =
|
||||
longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)
|
||||
const code = alignments[columnIndex]
|
||||
|
||||
if (code === 114 /* `r` */) {
|
||||
before = ' '.repeat(size)
|
||||
} else if (code === 99 /* `c` */) {
|
||||
if (size % 2) {
|
||||
before = ' '.repeat(size / 2 + 0.5)
|
||||
after = ' '.repeat(size / 2 - 0.5)
|
||||
} else {
|
||||
before = ' '.repeat(size / 2)
|
||||
after = before
|
||||
}
|
||||
} else {
|
||||
after = ' '.repeat(size)
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.delimiterStart !== false && !columnIndex) {
|
||||
line.push('|')
|
||||
}
|
||||
|
||||
if (
|
||||
settings.padding !== false &&
|
||||
// Don’t add the opening space if we’re not aligning and the cell is
|
||||
// empty: there will be a closing space.
|
||||
!(settings.alignDelimiters === false && cell === '') &&
|
||||
(settings.delimiterStart !== false || columnIndex)
|
||||
) {
|
||||
line.push(' ')
|
||||
}
|
||||
|
||||
if (settings.alignDelimiters !== false) {
|
||||
line.push(before)
|
||||
}
|
||||
|
||||
line.push(cell)
|
||||
|
||||
if (settings.alignDelimiters !== false) {
|
||||
line.push(after)
|
||||
}
|
||||
|
||||
if (settings.padding !== false) {
|
||||
line.push(' ')
|
||||
}
|
||||
|
||||
if (
|
||||
settings.delimiterEnd !== false ||
|
||||
columnIndex !== mostCellsPerRow - 1
|
||||
) {
|
||||
line.push('|')
|
||||
}
|
||||
}
|
||||
|
||||
lines.push(
|
||||
settings.delimiterEnd === false
|
||||
? line.join('').replace(/ +$/, '')
|
||||
: line.join('')
|
||||
)
|
||||
}
|
||||
|
||||
return lines.join('\n')
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string | null | undefined} [value]
|
||||
* Value to serialize.
|
||||
* @returns {string}
|
||||
* Result.
|
||||
*/
|
||||
function serialize(value) {
|
||||
return value === null || value === undefined ? '' : String(value)
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string | null | undefined} value
|
||||
* Value.
|
||||
* @returns {number}
|
||||
* Alignment.
|
||||
*/
|
||||
function toAlignment(value) {
|
||||
const code = typeof value === 'string' ? value.codePointAt(0) : 0
|
||||
|
||||
return code === 67 /* `C` */ || code === 99 /* `c` */
|
||||
? 99 /* `c` */
|
||||
: code === 76 /* `L` */ || code === 108 /* `l` */
|
||||
? 108 /* `l` */
|
||||
: code === 82 /* `R` */ || code === 114 /* `r` */
|
||||
? 114 /* `r` */
|
||||
: 0
|
||||
}
|
22
node_modules/markdown-table/license
generated
vendored
Normal file
22
node_modules/markdown-table/license
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) Titus Wormer <tituswormer@gmail.com>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
77
node_modules/markdown-table/package.json
generated
vendored
Normal file
77
node_modules/markdown-table/package.json
generated
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"author": "Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)",
|
||||
"bugs": "https://github.com/wooorm/markdown-table/issues",
|
||||
"contributors": [
|
||||
"Titus Wormer <tituswormer@gmail.com> (https://wooorm.com)"
|
||||
],
|
||||
"description": "Generate a markdown (GFM) table",
|
||||
"devDependencies": {
|
||||
"@types/node": "^22.0.0",
|
||||
"c8": "^10.0.0",
|
||||
"chalk": "^5.0.0",
|
||||
"prettier": "^3.0.0",
|
||||
"remark-cli": "^12.0.0",
|
||||
"remark-preset-wooorm": "^10.0.0",
|
||||
"strip-ansi": "^7.0.0",
|
||||
"type-coverage": "^2.0.0",
|
||||
"typescript": "^5.0.0",
|
||||
"xo": "^0.59.0"
|
||||
},
|
||||
"files": [
|
||||
"index.d.ts.map",
|
||||
"index.d.ts",
|
||||
"index.js"
|
||||
],
|
||||
"funding": {
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
},
|
||||
"keywords": [
|
||||
"align",
|
||||
"markdown",
|
||||
"rows",
|
||||
"table",
|
||||
"tabular",
|
||||
"text"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "index.js",
|
||||
"name": "markdown-table",
|
||||
"prettier": {
|
||||
"bracketSpacing": false,
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"tabWidth": 2,
|
||||
"trailingComma": "none",
|
||||
"useTabs": false
|
||||
},
|
||||
"remarkConfig": {
|
||||
"plugins": [
|
||||
"remark-preset-wooorm"
|
||||
]
|
||||
},
|
||||
"repository": "wooorm/markdown-table",
|
||||
"scripts": {
|
||||
"build": "tsc --build --clean && tsc --build && type-coverage",
|
||||
"format": "remark --frail --output --quiet -- . && prettier --log-level warn --write -- . && xo --fix",
|
||||
"test-api": "node --conditions development test.js",
|
||||
"test-coverage": "c8 --100 --check-coverage --reporter lcov -- npm run test-api",
|
||||
"test": "npm run build && npm run format && npm run test-coverage"
|
||||
},
|
||||
"sideEffects": false,
|
||||
"typeCoverage": {
|
||||
"atLeast": 100,
|
||||
"detail": true,
|
||||
"strict": true
|
||||
},
|
||||
"types": "index.d.ts",
|
||||
"type": "module",
|
||||
"version": "3.0.4",
|
||||
"xo": {
|
||||
"prettier": true,
|
||||
"rules": {
|
||||
"complexity": "off",
|
||||
"unicorn/prefer-switch": "off"
|
||||
}
|
||||
}
|
||||
}
|
344
node_modules/markdown-table/readme.md
generated
vendored
Normal file
344
node_modules/markdown-table/readme.md
generated
vendored
Normal file
@@ -0,0 +1,344 @@
|
||||
# markdown-table
|
||||
|
||||
[![Build][build-badge]][build]
|
||||
[![Coverage][coverage-badge]][coverage]
|
||||
[![Downloads][downloads-badge]][downloads]
|
||||
[![Size][size-badge]][size]
|
||||
|
||||
Generate a markdown ([GFM][]) table.
|
||||
|
||||
## Contents
|
||||
|
||||
* [What is this?](#what-is-this)
|
||||
* [When should I use this?](#when-should-i-use-this)
|
||||
* [Install](#install)
|
||||
* [Use](#use)
|
||||
* [API](#api)
|
||||
* [`markdownTable(table[, options])`](#markdowntabletable-options)
|
||||
* [Types](#types)
|
||||
* [Compatibility](#compatibility)
|
||||
* [Security](#security)
|
||||
* [Inspiration](#inspiration)
|
||||
* [Contribute](#contribute)
|
||||
* [License](#license)
|
||||
|
||||
## What is this?
|
||||
|
||||
This is a simple package that takes table data and generates a [GitHub flavored
|
||||
markdown (GFM)][gfm] table.
|
||||
|
||||
## When should I use this?
|
||||
|
||||
You can use this package when you want to generate the source code of a GFM
|
||||
table from some data.
|
||||
|
||||
This is a simple solution in that it doesn’t handle escapes or HTML or any of
|
||||
that.
|
||||
For a complete but heavier solution, build an AST and serialize it with
|
||||
[`mdast-util-to-markdown`][mdast-util-to-markdown] (with
|
||||
[`mdast-util-gfm`][mdast-util-gfm]).
|
||||
|
||||
## Install
|
||||
|
||||
This package is [ESM only][esm].
|
||||
In Node.js (version 14.14+, 16.0+), install with [npm][]:
|
||||
|
||||
```sh
|
||||
npm install markdown-table
|
||||
```
|
||||
|
||||
In Deno with [`esm.sh`][esmsh]:
|
||||
|
||||
```js
|
||||
import {markdownTable} from 'https://esm.sh/markdown-table@3'
|
||||
```
|
||||
|
||||
In browsers with [`esm.sh`][esmsh]:
|
||||
|
||||
```html
|
||||
<script type="module">
|
||||
import {markdownTable} from 'https://esm.sh/markdown-table@3?bundle'
|
||||
</script>
|
||||
```
|
||||
|
||||
## Use
|
||||
|
||||
Typical usage (defaults to align left):
|
||||
|
||||
```js
|
||||
import {markdownTable} from 'markdown-table'
|
||||
|
||||
markdownTable([
|
||||
['Branch', 'Commit'],
|
||||
['main', '0123456789abcdef'],
|
||||
['staging', 'fedcba9876543210']
|
||||
])
|
||||
```
|
||||
|
||||
Yields:
|
||||
|
||||
```markdown
|
||||
| Branch | Commit |
|
||||
| ------- | ---------------- |
|
||||
| main | 0123456789abcdef |
|
||||
| staging | fedcba9876543210 |
|
||||
```
|
||||
|
||||
With align:
|
||||
|
||||
```js
|
||||
markdownTable(
|
||||
[
|
||||
['Beep', 'No.', 'Boop'],
|
||||
['beep', '1024', 'xyz'],
|
||||
['boop', '3388450', 'tuv'],
|
||||
['foo', '10106', 'qrstuv'],
|
||||
['bar', '45', 'lmno']
|
||||
],
|
||||
{align: ['l', 'c', 'r']}
|
||||
)
|
||||
```
|
||||
|
||||
Yields:
|
||||
|
||||
```markdown
|
||||
| Beep | No. | Boop |
|
||||
| :--- | :-----: | -----: |
|
||||
| beep | 1024 | xyz |
|
||||
| boop | 3388450 | tuv |
|
||||
| foo | 10106 | qrstuv |
|
||||
| bar | 45 | lmno |
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
This package exports the identifier `markdownTable`.
|
||||
There is no default export.
|
||||
|
||||
### `markdownTable(table[, options])`
|
||||
|
||||
Generate a markdown table from table data (matrix of strings).
|
||||
|
||||
##### `options`
|
||||
|
||||
Configuration (optional).
|
||||
|
||||
###### `options.align`
|
||||
|
||||
One style for all columns, or styles for their respective columns (`string` or
|
||||
`Array<string>`).
|
||||
Each style is either `'l'` (left), `'r'` (right), or `'c'` (center).
|
||||
Other values are treated as `''`, which doesn’t place the colon in the alignment
|
||||
row but does align left.
|
||||
*Only the lowercased first character is used, so `Right` is fine.*
|
||||
|
||||
###### `options.padding`
|
||||
|
||||
Whether to add a space of padding between delimiters and cells (`boolean`,
|
||||
default: `true`).
|
||||
|
||||
When `true`, there is padding:
|
||||
|
||||
```markdown
|
||||
| Alpha | B |
|
||||
| ----- | ----- |
|
||||
| C | Delta |
|
||||
```
|
||||
|
||||
When `false`, there is no padding:
|
||||
|
||||
```markdown
|
||||
|Alpha|B |
|
||||
|-----|-----|
|
||||
|C |Delta|
|
||||
```
|
||||
|
||||
###### `options.delimiterStart`
|
||||
|
||||
Whether to begin each row with the delimiter (`boolean`, default: `true`).
|
||||
|
||||
> 👉 **Note**: please don’t use this: it could create fragile structures that
|
||||
> aren’t understandable to some markdown parsers.
|
||||
|
||||
When `true`, there are starting delimiters:
|
||||
|
||||
```markdown
|
||||
| Alpha | B |
|
||||
| ----- | ----- |
|
||||
| C | Delta |
|
||||
```
|
||||
|
||||
When `false`, there are no starting delimiters:
|
||||
|
||||
```markdown
|
||||
Alpha | B |
|
||||
----- | ----- |
|
||||
C | Delta |
|
||||
```
|
||||
|
||||
###### `options.delimiterEnd`
|
||||
|
||||
Whether to end each row with the delimiter (`boolean`, default: `true`).
|
||||
|
||||
> 👉 **Note**: please don’t use this: it could create fragile structures that
|
||||
> aren’t understandable to some markdown parsers.
|
||||
|
||||
When `true`, there are ending delimiters:
|
||||
|
||||
```markdown
|
||||
| Alpha | B |
|
||||
| ----- | ----- |
|
||||
| C | Delta |
|
||||
```
|
||||
|
||||
When `false`, there are no ending delimiters:
|
||||
|
||||
```markdown
|
||||
| Alpha | B
|
||||
| ----- | -----
|
||||
| C | Delta
|
||||
```
|
||||
|
||||
###### `options.alignDelimiters`
|
||||
|
||||
Whether to align the delimiters (`boolean`, default: `true`).
|
||||
By default, they are aligned:
|
||||
|
||||
```markdown
|
||||
| Alpha | B |
|
||||
| ----- | ----- |
|
||||
| C | Delta |
|
||||
```
|
||||
|
||||
Pass `false` to make them staggered:
|
||||
|
||||
```markdown
|
||||
| Alpha | B |
|
||||
| - | - |
|
||||
| C | Delta |
|
||||
```
|
||||
|
||||
###### `options.stringLength`
|
||||
|
||||
Function to detect the length of table cell content (`Function`, default:
|
||||
`s => s.length`).
|
||||
This is used when aligning the delimiters (`|`) between table cells.
|
||||
Full-width characters and emoji mess up delimiter alignment when viewing the
|
||||
markdown source.
|
||||
To fix this, you can pass this function, which receives the cell content and
|
||||
returns its “visible” size.
|
||||
Note that what is and isn’t visible depends on where the text is displayed.
|
||||
|
||||
Without such a function, the following:
|
||||
|
||||
```js
|
||||
markdownTable([
|
||||
['Alpha', 'Bravo'],
|
||||
['中文', 'Charlie'],
|
||||
['👩❤️👩', 'Delta']
|
||||
])
|
||||
```
|
||||
|
||||
Yields:
|
||||
|
||||
```markdown
|
||||
| Alpha | Bravo |
|
||||
| - | - |
|
||||
| 中文 | Charlie |
|
||||
| 👩❤️👩 | Delta |
|
||||
```
|
||||
|
||||
With [`string-width`][string-width]:
|
||||
|
||||
```js
|
||||
import stringWidth from 'string-width'
|
||||
|
||||
markdownTable(
|
||||
[
|
||||
['Alpha', 'Bravo'],
|
||||
['中文', 'Charlie'],
|
||||
['👩❤️👩', 'Delta']
|
||||
],
|
||||
{stringLength: stringWidth}
|
||||
)
|
||||
```
|
||||
|
||||
Yields:
|
||||
|
||||
```markdown
|
||||
| Alpha | Bravo |
|
||||
| ----- | ------- |
|
||||
| 中文 | Charlie |
|
||||
| 👩❤️👩 | Delta |
|
||||
```
|
||||
|
||||
## Types
|
||||
|
||||
This package is fully typed with [TypeScript][].
|
||||
It exports the additional type `Options`.
|
||||
|
||||
## Compatibility
|
||||
|
||||
This package is at least compatible with all maintained versions of Node.js.
|
||||
As of now, that is Node.js 14.14+ and 16.0+.
|
||||
It also works in Deno and modern browsers.
|
||||
|
||||
## Security
|
||||
|
||||
This package is safe.
|
||||
|
||||
## Inspiration
|
||||
|
||||
The original idea and basic implementation was inspired by James Halliday’s
|
||||
[`text-table`][text-table] library.
|
||||
|
||||
## Contribute
|
||||
|
||||
Yes please!
|
||||
See [How to Contribute to Open Source][contribute].
|
||||
|
||||
## License
|
||||
|
||||
[MIT][license] © [Titus Wormer][author]
|
||||
|
||||
<!-- Definitions -->
|
||||
|
||||
[build-badge]: https://github.com/wooorm/markdown-table/workflows/main/badge.svg
|
||||
|
||||
[build]: https://github.com/wooorm/markdown-table/actions
|
||||
|
||||
[coverage-badge]: https://img.shields.io/codecov/c/github/wooorm/markdown-table.svg
|
||||
|
||||
[coverage]: https://codecov.io/github/wooorm/markdown-table
|
||||
|
||||
[downloads-badge]: https://img.shields.io/npm/dm/markdown-table.svg
|
||||
|
||||
[downloads]: https://www.npmjs.com/package/markdown-table
|
||||
|
||||
[size-badge]: https://img.shields.io/bundlephobia/minzip/markdown-table.svg
|
||||
|
||||
[size]: https://bundlephobia.com/result?p=markdown-table
|
||||
|
||||
[npm]: https://docs.npmjs.com/cli/install
|
||||
|
||||
[esmsh]: https://esm.sh
|
||||
|
||||
[license]: license
|
||||
|
||||
[author]: https://wooorm.com
|
||||
|
||||
[esm]: https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c
|
||||
|
||||
[typescript]: https://www.typescriptlang.org
|
||||
|
||||
[contribute]: https://opensource.guide/how-to-contribute/
|
||||
|
||||
[gfm]: https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables
|
||||
|
||||
[text-table]: https://github.com/substack/text-table
|
||||
|
||||
[string-width]: https://github.com/sindresorhus/string-width
|
||||
|
||||
[mdast-util-to-markdown]: https://github.com/syntax-tree/mdast-util-to-markdown
|
||||
|
||||
[mdast-util-gfm]: https://github.com/syntax-tree/mdast-util-gfm
|
Reference in New Issue
Block a user