dc e53c50d4e2
Build / Build-and-ng-test (pull_request) Successful in 5m56s
Lighthouse Checks / lighthouse (pull_request) Successful in 8m3s
Build / Build-and-test-development (pull_request) Successful in 29m43s
fix(mocks): one sasDatetimeNow, a documented TX_TO=0, and a shaped fallback export
Three review findings on this branch.

- dcMockUtils defined sasDatetimeNow twice: once beside isCurrentRow with the
  epoch written inline and once in the mp_lockanytable section using
  SAS_EPOCH_MS. The second is the one the file already had; the duplicate is
  gone, so the epoch has one expression.

- isCurrentRow treated TX_TO=0 as current without saying why, and reached that
  through Number(null) === 0. Both conventions are real: makedata writes
  31DEC9999 for a row that was never superseded, and the fixtures in
  control-tables.test.js use 0 for the same thing. The clause stays and the
  comment now says which convention is which, plus that a missing, null or
  blank TX_TO (a table with no version column) is current too. Reading the
  column moved into isCurrentOn, because Array.filter passes the index as a
  second argument and would have handed a `column` parameter the row number.

- admin/exportconfig used the schema only when it existed: with no columns in
  the table file it fell back to Object.keys(rows[0]), which exported the
  TX_/VER_/SELECTBOX_RK columns the spec drops and quoted every number. The
  fallback now applies the same drop prefixes and infers numeric typing from
  the rows, so a schema-less estate produces the same shape as a seeded one. A
  test writes a table file with rows and no columns and asserts both.

All 46 mock tests pass (node --test sas/mocks/test/).
2026-11-05 09:39:25 +00:00
2026-05-01 11:46:10 +01:00
2023-07-13 13:44:05 +02:00
2026-10-29 16:32:45 +00:00
2023-07-25 09:09:57 +01: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%