datagrok-tools 6.5.3 → 6.5.4
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.
- package/CHANGELOG.md +4 -0
- package/package.json +1 -1
- package/plugins/func-gen-plugin.js +8 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Datagrok-tools changelog
|
|
2
2
|
|
|
3
|
+
## 6.5.4 (2026-08-07)
|
|
4
|
+
|
|
5
|
+
* func-gen-plugin — `#meta.comparison` in an `.ivp` model now lands as the `comparison` option on the generated dataframe output (run comparison reads index/split/mode/units defaults from there) instead of function-level meta.
|
|
6
|
+
|
|
3
7
|
## 6.5.3 (2026-08-04)
|
|
4
8
|
|
|
5
9
|
* GROK-18695: Security — bumped `adm-zip` to 0.6.0 (CVE-2026-39244). Below 0.6.0 it sized a buffer from the ZIP header's declared uncompressed size before validating it, so a ~120-byte crafted archive forced a multi-GB allocation; `grok report` opens archives fetched from a server. The APIs it uses are unchanged. Also refreshed the lockfile to clear five more high-severity audit findings (`brace-expansion`, `fast-uri`, `ip-address`, `js-yaml`, `postcss`), all within existing ranges.
|
package/package.json
CHANGED
|
@@ -84,17 +84,23 @@ function preparseIvpModel(parser, text) {
|
|
|
84
84
|
const viewer = `Grid(block: 100) | Line chart(block: 100, multiAxis: "${multiAxis}",${segments} ` +
|
|
85
85
|
`multiAxisLegendPosition: "RightCenter", autoLayout: "false", showAggrSelectors: "false")` +
|
|
86
86
|
` | DiffStudio Facet(block: 100${facetSegment})`;
|
|
87
|
-
const outputAnnotation = `//output: dataframe df {caption: ${ivp.name}; viewer: ${viewer}}`;
|
|
88
|
-
|
|
89
87
|
const metas = {runOnOpen: 'true', runOnInput: 'true', features: '{"sens-analysis": true, "fitting": true}'};
|
|
90
88
|
let isModel = false;
|
|
89
|
+
let comparison = null;
|
|
91
90
|
for (const meta of ivp.metas || []) {
|
|
92
91
|
const m = /^(?:\/\/)?meta\.([\w-]+):\s*(.*)$/.exec(String(meta).trim());
|
|
93
92
|
if (!m) continue;
|
|
94
93
|
if (m[1] === 'role') {
|
|
95
94
|
if (m[2].split(',').map((s) => s.trim()).includes('model')) isModel = true;
|
|
95
|
+
} else if (m[1] === 'comparison') {
|
|
96
|
+
// run comparison reads the {comparison: ...} JSON off the dataframe output's
|
|
97
|
+
// options, not off function-level meta
|
|
98
|
+
comparison = m[2];
|
|
96
99
|
} else if (m[1] !== 'solver') metas[m[1]] = m[2];
|
|
97
100
|
}
|
|
101
|
+
|
|
102
|
+
const outputAnnotation = `//output: dataframe df {caption: ${ivp.name}; ` +
|
|
103
|
+
`${comparison ? `comparison: ${comparison}; ` : ''}viewer: ${viewer}}`;
|
|
98
104
|
// Convert a `#meta.inputs` lookup into a real `propagateChoice: all` string input. RFV renders
|
|
99
105
|
// this natively (it ignores `meta.inputs`); selecting a row fills the matching inputs by name.
|
|
100
106
|
// Name / brace parsing mirrors DiffStudio's getLookupsInfo (utils.ts): the name is the text
|