@refrakt-md/runes 0.31.0 → 0.33.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 (111) hide show
  1. package/dist/config.d.ts.map +1 -1
  2. package/dist/config.js +44 -8
  3. package/dist/config.js.map +1 -1
  4. package/dist/data-emit.d.ts +1 -0
  5. package/dist/data-emit.d.ts.map +1 -1
  6. package/dist/data-emit.js +40 -0
  7. package/dist/data-emit.js.map +1 -1
  8. package/dist/data-pipeline.d.ts +10 -4
  9. package/dist/data-pipeline.d.ts.map +1 -1
  10. package/dist/data-pipeline.js +296 -30
  11. package/dist/data-pipeline.js.map +1 -1
  12. package/dist/data-projection.d.ts +21 -0
  13. package/dist/data-projection.d.ts.map +1 -1
  14. package/dist/data-projection.js +37 -0
  15. package/dist/data-projection.js.map +1 -1
  16. package/dist/include-pipeline.d.ts +52 -0
  17. package/dist/include-pipeline.d.ts.map +1 -0
  18. package/dist/include-pipeline.js +204 -0
  19. package/dist/include-pipeline.js.map +1 -0
  20. package/dist/index.d.ts +8 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +23 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/lib/component.d.ts +20 -0
  25. package/dist/lib/component.d.ts.map +1 -1
  26. package/dist/lib/component.js +35 -0
  27. package/dist/lib/component.js.map +1 -1
  28. package/dist/lib/index.d.ts +54 -4
  29. package/dist/lib/index.d.ts.map +1 -1
  30. package/dist/lib/index.js +44 -10
  31. package/dist/lib/index.js.map +1 -1
  32. package/dist/nodes.d.ts.map +1 -1
  33. package/dist/nodes.js +15 -11
  34. package/dist/nodes.js.map +1 -1
  35. package/dist/reference.d.ts +37 -2
  36. package/dist/reference.d.ts.map +1 -1
  37. package/dist/reference.js +73 -7
  38. package/dist/reference.js.map +1 -1
  39. package/dist/schema-universals.d.ts +43 -0
  40. package/dist/schema-universals.d.ts.map +1 -0
  41. package/dist/schema-universals.js +39 -0
  42. package/dist/schema-universals.js.map +1 -0
  43. package/dist/tags/accordion.d.ts.map +1 -1
  44. package/dist/tags/accordion.js +24 -5
  45. package/dist/tags/accordion.js.map +1 -1
  46. package/dist/tags/annotate.d.ts.map +1 -1
  47. package/dist/tags/annotate.js +1 -0
  48. package/dist/tags/annotate.js.map +1 -1
  49. package/dist/tags/badge.d.ts.map +1 -1
  50. package/dist/tags/badge.js +3 -0
  51. package/dist/tags/badge.js.map +1 -1
  52. package/dist/tags/bg.d.ts.map +1 -1
  53. package/dist/tags/bg.js +3 -0
  54. package/dist/tags/bg.js.map +1 -1
  55. package/dist/tags/blog.d.ts.map +1 -1
  56. package/dist/tags/blog.js +1 -0
  57. package/dist/tags/blog.js.map +1 -1
  58. package/dist/tags/card.d.ts.map +1 -1
  59. package/dist/tags/card.js +1 -0
  60. package/dist/tags/card.js.map +1 -1
  61. package/dist/tags/code.d.ts +25 -0
  62. package/dist/tags/code.d.ts.map +1 -0
  63. package/dist/tags/code.js +36 -0
  64. package/dist/tags/code.js.map +1 -0
  65. package/dist/tags/data.d.ts.map +1 -1
  66. package/dist/tags/data.js +26 -4
  67. package/dist/tags/data.js.map +1 -1
  68. package/dist/tags/drawer.d.ts.map +1 -1
  69. package/dist/tags/drawer.js +1 -0
  70. package/dist/tags/drawer.js.map +1 -1
  71. package/dist/tags/expand.d.ts.map +1 -1
  72. package/dist/tags/expand.js +3 -0
  73. package/dist/tags/expand.js.map +1 -1
  74. package/dist/tags/icon.d.ts +10 -0
  75. package/dist/tags/icon.d.ts.map +1 -1
  76. package/dist/tags/icon.js +13 -0
  77. package/dist/tags/icon.js.map +1 -1
  78. package/dist/tags/include.d.ts +24 -0
  79. package/dist/tags/include.d.ts.map +1 -0
  80. package/dist/tags/include.js +46 -0
  81. package/dist/tags/include.js.map +1 -0
  82. package/dist/tags/mediatext.d.ts.map +1 -1
  83. package/dist/tags/mediatext.js +1 -0
  84. package/dist/tags/mediatext.js.map +1 -1
  85. package/dist/tags/pullquote.d.ts.map +1 -1
  86. package/dist/tags/pullquote.js +1 -0
  87. package/dist/tags/pullquote.js.map +1 -1
  88. package/dist/tags/sidenote.d.ts.map +1 -1
  89. package/dist/tags/sidenote.js +1 -0
  90. package/dist/tags/sidenote.js.map +1 -1
  91. package/dist/tags/snippet.d.ts.map +1 -1
  92. package/dist/tags/snippet.js +14 -6
  93. package/dist/tags/snippet.js.map +1 -1
  94. package/dist/tags/textblock.d.ts.map +1 -1
  95. package/dist/tags/textblock.js +1 -0
  96. package/dist/tags/textblock.js.map +1 -1
  97. package/dist/tags/tint.d.ts.map +1 -1
  98. package/dist/tags/tint.js +3 -0
  99. package/dist/tags/tint.js.map +1 -1
  100. package/dist/tags/xref.d.ts.map +1 -1
  101. package/dist/tags/xref.js +3 -0
  102. package/dist/tags/xref.js.map +1 -1
  103. package/dist/universal-attributes.d.ts +90 -0
  104. package/dist/universal-attributes.d.ts.map +1 -0
  105. package/dist/universal-attributes.js +107 -0
  106. package/dist/universal-attributes.js.map +1 -0
  107. package/dist/util.d.ts +41 -1
  108. package/dist/util.d.ts.map +1 -1
  109. package/dist/util.js +70 -12
  110. package/dist/util.js.map +1 -1
  111. package/package.json +3 -3
@@ -8,10 +8,16 @@
8
8
  * emitted table is consumed by `chart`/`datatable` with no structural edits and
9
9
  * is the honest no-JS fallback on a bare page.
10
10
  *
11
- * On any failure (sandbox escape / missing file / parse error / empty result)
12
- * the tag is replaced with a visible error callout and a build warning is
13
- * emitted — the build continues and the `data` tag never reaches its throwing
14
- * transform.
11
+ * On a failure (sandbox escape / missing file / parse error / a source that
12
+ * yielded no rows) the tag is replaced with a visible error callout and a build
13
+ * error is recorded — the build continues and the `data` tag never reaches its
14
+ * throwing transform.
15
+ *
16
+ * A *projection* that ends with no rows is not a failure (BUG-011). Asking real
17
+ * data a question with no answer today is normal, so the tag is spliced away and
18
+ * nothing renders. What used to justify erroring there — catching a misspelt
19
+ * column — is now `unknownFieldWarnings`, which detects the typo directly
20
+ * instead of inferring it from an empty result.
15
21
  */
16
22
  import type { Node } from '@markdoc/markdoc';
17
23
  import type { PreprocessContext, PreprocessPage } from '@refrakt-md/types';
@@ -1 +1 @@
1
- {"version":3,"file":"data-pipeline.d.ts","sourceRoot":"","sources":["../src/data-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAgB,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA4CzF;;;;GAIG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,iBAAiB,GACpB,IAAI,GAAG,IAAI,CAKb"}
1
+ {"version":3,"file":"data-pipeline.d.ts","sourceRoot":"","sources":["../src/data-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAgB,iBAAiB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AA8FzF;;;;GAIG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,cAAc,EACpB,GAAG,EAAE,iBAAiB,GACpB,IAAI,GAAG,IAAI,CAKb"}
@@ -8,37 +8,77 @@
8
8
  * emitted table is consumed by `chart`/`datatable` with no structural edits and
9
9
  * is the honest no-JS fallback on a bare page.
10
10
  *
11
- * On any failure (sandbox escape / missing file / parse error / empty result)
12
- * the tag is replaced with a visible error callout and a build warning is
13
- * emitted — the build continues and the `data` tag never reaches its throwing
14
- * transform.
11
+ * On a failure (sandbox escape / missing file / parse error / a source that
12
+ * yielded no rows) the tag is replaced with a visible error callout and a build
13
+ * error is recorded — the build continues and the `data` tag never reaches its
14
+ * throwing transform.
15
+ *
16
+ * A *projection* that ends with no rows is not a failure (BUG-011). Asking real
17
+ * data a question with no answer today is normal, so the tag is spliced away and
18
+ * nothing renders. What used to justify erroring there — catching a misspelt
19
+ * column — is now `unknownFieldWarnings`, which detects the typo directly
20
+ * instead of inferring it from an empty result.
15
21
  */
22
+ import Markdoc from '@markdoc/markdoc';
23
+ const { Ast } = Markdoc;
16
24
  import { delimitedAdapter, jsonAdapter, ndjsonAdapter, inferFormat, DataSourceError, } from './data-adapters.js';
17
- import { applyWhere, applySort, applyColumns, applyLimitOffset, applyTyping, } from './data-projection.js';
18
- import { emitTableNode, emitErrorNode } from './data-emit.js';
19
- /** Resolve a Markdoc attribute value to a string — literal strings and
20
- * `Variable` AST nodes (e.g. `src=$file.dir`). Mirrors snippet's resolver. */
21
- function resolveString(value, variables) {
25
+ import { applyWhere, applySort, applyColumns, applyLimitOffset, applyTyping, unknownFieldWarnings, } from './data-projection.js';
26
+ import { emitTableNode, emitBodyTableNode, emitErrorNode } from './data-emit.js';
27
+ function resolveAttr(value, variables) {
22
28
  if (value === undefined || value === null)
23
- return '';
24
- if (typeof value === 'string')
25
- return value;
29
+ return { ok: false, why: 'is empty' };
30
+ if (typeof value === 'string') {
31
+ return value === '' ? { ok: false, why: 'is empty' } : { ok: true, value };
32
+ }
26
33
  if (typeof value === 'number' || typeof value === 'boolean')
27
- return String(value);
34
+ return { ok: true, value: String(value) };
28
35
  if (typeof value === 'object' && '$$mdtype' in value) {
29
36
  const node = value;
30
37
  if (node.$$mdtype === 'Variable' && Array.isArray(node.path)) {
38
+ const path = node.path.join('.');
31
39
  let current = variables;
32
40
  for (const segment of node.path) {
33
- if (current === null || current === undefined)
34
- return '';
41
+ if (current === null || current === undefined) {
42
+ current = undefined;
43
+ break;
44
+ }
35
45
  current = current[segment];
36
46
  }
37
- return current === null || current === undefined ? '' : String(current);
47
+ return current === null || current === undefined
48
+ ? { ok: false, why: `references \`$${path}\`, which is not defined here` }
49
+ : { ok: true, value: String(current) };
50
+ }
51
+ if (node.$$mdtype === 'Function') {
52
+ // `data` resolves its attributes during preprocess, and Markdoc
53
+ // evaluates functions during the transform — so the call has not
54
+ // happened yet and there is nothing to read.
55
+ return {
56
+ ok: false,
57
+ why: `is a call to \`${node.name ?? 'a function'}()\`, and \`data\` reads its attributes `
58
+ + 'during preprocess — before functions are evaluated',
59
+ };
38
60
  }
39
61
  }
40
- return '';
62
+ return { ok: false, why: 'could not be read' };
41
63
  }
64
+ /** Resolve to a string, treating anything unreadable as absent. For attributes
65
+ * whose failure the caller reports separately via {@link resolveAttr}. */
66
+ function resolveString(value, variables) {
67
+ const r = resolveAttr(value, variables);
68
+ return r.ok ? r.value : '';
69
+ }
70
+ /**
71
+ * Every attribute `data` resolves as a string (BUG-010).
72
+ *
73
+ * `limit` and `offset` are absent on purpose — they go through `numberAttr`,
74
+ * which has its own coercion, and `header` is a Boolean. Everything here
75
+ * reaches `resolveAttr`, so a present-but-unreadable one is reported rather
76
+ * than quietly becoming `''`.
77
+ */
78
+ const STRING_ATTRIBUTES = [
79
+ 'src', 'format', 'delimiter', 'root', 'orient', 'key-column',
80
+ 'columns', 'where', 'sort', 'numeric', 'text', 'headers',
81
+ ];
42
82
  /** Parse a comma-separated column list into trimmed, non-empty names. */
43
83
  function splitList(raw) {
44
84
  return raw.split(',').map((s) => s.trim()).filter((s) => s.length > 0);
@@ -55,26 +95,208 @@ export function preprocessData(ast, page, ctx) {
55
95
  walkAndReplaceData(ast, page, ctx, ctx.sandbox, () => { mutated = true; });
56
96
  return mutated ? ast : undefined;
57
97
  }
58
- function walkAndReplaceData(node, page, ctx, files, onReplaced) {
98
+ /** Runes that consume a `<table>` child directly, so a per-row body inside them
99
+ * would render as a silently empty chart rather than an error (SPEC-127). */
100
+ const TABLE_CONSUMERS = new Set(['chart', 'datatable']);
101
+ function walkAndReplaceData(node, page, ctx, files, onReplaced, enclosing) {
59
102
  if (!node.children)
60
103
  return;
61
104
  for (let i = 0; i < node.children.length; i++) {
62
105
  const child = node.children[i];
63
106
  if (child.type === 'tag' && child.tag === 'data') {
64
- node.children[i] = resolveDataToNode(child, page, ctx, files);
107
+ // **Splice, never wrap.** One `data` tag may now produce N nodes, and
108
+ // they have to land as direct siblings: a container node to keep the
109
+ // replacement 1:1 breaks composition invisibly, and how badly depends
110
+ // on the parent. Measured against `accordion`, a `{% div %}` wrapper is
111
+ // harmless while `{% section %}` and `{% grid %}` consume their
112
+ // children — the `accordion-item` tags and their body text vanish with
113
+ // no error or warning (SPEC-127).
114
+ let replacement = resolveData(child, page, ctx, files, enclosing);
115
+ // Resolve any `data` the replacement carries — a subquery, one copy
116
+ // per outer row, each with its `where` already bound (WORK-553).
117
+ //
118
+ // Walked through a throwaway container because a subquery can be a
119
+ // *direct* child of the body, in which case it is the replacement
120
+ // node itself: `walkAndReplaceData` only ever replaces children, so
121
+ // handing it the node would walk past the very tag that needs
122
+ // resolving.
123
+ //
124
+ // This terminates without a depth limit: the tags come from the
125
+ // authored body and each pass consumes one level of it. A row value
126
+ // cannot synthesise a new `data` tag — rows are text, and `bindRow`
127
+ // only substitutes into slots that already exist.
128
+ if (replacement.length > 0) {
129
+ const container = new Ast.Node('document', {}, replacement);
130
+ walkAndReplaceData(container, page, ctx, files, onReplaced, enclosing);
131
+ replacement = container.children;
132
+ }
133
+ node.children.splice(i, 1, ...replacement);
134
+ i += replacement.length - 1;
65
135
  onReplaced();
66
136
  continue;
67
137
  }
68
- walkAndReplaceData(child, page, ctx, files, onReplaced);
138
+ walkAndReplaceData(child, page, ctx, files, onReplaced, child.tag ?? enclosing);
139
+ }
140
+ }
141
+ /**
142
+ * Bind one row into a copy of the template body.
143
+ *
144
+ * `$row.x` reaches the AST as a `Variable` in a node's *attributes* — on a tag
145
+ * (`href=$row.url`) and equally on a `text` node, where `{% $row.title %}`
146
+ * becomes `content: Variable(['row','title'])`. So one rule covers both.
147
+ *
148
+ * Substitution happens here, at preprocess, rather than being left to the
149
+ * transform's `config.variables`: the binding differs per row, and a single
150
+ * shared config cannot express that.
151
+ */
152
+ function bindRow(node, row) {
153
+ const attributes = {};
154
+ for (const [key, value] of Object.entries(node.attributes ?? {})) {
155
+ attributes[key] = resolveRowVariable(value, row);
156
+ }
157
+ // **A nested `data` owns its own `$row`** (WORK-553). Its *attributes* bind
158
+ // from this row — that is how a subquery is parameterised, `where=$row.axis`
159
+ // — but its body belongs to the subquery's rows, so it is copied verbatim.
160
+ //
161
+ // Without the stop, the outer bind resolves the inner body's `$row.name`
162
+ // against the outer row, which has no such column, and blanks it to `''`
163
+ // before the subquery ever runs. Measured, not theorised.
164
+ const children = node.tag === 'data'
165
+ ? (node.children ?? []).map(cloneNode)
166
+ : (node.children ?? []).map((child) => bindRow(child, row));
167
+ const copy = new Ast.Node(node.type, attributes, children, node.tag);
168
+ // `inline` and a few other node types carry meaning in fields the
169
+ // constructor does not take; copy what Markdoc sets.
170
+ if (node.lines)
171
+ copy.lines = node.lines;
172
+ if (node.location)
173
+ copy.location = node.location;
174
+ return copy;
175
+ }
176
+ /**
177
+ * Split a body into `---`-delimited cells (WORK-550).
178
+ *
179
+ * `---` is already refrakt's delimiter for this shape — `card` splits its body
180
+ * into media / body / footer on it, `grid` splits columns on it — and Markdoc
181
+ * parses it to an `hr` node whether or not blank lines surround it, so a cell
182
+ * can be written tightly without turning the line above into a setext heading.
183
+ *
184
+ * A cell may hold any number of block nodes, including none: `a --- --- b` is
185
+ * three cells, the middle one empty. That matters for a column an author wants
186
+ * blank on some rows.
187
+ */
188
+ function splitCells(body) {
189
+ const cells = [[]];
190
+ for (const node of body) {
191
+ if (node.type === 'hr')
192
+ cells.push([]);
193
+ else
194
+ cells[cells.length - 1].push(node);
69
195
  }
196
+ return cells;
70
197
  }
71
- function resolveDataToNode(tag, page, ctx, files) {
198
+ /** Deep-copy a node without touching variables — the subquery body's copy. */
199
+ function cloneNode(node) {
200
+ const copy = new Ast.Node(node.type, { ...(node.attributes ?? {}) }, (node.children ?? []).map(cloneNode), node.tag);
201
+ if (node.lines)
202
+ copy.lines = node.lines;
203
+ if (node.location)
204
+ copy.location = node.location;
205
+ return copy;
206
+ }
207
+ function resolveRowVariable(value, row) {
208
+ if (value && typeof value === 'object') {
209
+ const node = value;
210
+ if (node.$$mdtype === 'Variable' && Array.isArray(node.path) && node.path[0] === 'row') {
211
+ let current = row;
212
+ for (const segment of node.path.slice(1)) {
213
+ if (current === null || current === undefined)
214
+ return '';
215
+ current = current[segment];
216
+ }
217
+ return current === null || current === undefined ? '' : current;
218
+ }
219
+ }
220
+ return value;
221
+ }
222
+ /**
223
+ * Project a typed table into plain row objects keyed by column header.
224
+ *
225
+ * A numeric column exposes its normalized number so a template can do
226
+ * arithmetic or formatting with it; everything else exposes the cell's text,
227
+ * which is what a template renders.
228
+ *
229
+ * Booleans are the one extra coercion. The table intermediate is text, so a
230
+ * JSON `false` arrives as the *string* `"false"` — which is truthy, making
231
+ * `{% if $row.flag %}` render for every row. Sources with boolean fields are
232
+ * exactly what a per-row template wants to branch on, so `"true"` / `"false"`
233
+ * bind as booleans. The match is on the whole cell, so a column of prose
234
+ * mentioning "false" is unaffected.
235
+ */
236
+ function rowObjects(table) {
237
+ return table.rows.map((cells) => {
238
+ const row = {};
239
+ cells.forEach((cell, c) => {
240
+ if (table.columnTypes[c] === 'numeric' && cell.value !== null) {
241
+ row[table.headers[c]] = cell.value;
242
+ }
243
+ else if (cell.text === 'true' || cell.text === 'false') {
244
+ row[table.headers[c]] = cell.text === 'true';
245
+ }
246
+ else {
247
+ row[table.headers[c]] = cell.text;
248
+ }
249
+ });
250
+ return row;
251
+ });
252
+ }
253
+ function resolveData(tag, page, ctx, files, enclosing) {
254
+ const body = (tag.children ?? []).filter((child) => child.type !== 'text' || String(child.attributes?.content ?? '').trim() !== '');
255
+ if (body.length > 0 && enclosing && TABLE_CONSUMERS.has(enclosing)) {
256
+ const msg = `a per-row body cannot be used inside {% ${enclosing} %}, which consumes the table this rune would otherwise emit — remove the body, or move the {% data %} outside`;
257
+ ctx.error(`data: ${msg}`, page.url);
258
+ return [emitErrorNode(`data error: ${msg}`)];
259
+ }
260
+ return resolveDataToNodes(tag, page, ctx, files, body);
261
+ }
262
+ function resolveDataToNodes(tag, page, ctx, files, body) {
72
263
  const a = tag.attributes;
264
+ // BUG-010 — an attribute the author *wrote* but the rune cannot read is an
265
+ // error, and the reason is named. Absent stays absent: only keys actually
266
+ // present in the tag are checked, so omitting `where` is still fine.
267
+ //
268
+ // Checked up front and reported together, because one unreadable attribute
269
+ // usually means the call site is wrong in a way that affects several.
270
+ const unreadable = [];
271
+ for (const name of STRING_ATTRIBUTES) {
272
+ if (!(name in a))
273
+ continue;
274
+ const r = resolveAttr(a[name], ctx.variables);
275
+ if (!r.ok)
276
+ unreadable.push(`\`${name}\` ${r.why}`);
277
+ }
278
+ if (unreadable.length > 0) {
279
+ const msg = unreadable.length === 1
280
+ ? unreadable[0]
281
+ : `${unreadable.length} attributes could not be read — ${unreadable.join('; ')}`;
282
+ ctx.error(`data: ${msg}`, page.url);
283
+ return [emitErrorNode(`data error: ${msg}`)];
284
+ }
73
285
  const src = resolveString(a.src, ctx.variables);
286
+ const headers = splitList(resolveString(a.headers, ctx.variables));
287
+ // `headers` describes the *body's* cells, so without a body there is nothing
288
+ // for it to describe. Ignoring it silently would read as a rename of
289
+ // `columns`, which selects and renames source columns instead.
290
+ if (headers.length > 0 && body.length === 0) {
291
+ const msg = '`headers` names the columns of a `---`-delimited body and needs one. '
292
+ + 'For a bodyless table, select and rename source columns with `columns`.';
293
+ ctx.error(`data "${src || '(unresolved)'}": ${msg}`, page.url);
294
+ return [emitErrorNode(`data error: ${msg}`)];
295
+ }
74
296
  if (!src) {
75
297
  const msg = 'data `src` attribute is required (and an unresolvable variable reference resolves to empty)';
76
298
  ctx.error(msg, page.url);
77
- return emitErrorNode(`data error: ${msg}`);
299
+ return [emitErrorNode(`data error: ${msg}`)];
78
300
  }
79
301
  try {
80
302
  const raw = files.read(src);
@@ -83,29 +305,73 @@ function resolveDataToNode(tag, page, ctx, files) {
83
305
  }
84
306
  const format = resolveFormat(src, resolveString(a.format, ctx.variables));
85
307
  const table = runAdapter(raw, format, a, ctx);
308
+ // A source that parsed to nothing is an error: the author pointed at the
309
+ // wrong file, or a `root` / JSON pointer into nothing. Checked *before*
310
+ // projection, so it stays distinct from "my filter excluded everything"
311
+ // — collapsing the two is what BUG-011 was.
312
+ if (table.rows.length === 0) {
313
+ throw new DataSourceError('source yielded no rows — check the file has data, and that `root` / `orient` point at the right place');
314
+ }
315
+ const whereSpec = resolveString(a.where, ctx.variables) || undefined;
316
+ const sortSpec = resolveString(a.sort, ctx.variables) || undefined;
317
+ const columnsSpec = resolveString(a.columns, ctx.variables) || undefined;
318
+ // The typo detector (BUG-011). Fires on a misspelt column whether or not
319
+ // the result ends up empty — a clause that names nothing is a mistake even
320
+ // when some other clause still matches rows.
321
+ for (const w of unknownFieldWarnings(table, { where: whereSpec, sort: sortSpec, columns: columnsSpec })) {
322
+ ctx.warn(`data "${src}": ${w}`, page.url);
323
+ }
86
324
  // Shared projection: where → sort → columns → limit/offset.
87
- const { table: filtered, warnings } = applyWhere(table, resolveString(a.where, ctx.variables) || undefined);
325
+ const { table: filtered, warnings } = applyWhere(table, whereSpec);
88
326
  for (const w of warnings)
89
327
  ctx.warn(`data "${src}": ${w}`, page.url);
90
- const sorted = applySort(filtered, resolveString(a.sort, ctx.variables) || undefined);
91
- const { table: selected, sources } = applyColumns(sorted, resolveString(a.columns, ctx.variables) || undefined);
328
+ const sorted = applySort(filtered, sortSpec);
329
+ const { table: selected, sources } = applyColumns(sorted, columnsSpec);
92
330
  const projected = applyLimitOffset(selected, numberAttr(a.limit), numberAttr(a.offset));
93
- if (projected.rows.length === 0) {
94
- throw new DataSourceError('result is empty after projection (no rows to render)');
95
- }
331
+ // A filter that legitimately matched nothing renders nothing, silently.
332
+ // Asking real data a question with no answer today is normal — a page
333
+ // listing open bugs when there are none is working, not broken — and the
334
+ // mistake this used to catch now has its own warning above.
335
+ if (projected.rows.length === 0)
336
+ return [];
96
337
  // Shared typing → data-value channel (`numeric`/`text` may name the
97
338
  // source or the renamed column).
98
339
  const numericCols = splitList(resolveString(a.numeric, ctx.variables));
99
340
  const textCols = splitList(resolveString(a.text, ctx.variables));
100
341
  const typed = applyTyping(projected, { numeric: numericCols, text: textCols, sources });
101
- return emitTableNode(typed);
342
+ if (body.length === 0)
343
+ return [emitTableNode(typed)];
344
+ // WORK-550 — `headers` switches what the body *means*: a `---`-delimited
345
+ // sequence of cells rather than a run of blocks. The cells stay authored
346
+ // Markdoc, so a generated table can carry the emphasis, links, runes and
347
+ // `{% if %}` the bodyless form's literal-text cells cannot.
348
+ if (headers.length > 0) {
349
+ const cells = splitCells(body);
350
+ if (cells.length !== headers.length) {
351
+ throw new DataSourceError(`\`headers\` names ${headers.length} column${headers.length === 1 ? '' : 's'} but the body has `
352
+ + `${cells.length} \`---\`-delimited cell${cells.length === 1 ? '' : 's'}. `
353
+ + 'Separate each cell with a `---` line; the counts must match.');
354
+ }
355
+ const rows = rowObjects(typed).map((row) => cells.map((cell) => cell.map((child) => bindRow(child, row))));
356
+ return [emitBodyTableNode(headers, rows)];
357
+ }
358
+ // `numeric` / `text` exist to drive the `data-value` channel that charts
359
+ // and sortable tables read off `<td>`s. With a body there are no cells to
360
+ // carry it, so say so rather than accepting an attribute that does
361
+ // nothing — the same posture WORK-536 took for silently dropped axes.
362
+ if (numericCols.length > 0 || textCols.length > 0) {
363
+ ctx.warn(`data "${src}": \`numeric\` / \`text\` set alongside a per-row body — they type the ` +
364
+ '`data-value` attribute on table cells, and a body emits no cells. Numeric columns are ' +
365
+ 'still bound to `$row` as numbers.', page.url);
366
+ }
367
+ return rowObjects(typed).flatMap((row) => body.map((child) => bindRow(child, row)));
102
368
  }
103
369
  catch (err) {
104
370
  const msg = err instanceof DataSourceError
105
371
  ? err.message
106
372
  : `unexpected failure — ${err instanceof Error ? err.message : String(err)}`;
107
373
  ctx.error(`data "${src}": ${msg}`, page.url);
108
- return emitErrorNode(`data error: ${msg}`);
374
+ return [emitErrorNode(`data error: ${msg}`)];
109
375
  }
110
376
  }
111
377
  /** Resolve the effective format: explicit override, else extension-inferred. */
@@ -1 +1 @@
1
- {"version":3,"file":"data-pipeline.js","sourceRoot":"","sources":["../src/data-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-pipeline.js","sourceRoot":"","sources":["../src/data-pipeline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;AAExB,OAAO,EACN,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,WAAW,EACX,eAAe,GAGf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,oBAAoB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAiBjF,SAAS,WAAW,CAAC,KAAc,EAAE,SAA8C;IAClF,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;IACjF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IACvG,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,UAAU,IAAK,KAAiC,EAAE,CAAC;QACnF,MAAM,IAAI,GAAG,KAA4D,CAAC;QAC1E,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAI,IAAI,CAAC,IAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,OAAO,GAAY,SAAS,CAAC;YACjC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,IAAgB,EAAE,CAAC;gBAC7C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;oBAAC,OAAO,GAAG,SAAS,CAAC;oBAAC,MAAM;gBAAC,CAAC;gBAC9E,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;gBAC/C,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,iBAAiB,IAAI,+BAA+B,EAAE;gBAC1E,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YAClC,gEAAgE;YAChE,iEAAiE;YACjE,6CAA6C;YAC7C,OAAO;gBACN,EAAE,EAAE,KAAK;gBACT,GAAG,EAAE,kBAAkB,IAAI,CAAC,IAAI,IAAI,YAAY,0CAA0C;sBACvF,oDAAoD;aACvD,CAAC;QACH,CAAC;IACF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC;AAChD,CAAC;AAED;2EAC2E;AAC3E,SAAS,aAAa,CAAC,KAAc,EAAE,SAA8C;IACpF,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAG;IACzB,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY;IAC5D,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS;CAC/C,CAAC;AAEX,yEAAyE;AACzE,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC7B,GAAS,EACT,IAAoB,EACpB,GAAsB;IAEtB,IAAI,CAAC,GAAG,CAAC,OAAO;QAAE,OAAO;IACzB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;AAClC,CAAC;AAED;8EAC8E;AAC9E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;AAExD,SAAS,kBAAkB,CAC1B,IAAU,EACV,IAAoB,EACpB,GAAsB,EACtB,KAAmB,EACnB,UAAsB,EACtB,SAAkB;IAElB,IAAI,CAAC,IAAI,CAAC,QAAQ;QAAE,OAAO;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YAClD,sEAAsE;YACtE,qEAAqE;YACrE,sEAAsE;YACtE,wEAAwE;YACxE,gEAAgE;YAChE,uEAAuE;YACvE,kCAAkC;YAClC,IAAI,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;YAClE,oEAAoE;YACpE,iEAAiE;YACjE,EAAE;YACF,mEAAmE;YACnE,kEAAkE;YAClE,oEAAoE;YACpE,8DAA8D;YAC9D,aAAa;YACb,EAAE;YACF,gEAAgE;YAChE,oEAAoE;YACpE,oEAAoE;YACpE,kDAAkD;YAClD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;gBAC5D,kBAAkB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACvE,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC;YAClC,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC;YAC3C,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,UAAU,EAAE,CAAC;YACb,SAAS;QACV,CAAC;QACD,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,GAAG,IAAI,SAAS,CAAC,CAAC;IACjF,CAAC;AACF,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,OAAO,CAAC,IAAU,EAAE,GAA4B;IACxD,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC;QAClE,UAAU,CAAC,GAAG,CAAC,GAAG,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,EAAE;IACF,yEAAyE;IACzE,yEAAyE;IACzE,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,KAAK,MAAM;QACnC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC;QACtC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IACrE,kEAAkE;IAClE,qDAAqD;IACrD,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjD,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,UAAU,CAAC,IAAY;IAC/B,MAAM,KAAK,GAAa,CAAC,EAAE,CAAC,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;YAClC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,SAAS,SAAS,CAAC,IAAU;IAC5B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CACxB,IAAI,CAAC,IAAI,EACT,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,EAC9B,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EACpC,IAAI,CAAC,GAAG,CACR,CAAC;IACF,IAAI,IAAI,CAAC,KAAK;QAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACxC,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IACjD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc,EAAE,GAA4B;IACvE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,KAA8C,CAAC;QAC5D,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;YACxF,IAAI,OAAO,GAAY,GAAG,CAAC;YAC3B,KAAK,MAAM,OAAO,IAAK,IAAI,CAAC,IAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,EAAE,CAAC;gBACzD,OAAO,GAAI,OAAmC,CAAC,OAAO,CAAC,CAAC;YACzD,CAAC;YACD,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QACjE,CAAC;IACF,CAAC;IACD,OAAO,KAAK,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,UAAU,CAAC,KAAiB;IACpC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YACzB,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBAC/D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACpC,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1D,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACP,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACnC,CAAC;QACF,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACZ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CACnB,GAAS,EACT,IAAoB,EACpB,GAAsB,EACtB,KAAmB,EACnB,SAAkB;IAElB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,IAAI,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,2CAA2C,SAAS,gHAAgH,CAAC;QACjL,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,aAAa,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,kBAAkB,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,kBAAkB,CAC1B,GAAS,EACT,IAAoB,EACpB,GAAsB,EACtB,KAAmB,EACnB,IAAY;IAEZ,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC;IAEzB,2EAA2E;IAC3E,0EAA0E;IAC1E,qEAAqE;IACrE,EAAE;IACF,2EAA2E;IAC3E,sEAAsE;IACtE,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;QACtC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC;YAClC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YACf,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,mCAAmC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,aAAa,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAEnE,6EAA6E;IAC7E,qEAAqE;IACrE,+DAA+D;IAC/D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,uEAAuE;cAChF,wEAAwE,CAAC;QAC5E,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,cAAc,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,aAAa,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC,GAAG,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,6FAA6F,CAAC;QAC1G,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,OAAO,CAAC,aAAa,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,eAAe,CACxB,WAAW,GAAG,wEAAwE,CACtF,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9C,yEAAyE;QACzE,wEAAwE;QACxE,wEAAwE;QACxE,4CAA4C;QAC5C,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,eAAe,CACxB,uGAAuG,CACvG,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QACrE,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QACnE,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;QAEzE,yEAAyE;QACzE,2EAA2E;QAC3E,6CAA6C;QAC7C,KAAK,MAAM,CAAC,IAAI,oBAAoB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;YACzG,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,4DAA4D;QAC5D,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACnE,KAAK,MAAM,CAAC,IAAI,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,SAAS,GAAc,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnG,wEAAwE;QACxE,sEAAsE;QACtE,yEAAyE;QACzE,4DAA4D;QAC5D,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE3C,oEAAoE;QACpE,iCAAiC;QACjC,MAAM,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACvE,MAAM,QAAQ,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;QAExF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,yEAAyE;QACzE,yEAAyE;QACzE,yEAAyE;QACzE,4DAA4D;QAC5D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBACrC,MAAM,IAAI,eAAe,CACxB,qBAAqB,OAAO,CAAC,MAAM,UAAU,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,oBAAoB;sBAC9F,GAAG,KAAK,CAAC,MAAM,0BAA0B,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI;sBAC1E,8DAA8D,CAChE,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1C,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAC7D,CAAC;YACF,OAAO,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;QAED,yEAAyE;QACzE,0EAA0E;QAC1E,mEAAmE;QACnE,sEAAsE;QACtE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,GAAG,CAAC,IAAI,CACP,SAAS,GAAG,yEAAyE;gBACrF,wFAAwF;gBACxF,mCAAmC,EACnC,IAAI,CAAC,GAAG,CACR,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,GAAG,YAAY,eAAe;YACzC,CAAC,CAAC,GAAG,CAAC,OAAO;YACb,CAAC,CAAC,wBAAwB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,CAAC,aAAa,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;AACF,CAAC;AAED,gFAAgF;AAChF,SAAS,aAAa,CAAC,GAAW,EAAE,QAAgB;IACnD,IAAI,QAAQ;QAAE,OAAO,QAAsB,CAAC;IAC5C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,IAAI,eAAe,CACxB,gCAAgC,GAAG,sCAAsC,CACzE,CAAC;AACH,CAAC;AAED;8DAC8D;AAC9D,SAAS,UAAU,CAClB,GAAW,EACX,MAAkB,EAClB,CAA0B,EAC1B,GAAsB;IAEtB,QAAQ,MAAM,EAAE,CAAC;QAChB,KAAK,KAAK,CAAC;QACX,KAAK,KAAK;YACT,OAAO,gBAAgB,CAAC,GAAG,EAAE;gBAC5B,MAAM;gBACN,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;gBACjE,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK;aAC/D,CAAC,CAAC;QACJ,KAAK,MAAM,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YACtD,OAAO,WAAW,CAAC,GAAG,EAAE;gBACvB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;gBACvD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAE,MAAyC,CAAC,CAAC,CAAC,SAAS;gBACvE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS;aACrE,CAAC,CAAC;QACJ,CAAC;QACD,KAAK,QAAQ;YACZ,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;QAC3B;YACC,MAAM,IAAI,eAAe,CAAC,uBAAuB,MAAM,GAAG,CAAC,CAAC;IAC9D,CAAC;AACF,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACtD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -62,6 +62,27 @@ export declare function applyColumns(table: DataTable, spec: string | undefined)
62
62
  * when every non-empty cell in the column parses as a number, else by natural
63
63
  * string collation. A no-op when `spec` is empty or names an unknown column. */
64
64
  export declare function applySort(table: DataTable, spec: string | undefined): DataTable;
65
+ /**
66
+ * Warn about a `where` / `sort` / `columns` clause naming a column the source
67
+ * does not have (BUG-011).
68
+ *
69
+ * This is the typo detector. Before it, nothing reported a misspelt field: a
70
+ * clause naming a column that does not exist matched no rows, and the only
71
+ * thing that noticed was `data`'s blanket "result is empty after projection"
72
+ * error — which fired just as loudly on a *correct* filter that legitimately
73
+ * matched nothing. One signal was standing in for two conditions, so it was
74
+ * wrong about one of them. Detecting the typo directly is what lets the empty
75
+ * case stop being a failure.
76
+ *
77
+ * All three specs are checked against the adapter's headers, which is right for
78
+ * each of them: `where` and `sort` run before `columns`, and `columns` names
79
+ * *source* headers even when it renames them.
80
+ */
81
+ export declare function unknownFieldWarnings(table: DataTable, specs: {
82
+ where?: string;
83
+ sort?: string;
84
+ columns?: string;
85
+ }): string[];
65
86
  /** Apply `limit`/`offset` — a row slice (the `data` analogue of snippet `lines=`). */
66
87
  export declare function applyLimitOffset(table: DataTable, limit?: number, offset?: number): DataTable;
67
88
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"data-projection.d.ts","sourceRoot":"","sources":["../src/data-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAQ,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5C;;oFAEoF;AACpF,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU3D;AAOD,qEAAqE;AACrE,UAAU,eAAe;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ;AAED;;uCAEuC;AACvC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAchE;AA4BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACzB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAa1C;AAED;;;;;qCAKqC;AACrC,wBAAgB,YAAY,CAC3B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAYzC;AAED;;iFAEiF;AACjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CA8B/E;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAK7F;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACpE,UAAU,CAsBZ"}
1
+ {"version":3,"file":"data-projection.d.ts","sourceRoot":"","sources":["../src/data-projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAQ,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE5C;;oFAEoF;AACpF,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAU3D;AAOD,qEAAqE;AACrE,UAAU,eAAe;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ;AAED;;uCAEuC;AACvC,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAchE;AA4BD;;;;;;GAMG;AACH,wBAAgB,UAAU,CACzB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAa1C;AAED;;;;;qCAKqC;AACrC,wBAAgB,YAAY,CAC3B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAYzC;AAED;;iFAEiF;AACjF,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CA8B/E;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,MAAM,EAAE,CAqBV;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAK7F;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,SAAS,EAChB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACpE,UAAU,CAsBZ"}
@@ -161,6 +161,43 @@ export function applySort(table, spec) {
161
161
  });
162
162
  return { headers: table.headers, rows: sorted };
163
163
  }
164
+ /**
165
+ * Warn about a `where` / `sort` / `columns` clause naming a column the source
166
+ * does not have (BUG-011).
167
+ *
168
+ * This is the typo detector. Before it, nothing reported a misspelt field: a
169
+ * clause naming a column that does not exist matched no rows, and the only
170
+ * thing that noticed was `data`'s blanket "result is empty after projection"
171
+ * error — which fired just as loudly on a *correct* filter that legitimately
172
+ * matched nothing. One signal was standing in for two conditions, so it was
173
+ * wrong about one of them. Detecting the typo directly is what lets the empty
174
+ * case stop being a failure.
175
+ *
176
+ * All three specs are checked against the adapter's headers, which is right for
177
+ * each of them: `where` and `sort` run before `columns`, and `columns` names
178
+ * *source* headers even when it renames them.
179
+ */
180
+ export function unknownFieldWarnings(table, specs) {
181
+ const known = new Set(table.headers);
182
+ const available = table.headers.join(', ');
183
+ const warnings = [];
184
+ const check = (attr, field) => {
185
+ if (field === '' || known.has(field))
186
+ return;
187
+ warnings.push(`\`${attr}\` names a column the source does not have: "${field}". Available: ${available}.`);
188
+ };
189
+ for (const clause of parseFieldMatch(specs.where).clauses)
190
+ check('where', clause.field);
191
+ if (specs.sort && specs.sort.trim() !== '') {
192
+ const trimmed = specs.sort.trim();
193
+ check('sort', (trimmed.startsWith('-') ? trimmed.slice(1) : trimmed).trim());
194
+ }
195
+ if (specs.columns && specs.columns.trim() !== '') {
196
+ for (const sel of parseColumnsSpec(specs.columns))
197
+ check('columns', sel.source);
198
+ }
199
+ return warnings;
200
+ }
164
201
  /** Apply `limit`/`offset` — a row slice (the `data` analogue of snippet `lines=`). */
165
202
  export function applyLimitOffset(table, limit, offset) {
166
203
  const start = offset && offset > 0 ? offset : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"data-projection.js","sourceRoot":"","sources":["../src/data-projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"data-projection.js","sourceRoot":"","sources":["../src/data-projection.ts"],"names":[],"mappings":"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"}