Compare commits

..

9 Commits

Author SHA1 Message Date
semantic-release-bot 3be33186bc chore(release): 7.5.0 [skip ci]
# [7.5.0](https://git.datacontroller.io/dc/dc/compare/v7.4.1...v7.5.0) (2026-04-03)

### Bug Fixes

* add workflow audits, update deps ([66e98a9](66e98a96cb))
* allow CSV uploads with licence row limit ([5b260e4](5b260e4915)), closes [#213](#213)
* bumping cli and pinning versions in .npmrc ([80039f4](80039f4876))
* guard CSV upload with fileUpload licence flag ([ed40df6](ed40df6295))
* parse embed param from window.location.hash for hash router compatibility ([0269c24](0269c2421d))
* quote CSV char values.  Closes [#215](#215) ([d9980e8](d9980e866d))
* resolve outer promise in parseCsvFile for non-WLATIN1 path ([4ee15e1](4ee15e1b6e))
* use XLSX for CSV row truncation to handle new lines in values ([6d590c0](6d590c050d))

### Features

* add embed URL parameter to hide header and back button ([b0dc441](b0dc441d68)), closes [#214](#214)
* add target libref input to config download ([a89657b](a89657b0b8)), closes [#212](#212)
* export config service to allow dclib swapping.  Closes [#212](#212) ([326c26f](326c26fddf))
2026-04-03 11:06:36 +00:00
allan 1a7f950ae2 Merge pull request 'feat: enabling dclib switching when exporting config' (#220) from issue212 into main
Release / Build-production-and-ng-test (push) Successful in 3m39s
Release / Build-and-test-development (push) Successful in 9m55s
Release / release (push) Successful in 7m46s
Reviewed-on: #220
2026-04-03 10:49:43 +00:00
allan 8924dc8ab1 chore: merge buid.yaml
Build / Build-and-ng-test (pull_request) Successful in 3m58s
Build / Build-and-test-development (pull_request) Successful in 10m3s
Lighthouse Checks / lighthouse (pull_request) Successful in 18m46s
2026-04-03 10:30:05 +00:00
sead 2c2901b537 chore: rever upload artifacts actions version
Build / Build-and-ng-test (pull_request) Successful in 4m3s
Build / Build-and-test-development (pull_request) Successful in 10m0s
Lighthouse Checks / lighthouse (pull_request) Successful in 18m24s
2026-04-03 10:32:28 +02:00
sead 2cae7ea638 chore: improve CI workflows
Build / Build-and-ng-test (pull_request) Successful in 4m3s
Build / Build-and-test-development (pull_request) Failing after 10m17s
Lighthouse Checks / lighthouse (pull_request) Failing after 18m31s
2026-04-03 09:36:39 +02:00
sead 66e98a96cb fix: add workflow audits, update deps
Build / Build-and-ng-test (pull_request) Successful in 4m2s
Build / Build-and-test-development (pull_request) Successful in 10m19s
Lighthouse Checks / lighthouse (24.5.0) (pull_request) Successful in 18m53s
2026-04-03 09:10:49 +02:00
allan 0b0db1c543 chore: run audit check in build.yaml as well as release.yaml
Build / Build-and-ng-test (pull_request) Failing after 1m31s
Build / Build-and-test-development (pull_request) Successful in 10m23s
Lighthouse Checks / lighthouse (24.5.0) (pull_request) Successful in 19m32s
2026-04-03 01:18:54 +00:00
allan 80039f4876 fix: bumping cli and pinning versions in .npmrc
Build / Build-and-ng-test (pull_request) Successful in 3m51s
Build / Build-and-test-development (pull_request) Successful in 10m9s
Lighthouse Checks / lighthouse (24.5.0) (pull_request) Successful in 19m11s
2026-04-03 02:02:05 +01:00
allan 326c26fddf feat: export config service to allow dclib swapping. Closes #212 2026-04-03 02:01:44 +01:00
12 changed files with 186 additions and 136 deletions
+43 -35
View File
@@ -2,32 +2,31 @@ name: Build
run-name: Running Lint Check and Licence checker on Pull Request run-name: Running Lint Check and Licence checker on Pull Request
on: [pull_request] on: [pull_request]
env:
NODE_VERSION: '24.5.0'
jobs: jobs:
Build-and-ng-test: Build-and-ng-test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
node-version: 24.5.0 node-version: ${{ env.NODE_VERSION }}
- name: Install Google Chrome - name: Install Google Chrome
run: | run: |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list
apt-get update apt-get update
apt-get install -y google-chrome-stable xvfb wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
apt install -y ./google-chrome*.deb
- name: Write .npmrc file - name: Write .npmrc file
run: echo "$NPMRC" > client/.npmrc run: echo "$NPMRC" >> client/.npmrc
shell: bash shell: bash
env: env:
NPMRC: ${{ secrets.NPMRC}} NPMRC: ${{ secrets.NPMRC}}
- name: Lint check
run: npm run lint:check
- name: Install dependencies - name: Install dependencies
run: | run: |
cd client cd client
@@ -35,6 +34,18 @@ jobs:
echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg
npm ci npm ci
- name: Check audit
# Audit should fail and stop the CI if critical vulnerability found
run: |
npm audit --audit-level=critical --omit=dev
cd ./sas
npm audit --audit-level=critical --omit=dev
cd ../client
npm audit --audit-level=critical --omit=dev
- name: Lint check
run: npm run lint:check
- name: Licence checker - name: Licence checker
run: | run: |
cd client cd client
@@ -52,26 +63,27 @@ jobs:
Build-and-test-development: Build-and-test-development:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: Build-production-and-ng-test needs: Build-and-ng-test
env:
CHROME_BIN: /usr/bin/google-chrome
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
node-version: 24.5.0 node-version: ${{ env.NODE_VERSION }}
- name: Write .npmrc file - name: Write .npmrc file
run: | run: |
touch client/.npmrc touch client/.npmrc
echo '${{ secrets.NPMRC}}' > client/.npmrc echo '${{ secrets.NPMRC}}' > client/.npmrc
- run: apt-get update - name: Install system dependencies
- run: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb run: |
- run: apt install -y ./google-chrome*.deb; apt-get update
- run: export CHROME_BIN=/usr/bin/google-chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
- run: apt-get update -y apt install -y ./google-chrome*.deb
- run: apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2t64 libxtst6 xauth xvfb apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2t64 libxtst6 xauth xvfb jq zip
- run: apt -y install jq
- name: Write cypress credentials - name: Write cypress credentials
run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json
@@ -86,17 +98,18 @@ jobs:
echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg
npm ci npm ci
# Install pm2 and prepare SASJS server - name: Setup and start SASjs server
- run: npm i -g pm2 run: |
- run: curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip npm i -g pm2
- run: unzip linux.zip curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip
- run: touch .env unzip linux.zip
- run: echo RUN_TIMES=js >> .env touch .env
- run: echo NODE_PATH=node >> .env echo RUN_TIMES=js >> .env
- run: echo CORS=enable >> .env echo NODE_PATH=node >> .env
- run: echo WHITELIST=http://localhost:4200 >> .env echo CORS=enable >> .env
- run: cat .env echo WHITELIST=http://localhost:4200 >> .env
- run: pm2 start api-linux --wait-ready cat .env
pm2 start api-linux --wait-ready
- name: Deploy mocked services - name: Deploy mocked services
run: | run: |
@@ -106,11 +119,6 @@ jobs:
sasjs cbd -t server-ci sasjs cbd -t server-ci
# sasjs request services/admin/makedata -t server-ci -d ./deploy/makeData4GL.json -c ./deploy/requestConfig.json -o ./output.json # sasjs request services/admin/makedata -t server-ci -d ./deploy/makeData4GL.json -c ./deploy/requestConfig.json -o ./output.json
- name: Install ZIP
run: |
apt-get update
apt-get install zip
- name: Prepare and run frontend and cypress - name: Prepare and run frontend and cypress
run: | run: |
cd ./client cd ./client
+14 -27
View File
@@ -2,38 +2,31 @@ name: Lighthouse Checks
run-name: Running Lighthouse Performance and Accessibility Checks on Pull Request run-name: Running Lighthouse Performance and Accessibility Checks on Pull Request
on: [pull_request] on: [pull_request]
env:
NODE_VERSION: '24.5.0'
jobs: jobs:
lighthouse: lighthouse:
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
matrix:
node-version: [24.5.0]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ env.NODE_VERSION }}
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: ${{ matrix.node-version }} node-version: ${{ env.NODE_VERSION }}
- name: Install Google Chrome - name: Install Google Chrome
run: | run: |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list
apt-get update apt-get update
apt-get install -y google-chrome-stable xvfb wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
apt install -y ./google-chrome*.deb
- name: Install pm2 for process management - name: Install global packages
run: npm i -g pm2 run: npm i -g pm2 @sasjs/cli wait-on
- name: Install @sasjs/cli - name: Setup and start SASjs server
run: npm i -g @sasjs/cli
- name: Install wait-on globally
run: npm install -g wait-on
- name: Create .env file for sasjs/server
run: | run: |
touch .env touch .env
echo RUN_TIMES=js >> .env echo RUN_TIMES=js >> .env
@@ -41,15 +34,9 @@ jobs:
echo CORS=enable >> .env echo CORS=enable >> .env
echo WHITELIST=http://localhost:4200 >> .env echo WHITELIST=http://localhost:4200 >> .env
cat .env cat .env
curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip
- name: Download sasjs/server package from github using curl unzip linux.zip
run: curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip pm2 start api-linux --wait-ready
- name: Unzip downloaded package
run: unzip linux.zip
- name: Run sasjs server
run: pm2 start api-linux --wait-ready
- name: Write .npmrc file - name: Write .npmrc file
run: echo "$NPMRC" > client/.npmrc run: echo "$NPMRC" > client/.npmrc
+36 -41
View File
@@ -5,15 +5,20 @@ on:
branches: branches:
- main - main
env:
NODE_VERSION: '24.5.0'
jobs: jobs:
Build-production-and-ng-test: Build-production-and-ng-test:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
CHROME_BIN: /usr/bin/google-chrome
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
node-version: 24.5.0 node-version: ${{ env.NODE_VERSION }}
- name: Write .npmrc file - name: Write .npmrc file
run: | run: |
@@ -24,8 +29,7 @@ jobs:
run: | run: |
apt-get update apt-get update
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
apt install -y ./google-chrome*.deb; apt install -y ./google-chrome*.deb
export CHROME_BIN=/usr/bin/google-chrome
- name: Write cypress credentials - name: Write cypress credentials
run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json
@@ -43,9 +47,9 @@ jobs:
- name: Check audit - name: Check audit
# Audit should fail and stop the CI if critical vulnerability found # Audit should fail and stop the CI if critical vulnerability found
run: | run: |
npm audit --audit-level=critical --omit=dev npm audit --omit=dev
cd ./sas cd ./sas
npm audit --audit-level=critical --omit=dev npm audit --omit=dev
cd ../client cd ../client
npm audit --audit-level=critical --omit=dev npm audit --audit-level=critical --omit=dev
@@ -63,25 +67,26 @@ jobs:
Build-and-test-development: Build-and-test-development:
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: Build-production-and-ng-test needs: Build-production-and-ng-test
env:
CHROME_BIN: /usr/bin/google-chrome
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
node-version: 24.5.0 node-version: ${{ env.NODE_VERSION }}
- name: Write .npmrc file - name: Write .npmrc file
run: | run: |
touch client/.npmrc touch client/.npmrc
echo '${{ secrets.NPMRC}}' > client/.npmrc echo '${{ secrets.NPMRC}}' > client/.npmrc
- run: apt-get update - name: Install system dependencies
- run: wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb run: |
- run: apt install -y ./google-chrome*.deb; apt-get update
- run: export CHROME_BIN=/usr/bin/google-chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
- run: apt-get update -y apt install -y ./google-chrome*.deb
- run: apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2t64 libxtst6 xauth xvfb apt-get -y install libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2t64 libxtst6 xauth xvfb jq zip
- run: apt -y install jq
- name: Write cypress credentials - name: Write cypress credentials
run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json run: echo "$CYPRESS_CREDS" > ./client/cypress.env.json
@@ -96,17 +101,18 @@ jobs:
echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg
npm ci npm ci
# Install pm2 and prepare SASJS server - name: Setup and start SASjs server
- run: npm i -g pm2 run: |
- run: curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip npm i -g pm2
- run: unzip linux.zip curl -L https://github.com/sasjs/server/releases/latest/download/linux.zip > linux.zip
- run: touch .env unzip linux.zip
- run: echo RUN_TIMES=js >> .env touch .env
- run: echo NODE_PATH=node >> .env echo RUN_TIMES=js >> .env
- run: echo CORS=enable >> .env echo NODE_PATH=node >> .env
- run: echo WHITELIST=http://localhost:4200 >> .env echo CORS=enable >> .env
- run: cat .env echo WHITELIST=http://localhost:4200 >> .env
- run: pm2 start api-linux --wait-ready cat .env
pm2 start api-linux --wait-ready
- name: Deploy mocked services - name: Deploy mocked services
run: | run: |
@@ -116,11 +122,6 @@ jobs:
sasjs cbd -t server-ci sasjs cbd -t server-ci
# sasjs request services/admin/makedata -t server-ci -d ./deploy/makeData4GL.json -c ./deploy/requestConfig.json -o ./output.json # sasjs request services/admin/makedata -t server-ci -d ./deploy/makeData4GL.json -c ./deploy/requestConfig.json -o ./output.json
- name: Install ZIP
run: |
apt-get update
apt-get install zip
- name: Prepare and run frontend and cypress - name: Prepare and run frontend and cypress
run: | run: |
cd ./client cd ./client
@@ -155,10 +156,10 @@ jobs:
needs: [Build-production-and-ng-test, Build-and-test-development] needs: [Build-production-and-ng-test, Build-and-test-development]
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-node@v4 - uses: actions/setup-node@v4
with: with:
node-version: 24.5.0 node-version: ${{ env.NODE_VERSION }}
- name: Write .npmrc file - name: Write .npmrc file
run: | run: |
@@ -168,17 +169,11 @@ jobs:
env: env:
NPMRC: ${{ secrets.NPMRC}} NPMRC: ${{ secrets.NPMRC}}
- name: Install packages - name: Install system packages
run: | run: |
apt-get update apt-get update
apt-get install zip -y apt-get install -y zip jq doxygen
# sasjs cli is used to compile & build the SAS services
npm i -g @sasjs/cli npm i -g @sasjs/cli
# jq is used to parse the release JSON
apt-get install jq -y
# doxygen is used for the SASJS docs
apt-get update
apt-get install doxygen -y
- name: Frontend Preliminary Build - name: Frontend Preliminary Build
description: We want to prevent creating empty release if frontend fails description: We want to prevent creating empty release if frontend fails
+2
View File
@@ -1 +1,3 @@
legacy-peer-deps=true legacy-peer-deps=true
ignore-scripts=true
save-exact=true
+21
View File
@@ -1,3 +1,24 @@
# [7.5.0](https://git.datacontroller.io/dc/dc/compare/v7.4.1...v7.5.0) (2026-04-03)
### Bug Fixes
* add workflow audits, update deps ([66e98a9](https://git.datacontroller.io/dc/dc/commit/66e98a96cbd092e762b94a04660f8e17ca003ceb))
* allow CSV uploads with licence row limit ([5b260e4](https://git.datacontroller.io/dc/dc/commit/5b260e49153dd85bc0023ad94d8a5f57b8ffa6dc)), closes [#213](https://git.datacontroller.io/dc/dc/issues/213)
* bumping cli and pinning versions in .npmrc ([80039f4](https://git.datacontroller.io/dc/dc/commit/80039f4876c8e09dc477678e1eff58329094c9e9))
* guard CSV upload with fileUpload licence flag ([ed40df6](https://git.datacontroller.io/dc/dc/commit/ed40df62953c3055770b5cbf50738f4a48b943cd))
* parse embed param from window.location.hash for hash router compatibility ([0269c24](https://git.datacontroller.io/dc/dc/commit/0269c2421db245f7f5405678605cb4d4587e2a67))
* quote CSV char values. Closes [#215](https://git.datacontroller.io/dc/dc/issues/215) ([d9980e8](https://git.datacontroller.io/dc/dc/commit/d9980e866d1a2fe7a731ff279d73accd35003e67))
* resolve outer promise in parseCsvFile for non-WLATIN1 path ([4ee15e1](https://git.datacontroller.io/dc/dc/commit/4ee15e1b6e83f27f279fc345e6998452a8f64d7e))
* use XLSX for CSV row truncation to handle new lines in values ([6d590c0](https://git.datacontroller.io/dc/dc/commit/6d590c050dcd593a73464fae5604f774f016b10d))
### Features
* add embed URL parameter to hide header and back button ([b0dc441](https://git.datacontroller.io/dc/dc/commit/b0dc441d681369e06eee58288dbdbb236f930bdc)), closes [#214](https://git.datacontroller.io/dc/dc/issues/214)
* add target libref input to config download ([a89657b](https://git.datacontroller.io/dc/dc/commit/a89657b0b81b9c531f64c0dda2714b4eb16c4bc9)), closes [#212](https://git.datacontroller.io/dc/dc/issues/212)
* export config service to allow dclib swapping. Closes [#212](https://git.datacontroller.io/dc/dc/issues/212) ([326c26f](https://git.datacontroller.io/dc/dc/commit/326c26fddfa88a0dc4ca79d3bd0c77c4d807f37c))
## [7.4.1](https://git.datacontroller.io/dc/dc/compare/v7.4.0...v7.4.1) (2026-03-12) ## [7.4.1](https://git.datacontroller.io/dc/dc/compare/v7.4.0...v7.4.1) (2026-03-12)
+7 -7
View File
@@ -37,7 +37,7 @@
"hyperformula": "^2.5.0", "hyperformula": "^2.5.0",
"iconv-lite": "^0.5.0", "iconv-lite": "^0.5.0",
"jquery-datetimepicker": "^2.5.21", "jquery-datetimepicker": "^2.5.21",
"jsrsasign": "^11.1.0", "jsrsasign": "11.1.1",
"marked": "^5.0.0", "marked": "^5.0.0",
"moment": "^2.30.1", "moment": "^2.30.1",
"ngx-clipboard": "^16.0.0", "ngx-clipboard": "^16.0.0",
@@ -18234,9 +18234,9 @@
} }
}, },
"node_modules/jsrsasign": { "node_modules/jsrsasign": {
"version": "11.1.0", "version": "11.1.1",
"resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.0.tgz", "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.1.tgz",
"integrity": "sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==", "integrity": "sha512-6w95OOXH8DNeGxakqLndBEqqwQ6A70zGaky1oxfg8WVLWOnghTfJsc5Tknx+Z88MHSb1bGLcqQHImOF8Lk22XA==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"url": "https://github.com/kjur/jsrsasign#donations" "url": "https://github.com/kjur/jsrsasign#donations"
@@ -25444,9 +25444,9 @@
} }
}, },
"node_modules/undici-types": { "node_modules/undici-types": {
"version": "7.16.0", "version": "7.18.2",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
"integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"optional": true "optional": true
+1 -1
View File
@@ -67,7 +67,7 @@
"hyperformula": "^2.5.0", "hyperformula": "^2.5.0",
"iconv-lite": "^0.5.0", "iconv-lite": "^0.5.0",
"jquery-datetimepicker": "^2.5.21", "jquery-datetimepicker": "^2.5.21",
"jsrsasign": "^11.1.0", "jsrsasign": "11.1.1",
"marked": "^5.0.0", "marked": "^5.0.0",
"moment": "^2.30.1", "moment": "^2.30.1",
"ngx-clipboard": "^16.0.0", "ngx-clipboard": "^16.0.0",
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "dcfrontend", "name": "dcfrontend",
"version": "7.4.1", "version": "7.5.0",
"description": "Data Controller", "description": "Data Controller",
"devDependencies": { "devDependencies": {
"@saithodev/semantic-release-gitea": "^2.1.0", "@saithodev/semantic-release-gitea": "^2.1.0",
+2
View File
@@ -0,0 +1,2 @@
ignore-scripts=true
save-exact=true
+12 -12
View File
@@ -6,8 +6,8 @@
"": { "": {
"name": "dc-sas", "name": "dc-sas",
"dependencies": { "dependencies": {
"@sasjs/cli": "^4.15.0", "@sasjs/cli": "4.15.2",
"@sasjs/core": "^4.62.0" "@sasjs/core": "4.63.0"
} }
}, },
"node_modules/@asamuzakjp/css-color": { "node_modules/@asamuzakjp/css-color": {
@@ -251,13 +251,13 @@
} }
}, },
"node_modules/@sasjs/cli": { "node_modules/@sasjs/cli": {
"version": "4.15.0", "version": "4.15.2",
"resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-4.15.0.tgz", "resolved": "https://registry.npmjs.org/@sasjs/cli/-/cli-4.15.2.tgz",
"integrity": "sha512-lVKzm8+4b9VSqbchfLnzyNm53cKDZfqSM8KU7izD/JDBsuATSZtjLo61iNenZaPg9d3WXglb1jf2ASbVKbXxUQ==", "integrity": "sha512-lY9H+HIquLAPXuhk6ov/xyBooERvefT6oiwNRaQ6DHMMFE4cgPvrUH5s3RRkLI2+lET0M0hPPbuaZ4w9yFIDuA==",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@sasjs/adapter": "4.16.3", "@sasjs/adapter": "4.16.3",
"@sasjs/core": "4.62.0", "@sasjs/core": "4.63.0",
"@sasjs/lint": "2.4.3", "@sasjs/lint": "2.4.3",
"@sasjs/utils": "3.5.6", "@sasjs/utils": "3.5.6",
"adm-zip": "0.5.10", "adm-zip": "0.5.10",
@@ -317,9 +317,9 @@
} }
}, },
"node_modules/@sasjs/core": { "node_modules/@sasjs/core": {
"version": "4.62.0", "version": "4.63.0",
"resolved": "https://registry.npmjs.org/@sasjs/core/-/core-4.62.0.tgz", "resolved": "https://registry.npmjs.org/@sasjs/core/-/core-4.63.0.tgz",
"integrity": "sha512-xMWeZbxlvuCP0B9fnSTgSFbSiA0hiKDpTua8wb0ghMUOl+dnh/XF+BYgrHhWhPL9j0+k5d8mJejLmf/l/txpzg==", "integrity": "sha512-NlIihA4BbP+mveAbb7A/hgnrZEpJKKIkq0v4SSDdYXg8YYdKAdyTK8K+6FNPwp+U6hixQCKVX8oCA1DIUppLqA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@sasjs/lint": { "node_modules/@sasjs/lint": {
@@ -1820,9 +1820,9 @@
} }
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "2.3.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=8.6" "node": ">=8.6"
+2 -2
View File
@@ -28,7 +28,7 @@
}, },
"private": true, "private": true,
"dependencies": { "dependencies": {
"@sasjs/cli": "^4.15.0", "@sasjs/cli": "4.15.2",
"@sasjs/core": "^4.62.0" "@sasjs/core": "4.63.0"
} }
} }
+45 -10
View File
@@ -9,10 +9,12 @@
<h4> SAS Macros </h4> <h4> SAS Macros </h4>
@li mf_getuser.sas @li mf_getuser.sas
@li mf_nobs.sas @li mf_nobs.sas
@li mp_ds2cards.sas
@li mp_abort.sas @li mp_abort.sas
@li mp_binarycopy.sas @li mp_binarycopy.sas
@li mp_ds2cards.sas
@li mp_ds2csv.sas
@li mp_streamfile.sas @li mp_streamfile.sas
@li mp_validatecol.sas
@author 4GL Apps Ltd @author 4GL Apps Ltd
@copyright 4GL Apps Ltd. This code may only be used within Data Controller @copyright 4GL Apps Ltd. This code may only be used within Data Controller
@@ -21,23 +23,33 @@
**/ **/
%global dclib islib newlib;
%mpeinit() %mpeinit()
data _null_;
newlib=coalescec(symget('dclib'),"&mpelib");
%mp_validatecol(newlib,ISLIB,islib)
call symputx('islib',islib);
call symputx('newlib',upcase(newlib));
putlog (_all_)(=);
run;
%mp_abort(iftrue= (&islib ne 1)
,mac=&_program
,msg=%nrstr(&newlib is not a valid libref)
)
%let work=%sysfunc(pathname(work)); %let work=%sysfunc(pathname(work));
/* excel does not work in all envs */
%let mime=application/vnd.ms-excel;
%let dbms=EXCEL;
%let mime=application/csv; %let mime=application/csv;
%let dbms=CSV; %let dbms=CSV;
%let ext=csv; %let ext=csv;
%macro conditional_export(ds); %macro conditional_export(ds);
%if %mf_nobs(&ds)>0 %then %do; %if %mf_nobs(&ds)>0 %then %do;
PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext" /* cannot use PROC EXPORT as we need to wrap all csv char values in quotes */
DBMS=&dbms REPLACE; /* cannot use excel as it does not work consistently in all SAS envs */
RUN; %mp_ds2csv(&ds,outfile="&work/&newlib..&ds..csv",headerformat=NAME)
ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime"; ods package(ProdOutput) add file="&work/&newlib..&ds..&ext" mimetype="&mime";
%end; %end;
%mp_abort(iftrue= (&syscc ne 0) %mp_abort(iftrue= (&syscc ne 0)
,mac=&_program ,mac=&_program
@@ -52,6 +64,7 @@ data MPE_ALERTS;
set &mpelib..MPE_ALERTS; set &mpelib..MPE_ALERTS;
where &dc_dttmtfmt. le tx_to; where &dc_dttmtfmt. le tx_to;
drop tx_: ; drop tx_: ;
if alert_lib="&mpelib" then alert_lib="&newlib";
run; run;
%conditional_export(MPE_ALERTS) %conditional_export(MPE_ALERTS)
@@ -61,6 +74,7 @@ data MPE_COLUMN_LEVEL_SECURITY;
where &dc_dttmtfmt. le tx_to; where &dc_dttmtfmt. le tx_to;
where also CLS_LIBREF ne "&mpelib"; where also CLS_LIBREF ne "&mpelib";
drop tx_: ; drop tx_: ;
CLS_LIBREF="&newlib";
run; run;
%conditional_export(MPE_COLUMN_LEVEL_SECURITY) %conditional_export(MPE_COLUMN_LEVEL_SECURITY)
@@ -68,6 +82,7 @@ data MPE_CONFIG;
set &mpelib..MPE_CONFIG; set &mpelib..MPE_CONFIG;
where &dc_dttmtfmt. le tx_to; where &dc_dttmtfmt. le tx_to;
drop tx_: ; drop tx_: ;
if var_name='DC_MACROS' then var_value=tranwrd(var_value,"&mpelib","&newlib");
run; run;
%conditional_export(MPE_CONFIG) %conditional_export(MPE_CONFIG)
@@ -93,6 +108,7 @@ data MPE_EXCEL_CONFIG;
set &mpelib..MPE_EXCEL_CONFIG; set &mpelib..MPE_EXCEL_CONFIG;
where &dc_dttmtfmt. le tx_to; where &dc_dttmtfmt. le tx_to;
drop tx_: ; drop tx_: ;
if xl_libref="&mpelib" then xl_libref="&newlib";
run; run;
%conditional_export(MPE_EXCEL_CONFIG) %conditional_export(MPE_EXCEL_CONFIG)
@@ -107,6 +123,7 @@ data MPE_ROW_LEVEL_SECURITY;
set &mpelib..MPE_ROW_LEVEL_SECURITY; set &mpelib..MPE_ROW_LEVEL_SECURITY;
where &dc_dttmtfmt. le tx_to; where &dc_dttmtfmt. le tx_to;
drop tx_: ; drop tx_: ;
if rls_libref="&mpelib" then rls_libref="&newlib";
run; run;
%conditional_export(MPE_ROW_LEVEL_SECURITY) %conditional_export(MPE_ROW_LEVEL_SECURITY)
@@ -115,6 +132,7 @@ data MPE_SECURITY;
set &mpelib..MPE_SECURITY; set &mpelib..MPE_SECURITY;
where &dc_dttmtfmt. le TX_TO; where &dc_dttmtfmt. le TX_TO;
drop tx_: ; drop tx_: ;
if libref="&mpelib" then libref="&newlib";
run; run;
%conditional_export(MPE_SECURITY) %conditional_export(MPE_SECURITY)
@@ -142,6 +160,23 @@ data MPE_VALIDATIONS;
run; run;
%conditional_export(MPE_VALIDATIONS) %conditional_export(MPE_VALIDATIONS)
data MPE_XLMAP_INFO;
set &mpelib..MPE_XLMAP_INFO;
where &dc_dttmtfmt. le TX_TO;
drop tx_: ;
if XLMAP_TARGETLIBDS=:"&mpelib.." then
XLMAP_TARGETLIBDS=tranwrd(XLMAP_TARGETLIBDS,"&mpelib..","&newlib..");
run;
%conditional_export(MPE_XLMAP_INFO)
data MPE_XLMAP_RULES;
set &mpelib..MPE_XLMAP_RULES;
where &dc_dttmtfmt. le TX_TO;
drop tx_: ;
run;
%conditional_export(MPE_XLMAP_RULES)
/* finish up zip file */ /* finish up zip file */
ods package(ProdOutput) publish archive properties ods package(ProdOutput) publish archive properties
(archive_name="DCBACKUP.zip" archive_path="&work"); (archive_name="DCBACKUP.zip" archive_path="&work");