dc 8ed51607a8
Build / Build-and-ng-test (pull_request) Successful in 3m54s
Build / lighthouse (pull_request) Successful in 8m1s
Build / Build-and-test-development (pull_request) Failing after 30m30s
fix(mocks): answer getddl the way the estate does, headers and all
Six findings from the review of #510, each checked against the synthetic
estate's own public/getddl response before being changed:

- the download is an application/text attachment, not octet-stream, and the
  filename is unquoted: the estate sends `content-type: application/text` and
  `content-disposition: attachment; filename=<libref>_<ds>.ddl`
- the DDL header timestamp is the session's local time, as %sysfunc(datetime(),
  datetime19.) is, not UTC - the estate answers 07NOV2025:22:27 where UTC
  getters give 21:27, and the projection masks the comment, so nothing else
  could see the drift
- the headers are written after the DDL is generated, as %mp_streamfile runs
  after %mp_ds2ddl, so nothing is sent before a request that cannot produce a
  file has aborted
- the refusal of an unknown flavour was invented: getddl.sas passes it to
  mp_ds2ddl, which has branches for SAS, TSQL and PGSQL only and leaves the
  file holding its opening comment. The estate answers that as a 200 download,
  and the mock now does too; a new parity scenario, unknown_flavour, pins it
- the "all forty control tables" claim in the DDL comment overstated what the
  committed goldens show: MPE_TABLES is the table recorded, in three flavours
- getcols: drop the dead `libref = knownLib` assignment

Tests: node --test sas/mocks/test/*.test.js - 133 pass, 0 fail, and
parity/check.js reports 0 differences for every getddl scenario.
2026-11-07 21:29:59 +00:00
2026-05-01 11:46:10 +01:00
2023-07-13 13:44:05 +02:00
2026-11-05 21:11:44 +00:00
2023-07-25 09:09:57 +01:00
2026-11-05 21:11:44 +00:00
2026-06-15 14:42:18 +02:00

Data Controller for SAS

Control your manual data modifications!

Alternatives to Data Controller include:

  • 💾 Developing / testing / deploying / scheduling overnight batch jobs to load files from shared drives
  • 🔒 Opening (and locking) datasets in Enterprise Guide or SAS® Table Viewer to perform direct updates
  • ❓ Asking a #DBA to run validated code after a change management process
  • 🌐 Building & maintaining your own custom web application
  • 🏃 Running #SAS or #SQL updates in production

Problems with the above include:

  • Legacy 'black box' solutions with little to no testing, documentation or support
  • End users requiring direct write access to critical data sources in production
  • Upload routines that must be manually modified when the data model changes
  • Breaches due to unnecessary parties having access to the data
  • Inability to trace who made a change, when, and why
  • Reliance on key individuals to perform updates
  • Building bespoke ETL for every new data source
  • High risk of manual error / data corruption

Data Controller for SAS® solves all these issues in a simple-to-install, user-friendly, secure, documented, battle-tested web application. Available on Viya, SAS 9 EBI, and SASjs Server.

An individual Viya deploy can be done in just 2 lines of #SAS code!

filename dc url "https://git.datacontroller.io/dc/dc/releases/download/latest/viya.sas";
%inc dc;

For a multi-user deploy, using a shared system account, please see deploy docs.

For further information:

For support, contact support@4gl.io or reach out on Matrix!

Development

Lighthouse CI

This project includes automated Lighthouse performance and accessibility checks that run on pull requests. The checks ensure:

  • Accessibility Score: Minimum 1.0 (100%) median score across all tested pages

The Lighthouse CI workflow:

  1. Sets up the development environment with SASjs server and mocked services
  2. Builds and serves the Angular frontend
  3. Installs Chrome and runs lhci autorun (Lighthouse CI) against key pages
  4. Uploads results as artifacts for review

To run Lighthouse checks locally:

cd client
npm install
npm run lighthouse

Configuration is in client/lighthouserc.js (URL list, desktop preset, Chrome flags, assertions).

S
Description
Capture, Review, Approve. This repo contains the source code (and release assets) for the Data Controller application.
https://datacontroller.io
Readme
45 MiB
1 Stars 5 Watchers 0 Forks
v7.22.0
Latest
2026-11-05 21:11:51 +00:00
Languages
TypeScript 46.1%
SAS 23.3%
JavaScript 19%
HTML 8.1%
SCSS 2.6%
Other 0.9%