# [7.22.0](https://git.datacontroller.io/dc/dc/compare/v7.21.0...v7.22.0) (2026-11-05) ### Bug Fixes * **browse:** accept legal folder names, cap the walk, and lock the read ([3572d56](3572d56cfb)) * **build:** build the mock sites with a CLI whose runtime provides webout() ([b1eab98](b1eab98200)) * **build:** publish the changed-path decision and pin the matcher with tests ([ecc8702](ecc87021c3)) * **build:** treat a sas/package.json bump as a Cypress input ([48df795](48df795202)) * **client:** cancel a queued dropdown reposition on destroy ([590b841](590b841f24)) * **client:** drop the synthetic window resize dispatches ([2535baa](2535baa5f7)) * **client:** keep the ARIA pass on the viewbox and multi-dataset grids too ([cb30469](cb30469e79)) * **client:** restrict the table pass to Handsontable's own tables, add the viewer fallback ([46c6aec](46c6aec37a)) * **client:** scope the ARIA pass to each grid and drive it from the render hooks ([bf1e7d6](bf1e7d6b15)) * **client:** stop synthesising aria-labels; name the filter modal's submit in the test ([32d3d49](32d3d49b59)) * **client:** strip only this grid's own wrapper, and pin the re-strip after a data load ([f282d1a](f282d1a44b)) * **deploy:** ACTION cannot seed by default, and the probe stops overwriting ([e84cfaa](e84cfaaabd)) * **deploy:** ask for the admin group before the staging directory on SASjs ([5c64691](5c646913e4)) * **deploy:** await nothing, and encode the values in the makedata URL ([d67a0e5](d67a0e5d5f)) * **deploy:** drop the deprecated service-pack deploy from the setup screen ([59e09e2](59e09e26a5)) * **deploy:** gate the browse actions on the settings file ([5eb8492](5eb8492742)) * **deploy:** make the folder picker work on both estates ([fb38309](fb38309e98)) * **deploy:** match the documented SYSSCPL set and stop guessing at the cap ([5f338ff](5f338ff437)) * **deploy:** read a URL-supplied ACTION before defaulting, and show locked folders ([addb4a5](addb4a56ea)) * **deploy:** stop the makedata poll outliving its screen, and align the release gates ([c808c41](c808c41333)), closes [#407](#407) * **deploy:** unclamp the folder picker row and probe in the chosen context ([1330925](133092502c)) * **deps:** bump @sasjs/core to 7.0.1 so special missings can be restored ([3d2eefd](3d2eefdd7b)), closes [sasjs/core#499](sasjs/core#499) * **deps:** bump @sasjs/core to 7.1.3 so a filter abort names the clause ([c7c1815](c7c181518c)) * **editor:** a container resize must not clear an active sort ([5bd7b5d](5bd7b5d724)), closes [#246](#246) [#246](#246) * **editor:** drop the stale case hint, and narrow the strip to our own form ([bd2739c](bd2739cde4)) * **editor:** one predicate for the CASE marker, and no stacking in the tooltip ([18b0546](18b0546dcb)) * **embed:** a rejected mapping must not block the page ([d845b9e](d845b9e9b7)), closes [dc/dc#404](#404) * **embed:** read a month-name date from VA as a date, not a character value ([30cefcf](30cefcf2dc)) * **getgroupmembers:** widen membername to $256 for long names ([196d6c9](196d6c931d)) * **lint:** enable noSingleAsteriskComments and noUnusedLibnames ([9071801](9071801ac5)), closes [#376](#376) * **lint:** make noBannedStrings an error and clear its 13 findings ([0b85f7b](0b85f7bf1e)), closes [#376](#376) * **lint:** make noUndeclaredMacros an error, and fix what it found ([af28a79](af28a79bd5)), closes [#376](#376) * **lint:** make noUnusedMacros an error and clear its 54 findings ([c8c0858](c8c0858295)), closes [#376](#376) * **lint:** rename the short and mixed-case helper macros, and clear the last warnings ([7da67eb](7da67eb17b)), closes [#376](#376) * **makedata:** let the browse actions live as long as the service does ([912fae4](912fae448b)) * **mocks:** 0 is a closed TX_TO, a libref boundary, and the union of the row keys ([67d9cfd](67d9cfd1bd)) * **mocks:** abort like mp_abort, lock like mp_lockanytable, derive saslibs ([ca60208](ca602082ff)) * **mocks:** answer the deploy screen's DIRLIST and WRITECHECK actions ([e1c3c6e](e1c3c6e872)) * **mocks:** derive startupservice's maps and timezone instead of hardcoding ([87fd46c](87fd46c825)) * **mocks:** fold the audit window, and append MPE_AUDIT under its lock ([5ecc7be](5ecc7bebec)) * **mocks:** keep the OMS and path separators the captures lost ([7d9d466](7d9d466c3e)) * **mocks:** one sasDatetimeNow, a documented TX_TO=0, and a shaped fallback export ([e53c50d](e53c50d4e2)) * **mocks:** read hook columns in either case, and guard duplicates first ([349a2f3](349a2f314c)) * **mocks:** read the metadata member from the response, not the function's arity ([09e9f19](09e9f192c5)) * **mocks:** refuse a runtime whose webout() cannot carry column metadata ([482435f](482435f318)) * **mocks:** resolve the audit table once, record lower-case md5, and report a failed audit write ([1a9f594](1a9f59478b)) * **mocks:** run approval hooks, as mpe_runhook does ([f0208bb](f0208bb0b0)) * **mocks:** separate a body read failure from a missing showmeta floor ([744c89b](744c89b919)) * **mpe_abortmessage:** decide once whether the payload was escaped ([af89126](af89126acf)) * **mpe_abortmessage:** read program and state by name, and trim the prefix ([68b89ca](68b89caf63)) * **mpe_assert_abort:** anchor the cut on the whole escaped separator ([e74a7ba](e74a7ba115)) * **mpe_assert_abort:** compare the hook's message, not the log extract ([8b426c2](8b426c27fd)) * **mpe_assert_abort:** compare the unescaped message, cut at the last marker ([e68d221](e68d221354)) * **mpe_assert_abort:** cut at the separator, not the last marker ([4c7e869](4c7e869369)) * **mpe_assert_abort:** name the separator and tolerate a carriage return ([7b09ade](7b09ade97c)) * **mpe_assert_abort:** size the capture buffer for the whole message ([5d32de9](5d32de9df9)) * **mpe_assert_abort:** strip the separator tail, not every trailing escape ([b29bc1e](b29bc1e7ae)) * **mpe_execute:** assemble the abort text in a macro that can be tested ([e2e9103](e2e91039cb)) * **mpe_execute:** keep a child abort message intact when reporting it ([ebfd395](ebfd39582f)) * **mpe_execute:** keep the child message in the fallback, and test the doubled separator ([11587e2](11587e2f24)) * **mpe_execute:** make the abort-text fallback reachable ([24b8cbe](24b8cbe9dc)) * **mpe_execute:** mask a child abort message before it aborts the caller ([20dbf00](20dbf00fb0)) * **mpe_execute:** one symbol for the abort text, and no values in the call ([700b906](700b906d69)) * **multi-dataset:** a sheet that failed to extract is not a clean finish ([3129648](312964864e)) * **multi-dataset:** show the file size and loading stage while the file loads ([45d6c02](45d6c025c9)), closes [#121](#121) * **report:** treat a blank PDF footer parameter as its default ([0f729d7](0f729d7101)) * **test:** let the dirlist and writecheck results reach the caller on Viya ([ed678f0](ed678f0b46)) * **test:** run metanav.cy.ts in CI and open a metadata object ([02a8590](02a8590310)) * **va-host:** bound the early replay even when the frame is not postable ([f6d5a04](f6d5a0495e)) * **va-host:** deliver in load mode, honour dataType, and survive odd prompt names ([7d4155d](7d4155dc6c)) * **va-host:** deliver the load-mount message once, and document report.json from the file ([90784b3](90784b342f)) * **va-host:** keep the deploy password off argv, and verify the app is served ([7c63a5c](7c63a5c93f)) * **va-host:** post to the frame's own origin, and key the replay to the document ([9cec292](9cec292681)) * **viewer:** clamp over-tall PDF rows, always emit an otherwise-empty page ([10229d5](10229d5efe)) * **viewer:** defer the blob URL revoke, reject a selection inside skipped columns ([b5bb704](b5bb704a4f)) * **viewer:** keep the PDF export working where hiddenColumns is not enabled ([f84d4ca](f84d4ca7af)) * **viewer:** review findings - CSV skipped column, PDF row cap before reading ([2c4be5e](2c4be5e94b)) ### Features * **admin:** find and test a writeable location during deploy ([442c595](442c595c2b)) * **deploy:** pick and validate the DC location from the deploy screens ([6eeab2e](6eeab2ed16)) * **editor:** convert CASE rule values on entry ([c4eef49](c4eef498b2)) * **logs:** read the logs modal with the shared log parser ([aabc578](aabc578d5e)) * **mocks:** add the control-table services the screens call ([a1615ee](a1615ee8a7)) * **mocks:** build every JS stored program's response with webout() ([ce6bb5d](ce6bb5d4cd)) * **mocks:** emit the lineage, usernav and libinfo responses through webout() ([1f54fad](1f54fad3fe)) * **mocks:** emit the metanav responses through webout() ([e1d877f](e1d877f21d)) * **mocks:** emit the sas9 services through webout() ([7be3f84](7be3f84073)), closes [#461](#461) * **mocks:** restore a load, and record the diffs it needs ([1a60c68](1a60c689f4)) * **mocks:** use the server's webout() in the JS stored programs ([ccb67ed](ccb67ed5a0)) * **va-host:** emulate a VA report that embeds DC, as a deployable AppStream app ([2185db9](2185db911d)) * **viewer:** download a server-side PDF report ([67ca129](67ca129c4d)) * **viewer:** export the grid as PDF from the context menu ([e58e735](e58e735610)) ### Reverts * keep the helpers nested inside makedata_body ([4424171](4424171b2f))
37 lines
1.2 KiB
JSON
37 lines
1.2 KiB
JSON
{
|
|
"name": "dcfrontend",
|
|
"version": "7.22.0",
|
|
"description": "Data Controller",
|
|
"devDependencies": {
|
|
"@nogoo9/gitleaks": "8.30.1-post.2",
|
|
"@saithodev/semantic-release-gitea": "^2.1.0",
|
|
"@semantic-release/changelog": "^6.0.3",
|
|
"@semantic-release/commit-analyzer": "13.0.1",
|
|
"@semantic-release/git": "^10.0.1",
|
|
"@semantic-release/npm": "13.1.5",
|
|
"@semantic-release/release-notes-generator": "14.1.0"
|
|
},
|
|
"overrides": {
|
|
"got": "11.8.6"
|
|
},
|
|
"scripts": {
|
|
"build-frontend": "cd client && npm run build",
|
|
"lint": "cd client && npm run lint",
|
|
"lint:fix": "cd client && npm run lint:fix",
|
|
"lint:fix:silent": "cd client && npm run lint:fix:silent",
|
|
"lint:check": "cd client && npm run lint:check",
|
|
"lint:check:silent": "cd client && npm run lint:check:silent",
|
|
"jo": "echo",
|
|
"prepare": "git rev-parse --git-dir && git config core.hooksPath ./.git-hooks && git config core.autocrlf false || true"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://git.datacontroller.io/dc/dc.git"
|
|
},
|
|
"private": true,
|
|
"//": [
|
|
"Readme",
|
|
"We must set private: true so that semantic-release/npm plugin will update the package.json version but not try to release it as NPM package"
|
|
]
|
|
}
|