mdast-control 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +359 -0
  2. package/dist/cli.d.ts +2 -0
  3. package/dist/cli.js +534 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/index.d.ts +7 -0
  6. package/dist/index.js +5 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/lsp/requests.d.ts +215 -0
  9. package/dist/lsp/requests.js +613 -0
  10. package/dist/lsp/requests.js.map +1 -0
  11. package/dist/lsp/server.d.ts +1 -0
  12. package/dist/lsp/server.js +110 -0
  13. package/dist/lsp/server.js.map +1 -0
  14. package/dist/lsp-methods.d.ts +25 -0
  15. package/dist/lsp-methods.js +26 -0
  16. package/dist/lsp-methods.js.map +1 -0
  17. package/dist/markdown.d.ts +17 -0
  18. package/dist/markdown.js +140 -0
  19. package/dist/markdown.js.map +1 -0
  20. package/dist/plugins.d.ts +144 -0
  21. package/dist/plugins.js +833 -0
  22. package/dist/plugins.js.map +1 -0
  23. package/dist/query.d.ts +8 -0
  24. package/dist/query.js +518 -0
  25. package/dist/query.js.map +1 -0
  26. package/dist/table-interchange.d.ts +22 -0
  27. package/dist/table-interchange.js +191 -0
  28. package/dist/table-interchange.js.map +1 -0
  29. package/dist/table-model.d.ts +15 -0
  30. package/dist/table-model.js +105 -0
  31. package/dist/table-model.js.map +1 -0
  32. package/dist/table-structural.d.ts +9 -0
  33. package/dist/table-structural.js +190 -0
  34. package/dist/table-structural.js.map +1 -0
  35. package/dist/table.d.ts +49 -0
  36. package/dist/table.js +131 -0
  37. package/dist/table.js.map +1 -0
  38. package/dist/transport.d.ts +6 -0
  39. package/dist/transport.js +7 -0
  40. package/dist/transport.js.map +1 -0
  41. package/dist/types.d.ts +57 -0
  42. package/dist/types.js +2 -0
  43. package/dist/types.js.map +1 -0
  44. package/package.json +60 -0
  45. package/scripts/verify-package.mjs +252 -0
@@ -0,0 +1,191 @@
1
+ export function delimiterForFormat(format) {
2
+ return format === 'csv' ? ',' : '\t';
3
+ }
4
+ export function tableModelToDelimited(model, delimiter, options = {}) {
5
+ assertNormalizedTableModel(model);
6
+ const includeHeader = options.includeHeader ?? true;
7
+ const lineTerminator = options.lineTerminator ?? '\n';
8
+ const quoteMode = options.quoteMode ?? 'minimal';
9
+ const rows = includeHeader ? [model.header, ...model.rows] : model.rows;
10
+ return rows
11
+ .map((row) => row.map((value) => escapeDelimitedCell(value, delimiter, quoteMode)).join(delimiter))
12
+ .join(lineTerminator);
13
+ }
14
+ export function parseDelimited(input, delimiter) {
15
+ if (input.length === 0) {
16
+ return [];
17
+ }
18
+ const rows = [];
19
+ let row = [];
20
+ let field = '';
21
+ let state = 'start';
22
+ let endedWithRecordSeparator = false;
23
+ const finishField = () => {
24
+ row.push(field);
25
+ field = '';
26
+ state = 'start';
27
+ };
28
+ const finishRow = () => {
29
+ finishField();
30
+ rows.push(row);
31
+ row = [];
32
+ endedWithRecordSeparator = true;
33
+ };
34
+ for (let index = 0; index < input.length; index += 1) {
35
+ const character = input[index];
36
+ if (state === 'quoted') {
37
+ if (character !== '"') {
38
+ field += character;
39
+ continue;
40
+ }
41
+ if (input[index + 1] === '"') {
42
+ field += '"';
43
+ index += 1;
44
+ continue;
45
+ }
46
+ state = 'after-quote';
47
+ continue;
48
+ }
49
+ if (state === 'after-quote') {
50
+ if (character === delimiter) {
51
+ finishField();
52
+ endedWithRecordSeparator = false;
53
+ continue;
54
+ }
55
+ if (character === '\n' || character === '\r') {
56
+ if (character === '\r' && input[index + 1] === '\n') {
57
+ index += 1;
58
+ }
59
+ finishRow();
60
+ continue;
61
+ }
62
+ throw new Error(`Unexpected character after closing quote at offset ${String(index)}`);
63
+ }
64
+ if (character === delimiter) {
65
+ finishField();
66
+ endedWithRecordSeparator = false;
67
+ continue;
68
+ }
69
+ if (character === '\n' || character === '\r') {
70
+ if (character === '\r' && input[index + 1] === '\n') {
71
+ index += 1;
72
+ }
73
+ finishRow();
74
+ continue;
75
+ }
76
+ if (character === '"') {
77
+ if (state !== 'start') {
78
+ throw new Error(`Unexpected quote in unquoted field at offset ${String(index)}`);
79
+ }
80
+ state = 'quoted';
81
+ endedWithRecordSeparator = false;
82
+ continue;
83
+ }
84
+ field += character;
85
+ state = 'unquoted';
86
+ endedWithRecordSeparator = false;
87
+ }
88
+ if (state === 'quoted') {
89
+ throw new Error('Unterminated quoted field');
90
+ }
91
+ if (!endedWithRecordSeparator || row.length > 0 || field.length > 0 || state !== 'start') {
92
+ finishField();
93
+ rows.push(row);
94
+ }
95
+ return rows;
96
+ }
97
+ export function delimitedToTableModel(input, delimiter, options = {}) {
98
+ const parsedRows = parseDelimited(input, delimiter);
99
+ if (parsedRows.length === 0) {
100
+ throw new Error('Delimited input must contain at least one row');
101
+ }
102
+ const rows = options.trimCells
103
+ ? parsedRows.map((row) => row.map((cell) => cell.trim()))
104
+ : parsedRows;
105
+ if (options.strictWidth) {
106
+ const expectedWidth = rows[0].length;
107
+ const mismatchIndex = rows.findIndex((row) => row.length !== expectedWidth);
108
+ if (mismatchIndex !== -1) {
109
+ throw new Error(`Delimited row ${String(mismatchIndex)} has width ${String(rows[mismatchIndex].length)}; expected ${String(expectedWidth)}`);
110
+ }
111
+ }
112
+ const sourceWidth = Math.max(...rows.map((row) => row.length));
113
+ const align = options.align === undefined ? undefined : validateAlignment(options.align);
114
+ const width = Math.max(sourceWidth, align?.length ?? 0);
115
+ const normalizedRows = rows.map((row) => normalizeRow(row, width));
116
+ const hasHeader = options.hasHeader ?? true;
117
+ const header = hasHeader ? normalizedRows[0] : Array.from({ length: width }, () => '');
118
+ const bodyRows = hasHeader ? normalizedRows.slice(1) : normalizedRows;
119
+ return {
120
+ ...(align ? { align: normalizeAlignment(align, width) } : {}),
121
+ header,
122
+ rows: bodyRows,
123
+ width,
124
+ height: bodyRows.length + 1,
125
+ };
126
+ }
127
+ export function csvToTableAst(input, options = {}) {
128
+ return tableModelToAst(delimitedToTableModel(input, ',', options));
129
+ }
130
+ export function tsvToTableAst(input, options = {}) {
131
+ return tableModelToAst(delimitedToTableModel(input, '\t', options));
132
+ }
133
+ export function tableModelToAst(model) {
134
+ assertNormalizedTableModel(model);
135
+ return {
136
+ type: 'table',
137
+ ...(model.align ? { align: [...model.align] } : {}),
138
+ children: [model.header, ...model.rows].map((row) => ({
139
+ type: 'tableRow',
140
+ children: row.map((value) => ({
141
+ type: 'tableCell',
142
+ children: value.length === 0 ? [] : [{ type: 'text', value }],
143
+ })),
144
+ })),
145
+ };
146
+ }
147
+ function escapeDelimitedCell(value, delimiter, quoteMode) {
148
+ const mustQuote = quoteMode === 'always'
149
+ || value.includes(delimiter)
150
+ || value.includes('"')
151
+ || value.includes('\n')
152
+ || value.includes('\r');
153
+ return mustQuote ? `"${value.replaceAll('"', '""')}"` : value;
154
+ }
155
+ function assertNormalizedTableModel(model) {
156
+ if (!Number.isInteger(model.width) || model.width < 1) {
157
+ throw new Error('Table model width must be a positive integer');
158
+ }
159
+ if (!Number.isInteger(model.height) || model.height !== model.rows.length + 1) {
160
+ throw new Error('Table model height must equal header plus body row count');
161
+ }
162
+ if (model.header.length !== model.width) {
163
+ throw new Error(`Table model header width ${String(model.header.length)} does not match width ${String(model.width)}`);
164
+ }
165
+ for (const [index, row] of model.rows.entries()) {
166
+ if (row.length !== model.width) {
167
+ throw new Error(`Table model row ${String(index)} width ${String(row.length)} does not match width ${String(model.width)}`);
168
+ }
169
+ }
170
+ if (model.align !== undefined) {
171
+ const align = validateAlignment(model.align);
172
+ if (align.length !== model.width) {
173
+ throw new Error(`Table model alignment width ${String(align.length)} does not match width ${String(model.width)}`);
174
+ }
175
+ }
176
+ }
177
+ function validateAlignment(align) {
178
+ return align.map((value, index) => {
179
+ if (value !== null && value !== 'left' && value !== 'right' && value !== 'center') {
180
+ throw new Error(`Invalid table alignment at column ${String(index)}`);
181
+ }
182
+ return value;
183
+ });
184
+ }
185
+ function normalizeRow(row, width) {
186
+ return Array.from({ length: width }, (_, index) => row[index] ?? '');
187
+ }
188
+ function normalizeAlignment(align, width) {
189
+ return Array.from({ length: width }, (_, index) => align[index] ?? null);
190
+ }
191
+ //# sourceMappingURL=table-interchange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-interchange.js","sourceRoot":"","sources":["../src/table-interchange.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { MdastNode } from './types.js';
2
+ export type TableAlignment = 'left' | 'right' | 'center' | null;
3
+ export type TableModel = {
4
+ align?: TableAlignment[];
5
+ header: string[];
6
+ rows: string[][];
7
+ width: number;
8
+ height: number;
9
+ };
10
+ export type TableColumnAddress = number | string;
11
+ export declare function tableNodeToModel(table: MdastNode): TableModel;
12
+ export declare function resolveTableColumnIndexes(model: TableModel, address: TableColumnAddress): number[];
13
+ export declare function resolveSingleTableColumnIndex(model: TableModel, address: TableColumnAddress): number;
14
+ export declare function getTableCell(model: TableModel, rowIndex: number, columnIndex: number): string;
15
+ export declare function flattenTableCellText(cell: MdastNode): string;
@@ -0,0 +1,105 @@
1
+ export function tableNodeToModel(table) {
2
+ if (table.type !== 'table') {
3
+ throw new Error(`Expected a table node, received "${table.type}"`);
4
+ }
5
+ if (!Array.isArray(table.children) || table.children.length === 0) {
6
+ throw new Error('A table node must contain at least one tableRow header');
7
+ }
8
+ const rows = table.children.map((row, rowIndex) => readTableRow(row, rowIndex));
9
+ const rawAlign = readTableAlignment(table);
10
+ const width = Math.max(rawAlign?.length ?? 0, ...rows.map((row) => row.length));
11
+ const normalizedRows = rows.map((row) => normalizeRow(row, width));
12
+ return {
13
+ ...(rawAlign ? { align: normalizeAlignment(rawAlign, width) } : {}),
14
+ header: normalizedRows[0],
15
+ rows: normalizedRows.slice(1),
16
+ width,
17
+ height: normalizedRows.length,
18
+ };
19
+ }
20
+ export function resolveTableColumnIndexes(model, address) {
21
+ if (typeof address === 'number') {
22
+ assertCoordinate('column', address, model.width);
23
+ return [address];
24
+ }
25
+ const matches = [];
26
+ for (const [index, header] of model.header.entries()) {
27
+ if (header === address) {
28
+ matches.push(index);
29
+ }
30
+ }
31
+ if (matches.length === 0) {
32
+ throw new Error(`No table column has header "${address}"`);
33
+ }
34
+ return matches;
35
+ }
36
+ export function resolveSingleTableColumnIndex(model, address) {
37
+ const matches = resolveTableColumnIndexes(model, address);
38
+ if (matches.length !== 1) {
39
+ throw new Error(`Table header "${String(address)}" is ambiguous across columns ${matches.join(', ')}`);
40
+ }
41
+ return matches[0];
42
+ }
43
+ export function getTableCell(model, rowIndex, columnIndex) {
44
+ assertCoordinate('body row', rowIndex, model.rows.length);
45
+ assertCoordinate('column', columnIndex, model.width);
46
+ return model.rows[rowIndex][columnIndex];
47
+ }
48
+ export function flattenTableCellText(cell) {
49
+ if (cell.type !== 'tableCell') {
50
+ throw new Error(`Expected a tableCell node, received "${cell.type}"`);
51
+ }
52
+ return flattenNodeText(cell).trim();
53
+ }
54
+ function readTableRow(row, rowIndex) {
55
+ if (row.type !== 'tableRow') {
56
+ throw new Error(`Expected tableRow at table row ${String(rowIndex)}, received "${row.type}"`);
57
+ }
58
+ if (!Array.isArray(row.children)) {
59
+ throw new Error(`Table row ${String(rowIndex)} must contain a children array`);
60
+ }
61
+ return row.children.map((cell, columnIndex) => {
62
+ if (cell.type !== 'tableCell') {
63
+ throw new Error(`Expected tableCell at table row ${String(rowIndex)}, column ${String(columnIndex)}, received "${cell.type}"`);
64
+ }
65
+ return flattenTableCellText(cell);
66
+ });
67
+ }
68
+ function readTableAlignment(table) {
69
+ const value = table.align;
70
+ if (value === undefined) {
71
+ return undefined;
72
+ }
73
+ if (!Array.isArray(value)) {
74
+ throw new Error('Table alignment must be an array when present');
75
+ }
76
+ return value.map((alignment, index) => {
77
+ if (alignment !== null
78
+ && alignment !== 'left'
79
+ && alignment !== 'right'
80
+ && alignment !== 'center') {
81
+ throw new Error(`Invalid table alignment at column ${String(index)}`);
82
+ }
83
+ return alignment;
84
+ });
85
+ }
86
+ function normalizeRow(row, width) {
87
+ return Array.from({ length: width }, (_, index) => row[index] ?? '');
88
+ }
89
+ function normalizeAlignment(align, width) {
90
+ return Array.from({ length: width }, (_, index) => align[index] ?? null);
91
+ }
92
+ function assertCoordinate(name, value, upperBound) {
93
+ if (!Number.isInteger(value) || value < 0 || value >= upperBound) {
94
+ throw new Error(upperBound === 0
95
+ ? `Table has no addressable ${name}s`
96
+ : `Table ${name} index ${String(value)} is out of range 0..${String(upperBound - 1)}`);
97
+ }
98
+ }
99
+ function flattenNodeText(node) {
100
+ if (typeof node.value === 'string') {
101
+ return node.value;
102
+ }
103
+ return (node.children ?? []).map(flattenNodeText).join('');
104
+ }
105
+ //# sourceMappingURL=table-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-model.js","sourceRoot":"","sources":["../src/table-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { TableColumnAddress } from './table-model.js';
2
+ import type { MdastNode } from './types.js';
3
+ export type TableSortDirection = 'asc' | 'desc';
4
+ export declare function updateTableCellNode(table: MdastNode, rowIndex: number, column: TableColumnAddress, value: string): boolean;
5
+ export declare function insertTableRowNode(table: MdastNode, index: number, values: string[]): void;
6
+ export declare function deleteTableRowNode(table: MdastNode, rowIndex: number): void;
7
+ export declare function addTableColumnNode(table: MdastNode, index: number, header: string, values?: string[]): void;
8
+ export declare function deleteTableColumnNode(table: MdastNode, column: TableColumnAddress): void;
9
+ export declare function sortTableNode(table: MdastNode, column: TableColumnAddress, direction: TableSortDirection): boolean;
@@ -0,0 +1,190 @@
1
+ import { flattenTableCellText, resolveSingleTableColumnIndex, tableNodeToModel, } from './table-model.js';
2
+ export function updateTableCellNode(table, rowIndex, column, value) {
3
+ assertString(value, 'Cell value');
4
+ const model = requireStructuralTable(table);
5
+ assertBodyRowIndex(rowIndex, model.rows.length);
6
+ const columnIndex = resolveSingleTableColumnIndex(model, column);
7
+ const row = requireTableRow(table, rowIndex + 1);
8
+ const existing = row.children?.[columnIndex];
9
+ const cellChanged = !isPlainTextCell(existing, value);
10
+ const normalized = normalizePhysicalTable(table, model);
11
+ if (cellChanged) {
12
+ row.children[columnIndex] = createTableCell(value);
13
+ }
14
+ return normalized || cellChanged;
15
+ }
16
+ export function insertTableRowNode(table, index, values) {
17
+ assertStringArray(values, 'Inserted row values');
18
+ const model = requireStructuralTable(table);
19
+ assertInsertionIndex('body row', index, model.rows.length);
20
+ assertValuesFitWidth(values, model.width, 'Inserted row');
21
+ normalizePhysicalTable(table, model);
22
+ requireTableRows(table).splice(index + 1, 0, createTableRow(padValues(values, model.width)));
23
+ }
24
+ export function deleteTableRowNode(table, rowIndex) {
25
+ const model = requireStructuralTable(table);
26
+ assertBodyRowIndex(rowIndex, model.rows.length);
27
+ normalizePhysicalTable(table, model);
28
+ requireTableRows(table).splice(rowIndex + 1, 1);
29
+ }
30
+ export function addTableColumnNode(table, index, header, values = []) {
31
+ assertString(header, 'Column header');
32
+ assertStringArray(values, 'Added column values');
33
+ const model = requireStructuralTable(table);
34
+ assertInsertionIndex('column', index, model.width);
35
+ if (values.length > model.rows.length) {
36
+ throw new Error(`Added column has ${String(values.length)} body values; table has ${String(model.rows.length)} body rows`);
37
+ }
38
+ normalizePhysicalTable(table, model);
39
+ const rows = requireTableRows(table);
40
+ const columnValues = [header, ...padValues(values, model.rows.length)];
41
+ for (const [rowIndex, row] of rows.entries()) {
42
+ row.children.splice(index, 0, createTableCell(columnValues[rowIndex]));
43
+ }
44
+ if (model.align !== undefined) {
45
+ const align = [...model.align];
46
+ align.splice(index, 0, null);
47
+ table.align = align;
48
+ }
49
+ }
50
+ export function deleteTableColumnNode(table, column) {
51
+ const model = requireStructuralTable(table);
52
+ if (model.width === 1) {
53
+ throw new Error('Cannot delete the last table column');
54
+ }
55
+ const columnIndex = resolveSingleTableColumnIndex(model, column);
56
+ normalizePhysicalTable(table, model);
57
+ for (const row of requireTableRows(table)) {
58
+ row.children.splice(columnIndex, 1);
59
+ }
60
+ if (model.align !== undefined) {
61
+ const align = [...model.align];
62
+ align.splice(columnIndex, 1);
63
+ table.align = align;
64
+ }
65
+ }
66
+ export function sortTableNode(table, column, direction) {
67
+ if (direction !== 'asc' && direction !== 'desc') {
68
+ throw new Error(`Unsupported table sort direction "${String(direction)}"`);
69
+ }
70
+ const model = requireStructuralTable(table);
71
+ const columnIndex = resolveSingleTableColumnIndex(model, column);
72
+ const normalized = normalizePhysicalTable(table, model);
73
+ const rows = requireTableRows(table);
74
+ const header = rows[0];
75
+ const decorated = rows.slice(1).map((row, index) => ({
76
+ index,
77
+ key: flattenTableCellText(row.children[columnIndex]),
78
+ row,
79
+ }));
80
+ decorated.sort((left, right) => {
81
+ const comparison = compareCodePoints(left.key, right.key);
82
+ return comparison === 0
83
+ ? left.index - right.index
84
+ : direction === 'asc' ? comparison : -comparison;
85
+ });
86
+ const reordered = decorated.some((entry, index) => entry.index !== index);
87
+ if (reordered) {
88
+ table.children = [header, ...decorated.map((entry) => entry.row)];
89
+ }
90
+ return normalized || reordered;
91
+ }
92
+ function requireStructuralTable(table) {
93
+ const model = tableNodeToModel(table);
94
+ if (model.width < 1) {
95
+ throw new Error('A structurally editable table must contain at least one column');
96
+ }
97
+ return model;
98
+ }
99
+ function normalizePhysicalTable(table, model) {
100
+ let changed = false;
101
+ for (const row of requireTableRows(table)) {
102
+ while (row.children.length < model.width) {
103
+ row.children.push(createTableCell(''));
104
+ changed = true;
105
+ }
106
+ }
107
+ if (Array.isArray(table.align) && model.align !== undefined && table.align.length < model.width) {
108
+ table.align = [...model.align];
109
+ changed = true;
110
+ }
111
+ return changed;
112
+ }
113
+ function requireTableRows(table) {
114
+ if (!Array.isArray(table.children)) {
115
+ throw new Error('A table node must contain a children array');
116
+ }
117
+ assertTableRows(table.children);
118
+ return table.children;
119
+ }
120
+ function requireTableRow(table, rowIndex) {
121
+ const row = table.children?.[rowIndex];
122
+ if (!isTableRowNode(row)) {
123
+ throw new Error(`Expected tableRow at table row ${String(rowIndex)}`);
124
+ }
125
+ return row;
126
+ }
127
+ function isTableRowNode(node) {
128
+ return node?.type === 'tableRow' && Array.isArray(node.children);
129
+ }
130
+ function assertTableRows(rows) {
131
+ for (const [rowIndex, row] of rows.entries()) {
132
+ if (!isTableRowNode(row)) {
133
+ throw new Error(`Expected tableRow at table row ${String(rowIndex)}`);
134
+ }
135
+ }
136
+ }
137
+ function createTableRow(values) {
138
+ return { type: 'tableRow', children: values.map(createTableCell) };
139
+ }
140
+ function createTableCell(value) {
141
+ return {
142
+ type: 'tableCell',
143
+ children: value.length === 0 ? [] : [{ type: 'text', value }],
144
+ };
145
+ }
146
+ function isPlainTextCell(cell, value) {
147
+ if (!cell || cell.type !== 'tableCell' || !Array.isArray(cell.children)) {
148
+ return false;
149
+ }
150
+ if (value.length === 0) {
151
+ return cell.children.length === 0;
152
+ }
153
+ return cell.children.length === 1
154
+ && cell.children[0].type === 'text'
155
+ && cell.children[0].value === value;
156
+ }
157
+ function assertBodyRowIndex(index, rowCount) {
158
+ if (!Number.isInteger(index) || index < 0 || index >= rowCount) {
159
+ throw new Error(rowCount === 0
160
+ ? 'Table has no addressable body rows'
161
+ : `Table body row index ${String(index)} is out of range 0..${String(rowCount - 1)}`);
162
+ }
163
+ }
164
+ function assertInsertionIndex(name, index, currentCount) {
165
+ if (!Number.isInteger(index) || index < 0 || index > currentCount) {
166
+ throw new Error(`Table ${name} insertion index ${String(index)} is out of range 0..${String(currentCount)}`);
167
+ }
168
+ }
169
+ function assertValuesFitWidth(values, width, operation) {
170
+ if (values.length > width) {
171
+ throw new Error(`${operation} has width ${String(values.length)}; table width is ${String(width)}`);
172
+ }
173
+ }
174
+ function assertString(value, name) {
175
+ if (typeof value !== 'string') {
176
+ throw new Error(`${name} must be a string`);
177
+ }
178
+ }
179
+ function assertStringArray(value, name) {
180
+ if (!Array.isArray(value) || !value.every((entry) => typeof entry === 'string')) {
181
+ throw new Error(`${name} must be an array of strings`);
182
+ }
183
+ }
184
+ function padValues(values, width) {
185
+ return Array.from({ length: width }, (_, index) => values[index] ?? '');
186
+ }
187
+ function compareCodePoints(left, right) {
188
+ return left < right ? -1 : left > right ? 1 : 0;
189
+ }
190
+ //# sourceMappingURL=table-structural.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-structural.js","sourceRoot":"","sources":["../src/table-structural.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import type { TableModel } from './table-model.js';
2
+ import type { DelimitedExportOptions, DelimitedFormat, DelimitedImportOptions } from './table-interchange.js';
3
+ import type { TableSortDirection } from './table-structural.js';
4
+ import type { TableColumnAddress } from './table-model.js';
5
+ import type { InsertPosition, MdastNode } from './types.js';
6
+ export { flattenTableCellText, getTableCell, resolveSingleTableColumnIndex, resolveTableColumnIndexes, tableNodeToModel, } from './table-model.js';
7
+ export type { TableAlignment, TableColumnAddress, TableModel } from './table-model.js';
8
+ export { csvToTableAst, delimitedToTableModel, delimiterForFormat, parseDelimited, tableModelToAst, tableModelToDelimited, tsvToTableAst, } from './table-interchange.js';
9
+ export type { DelimitedDelimiter, DelimitedExportOptions, DelimitedFormat, DelimitedImportOptions, } from './table-interchange.js';
10
+ export { addTableColumnNode, deleteTableColumnNode, deleteTableRowNode, insertTableRowNode, sortTableNode, updateTableCellNode, } from './table-structural.js';
11
+ export type { TableSortDirection } from './table-structural.js';
12
+ export declare function extractTableModels(markdown: string, query: string): TableModel[];
13
+ export declare function extractTableModel(markdown: string, query: string): TableModel;
14
+ export declare function tableToCsv(markdown: string, query: string, options?: DelimitedExportOptions): string;
15
+ export declare function tableToTsv(markdown: string, query: string, options?: DelimitedExportOptions): string;
16
+ export declare function tableToDelimited(markdown: string, query: string, format: DelimitedFormat, options?: DelimitedExportOptions): string;
17
+ export declare function csvToMarkdownTable(input: string, options?: DelimitedImportOptions): string;
18
+ export declare function tsvToMarkdownTable(input: string, options?: DelimitedImportOptions): string;
19
+ export declare function delimitedToMarkdownTable(input: string, format: DelimitedFormat, options?: DelimitedImportOptions): string;
20
+ export declare function replaceTableWithCsv(markdown: string, query: string, csv: string, options?: DelimitedImportOptions): import("./types.js").MutationResult;
21
+ export declare function replaceTableWithTsv(markdown: string, query: string, tsv: string, options?: DelimitedImportOptions): import("./types.js").MutationResult;
22
+ export declare function insertCsvAsTable(markdown: string, query: string, position: InsertPosition, csv: string, options?: DelimitedImportOptions): import("./types.js").InsertResult;
23
+ export declare function insertTsvAsTable(markdown: string, query: string, position: InsertPosition, tsv: string, options?: DelimitedImportOptions): import("./types.js").InsertResult;
24
+ export declare function replaceTableWithDelimited(markdown: string, query: string, format: DelimitedFormat, input: string, options?: DelimitedImportOptions): import("./types.js").MutationResult;
25
+ export declare function insertDelimitedAsTable(markdown: string, query: string, position: InsertPosition, format: DelimitedFormat, input: string, options?: DelimitedImportOptions): import("./types.js").InsertResult;
26
+ export declare function updateTableCell(markdown: string, query: string, rowIndex: number, column: TableColumnAddress, value: string): {
27
+ tree: MdastNode;
28
+ changed: number;
29
+ };
30
+ export declare function insertTableRow(markdown: string, query: string, index: number, values: string[]): {
31
+ tree: MdastNode;
32
+ changed: number;
33
+ };
34
+ export declare function deleteTableRow(markdown: string, query: string, rowIndex: number): {
35
+ tree: MdastNode;
36
+ changed: number;
37
+ };
38
+ export declare function addTableColumn(markdown: string, query: string, index: number, header: string, values?: string[]): {
39
+ tree: MdastNode;
40
+ changed: number;
41
+ };
42
+ export declare function deleteTableColumn(markdown: string, query: string, column: TableColumnAddress): {
43
+ tree: MdastNode;
44
+ changed: number;
45
+ };
46
+ export declare function sortTable(markdown: string, query: string, column: TableColumnAddress, direction: TableSortDirection): {
47
+ tree: MdastNode;
48
+ changed: number;
49
+ };