Compare commits

...

82 Commits
v6.8.3 ... main

Author SHA1 Message Date
semantic-release-bot
522979835c chore(release): 6.12.0 [skip ci]
# [6.12.0](https://git.datacontroller.io/dc/dc/compare/v6.11.1...v6.12.0) (2024-09-02)

### Bug Fixes

* added appLoc to the system page ([dd2138a](dd2138ac5e))
* bumping core for passthrough fix, [#124](#124) ([caa9854](caa9854ff0))
* excel with password flow, introducing web worker for XLSX.read ([a3ce367](a3ce367950))
* implemented the new request wrapper usage, added XLSX read with a Web Worker, multi load preview data, full height ([4218da9](4218da91cd))
* **multi load:** xlsx read file ahead of time, while user choose datasets ([6547461](6547461637))
* refactored adapter request wrapper function to return job log as well ([67436f4](67436f4ff9))
* using temporary names for temporary tables ([ce50365](ce503653cd)), closes [#124](#124)

### Features

* searching data in excel files using new algorithm (massive performance improvement) ([bbb725c](bbb725c64c))
2024-09-02 07:50:00 +00:00
fe049256b5 Merge pull request 'Multi Load Tests Fix (timing issues)' (#126) from multi-load-tests into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 3m54s
Release / Build-and-test-development (push) Successful in 8m3s
Release / release (push) Successful in 8m24s
Reviewed-on: #126
2024-09-02 07:30:55 +00:00
Mihajlo Medjedovic
31d1870198 chore: removed log
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m2s
2024-09-02 09:29:48 +02:00
Mihajlo Medjedovic
6edf0dfb31 chore: multi load test fix (timing issues) 2024-09-02 09:29:22 +02:00
3bf3dceaa2 Merge pull request 'feat: searching data in excel files using new algorithm (massive performance improvement)' (#123) from issue-120 into main
Some checks failed
Release / Build-production-and-ng-test (push) Successful in 4m3s
Release / Build-and-test-development (push) Failing after 8m4s
Release / release (push) Has been skipped
Reviewed-on: #123
2024-08-31 14:23:48 +00:00
allan
ce503653cd fix: using temporary names for temporary tables
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m6s
Closes #124
2024-08-31 16:19:04 +02:00
allan
caa9854ff0 fix: bumping core for passthrough fix, #124 2024-08-31 16:06:46 +02:00
Mihajlo Medjedovic
20c3a338c5 style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m58s
2024-08-12 10:33:54 +02:00
Mihajlo Medjedovic
6547461637 fix(multi load): xlsx read file ahead of time, while user choose datasets
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 44s
2024-08-09 16:09:53 +02:00
Mihajlo Medjedovic
bbb725c64c feat: searching data in excel files using new algorithm (massive performance improvement)
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 45s
2024-08-07 17:53:52 +02:00
403d08c86a Merge pull request 'XLSX Performance Improvements (multi load)' (#118) from multi-load-performance into main
Some checks failed
Release / Build-production-and-ng-test (push) Successful in 3m55s
Release / Build-and-test-development (push) Failing after 8m2s
Release / release (push) Has been skipped
Reviewed-on: #118
2024-07-26 11:34:20 +00:00
Mihajlo Medjedovic
f66d9f511a chore(git): Merge branch 'multi-load-performance' of ssh://git.datacontroller.io:29419/dc/dc into multi-load-performance
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m58s
2024-07-08 10:15:38 +02:00
Mihajlo Medjedovic
dd2138ac5e fix: added appLoc to the system page 2024-07-08 10:15:24 +02:00
74e9979c67 Merge branch 'main' into multi-load-performance
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m58s
2024-07-05 13:46:47 +00:00
Mihajlo Medjedovic
ddc22e5200 style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m54s
2024-07-05 15:46:16 +02:00
Mihajlo Medjedovic
4218da91cd fix: implemented the new request wrapper usage, added XLSX read with a Web Worker, multi load preview data, full height
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 43s
2024-07-05 15:45:06 +02:00
Mihajlo Medjedovic
857b94f44f style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m58s
2024-07-03 18:01:01 +02:00
Mihajlo Medjedovic
a3ce367950 fix: excel with password flow, introducing web worker for XLSX.read 2024-07-03 18:00:41 +02:00
semantic-release-bot
75dac54591 chore(release): 6.11.1 [skip ci]
## [6.11.1](https://git.datacontroller.io/dc/dc/compare/v6.11.0...v6.11.1) (2024-07-02)

### Bug Fixes

* adding SYSSITE, part of [#116](#116) ([a156c01](a156c0111b))
* ensuring review_reason_txt in output.  Closes [#117](#117) ([e5d93fd](e5d93fd7d6))
2024-07-02 15:19:21 +00:00
a156c0111b fix: adding SYSSITE, part of #116
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 3m54s
Release / Build-and-test-development (push) Successful in 8m12s
Release / release (push) Successful in 8m25s
2024-07-02 16:03:26 +01:00
e5d93fd7d6 fix: ensuring review_reason_txt in output. Closes #117 2024-07-02 16:02:58 +01:00
Mihajlo Medjedovic
67436f4ff9 fix: refactored adapter request wrapper function to return job log as well 2024-07-02 15:54:59 +02:00
semantic-release-bot
b712f851a2 chore(release): 6.11.0 [skip ci]
# [6.11.0](https://git.datacontroller.io/dc/dc/compare/v6.10.1...v6.11.0) (2024-06-27)

### Bug Fixes

* addressing PR comments ([d94df7f](d94df7f0eb))
* **multi load:** fixed parsing algorithm reused for the multi load, the fix affects the normal upload as well. ([d4fee79](d4fee791a7))
* **multi load:** label rename ([fa04d7b](fa04d7bf4e))

### Features

* **multi load:** added HOT for user datasets input ([18363bb](18363bbbeb))
* **multi load:** implemented matching libds and parsing of the multiple sheets ([efcdc69](efcdc694dd))
* **multi load:** licence submit limits ([cffeab8](cffeab813d))
* **multi load:** multiple csv files ([4d27665](4d276657b3))
* **multi load:** refactored range find function, unlocking excel with password is reusable ([eb7c443](eb7c44333c))
* **multi load:** submitting multiple found tables at once ([5deba44](5deba44d2b))
2024-06-27 09:56:27 +00:00
e2c0b8da86 Merge pull request 'feat(multi load): refactored range find function, unlocking excel with password is reusable' (#115) from issue99 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 3m49s
Release / Build-and-test-development (push) Successful in 8m9s
Release / release (push) Successful in 8m27s
Reviewed-on: #115
Reviewed-by: yury <yury@4gl.io>
Reviewed-by: allan <allan@4gl.io>
2024-06-27 09:40:45 +00:00
Mihajlo Medjedovic
1b4560061d style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m52s
2024-06-27 11:07:30 +02:00
Mihajlo Medjedovic
d94df7f0eb fix: addressing PR comments
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 43s
2024-06-27 11:00:19 +02:00
Mihajlo Medjedovic
fa04d7bf4e fix(multi load): label rename
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m56s
2024-06-26 16:19:04 +02:00
Mihajlo Medjedovic
4d4cabb465 style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 3m53s
2024-06-26 16:14:53 +02:00
Mihajlo Medjedovic
d4fee791a7 fix(multi load): fixed parsing algorithm reused for the multi load, the fix affects the normal upload as well. 2024-06-26 16:14:35 +02:00
Mihajlo Medjedovic
82c285e348 style: lint 2024-06-24 15:36:55 +02:00
Mihajlo Medjedovic
4d276657b3 feat(multi load): multiple csv files 2024-06-24 15:36:06 +02:00
Mihajlo Medjedovic
cffeab813d feat(multi load): licence submit limits
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 42s
Icons improvement, ux improvements, matched dataset link to edit table, empty table is visible on the left
2024-06-21 14:23:13 +02:00
Mihajlo Medjedovic
18363bbbeb feat(multi load): added HOT for user datasets input
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 51s
2024-06-20 14:11:20 +02:00
Mihajlo Medjedovic
6df7d8d2ba style: lint
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m45s
2024-06-18 00:38:01 +02:00
Mihajlo Medjedovic
5deba44d2b feat(multi load): submitting multiple found tables at once 2024-06-18 00:37:41 +02:00
Mihajlo Medjedovic
0a8b1e764c chore(licence checker): handsontable 14.4.0
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m41s
2024-06-14 15:52:27 +02:00
Mihajlo Medjedovic
fc52e8f41a style: lint
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m29s
2024-06-14 15:46:35 +02:00
Mihajlo Medjedovic
efcdc694dd feat(multi load): implemented matching libds and parsing of the multiple sheets 2024-06-14 15:46:15 +02:00
Mihajlo Medjedovic
eb7c44333c feat(multi load): refactored range find function, unlocking excel with password is reusable
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 52s
2024-06-13 12:59:26 +02:00
semantic-release-bot
3c62ff6913 chore(release): 6.10.1 [skip ci]
## [6.10.1](https://git.datacontroller.io/dc/dc/compare/v6.10.0...v6.10.1) (2024-06-07)

### Bug Fixes

* adding 60 more colours to crayons table. Closes [#112](#112) ([3521579](3521579dea))
* terms and conditions colours, editor on smaller screens show only icons ([e32d44b](e32d44b1bc))
2024-06-07 15:46:58 +00:00
f4f589af94 Merge pull request 'fix: adding 60 more colours to crayons table. Closes #112' (#114) from issue112 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m41s
Release / Build-and-test-development (push) Successful in 8m42s
Release / release (push) Successful in 10m11s
Reviewed-on: #114
2024-06-07 15:29:09 +00:00
3521579dea fix: adding 60 more colours to crayons table. Closes #112
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m45s
2024-06-07 16:23:40 +01:00
e97a6f52da Merge pull request 'fix: terms and conditions colours, editor on smaller screens show only icons' (#113) from issue111 into main
Some checks failed
Release / Build-and-test-development (push) Has been cancelled
Release / release (push) Has been cancelled
Release / Build-production-and-ng-test (push) Has been cancelled
Reviewed-on: #113
2024-06-07 15:22:00 +00:00
Mihajlo Medjedovic
3584aa35c7 chore: package-locks
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m49s
2024-06-07 17:07:23 +02:00
Mihajlo Medjedovic
b553520abe style: lint, package-locks
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 55s
2024-06-07 16:58:04 +02:00
Mihajlo Medjedovic
e32d44b1bc fix: terms and conditions colours, editor on smaller screens show only icons
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 52s
2024-06-07 16:34:47 +02:00
semantic-release-bot
105da1503f chore(release): 6.10.0 [skip ci]
# [6.10.0](https://git.datacontroller.io/dc/dc/compare/v6.9.0...v6.10.0) (2024-06-07)

### Features

* updated handsontable to v14 ([2f8d0b7](2f8d0b764a))
2024-06-07 08:58:45 +00:00
29298072e5 Merge pull request 'feat: updated handsontable to v14' (#110) from handonstable-14 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m39s
Release / Build-and-test-development (push) Successful in 8m44s
Release / release (push) Successful in 10m9s
Reviewed-on: #110
2024-06-07 08:40:54 +00:00
Mihajlo Medjedovic
154c10fee5 chore: licence checker
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m50s
2024-06-07 09:45:10 +02:00
7853f7cb6a Merge branch 'main' into handonstable-14
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m32s
2024-05-31 11:39:14 +00:00
semantic-release-bot
e54ecc8a35 chore(release): 6.9.0 [skip ci]
# [6.9.0](https://git.datacontroller.io/dc/dc/compare/v6.8.5...v6.9.0) (2024-05-31)

### Bug Fixes

* added colors.scss file, start of a refactor ([110ad9a](110ad9a6e9))
* added stealFocus directive ([9a79f37](9a79f37bf1))

### Features

* added app settings service to handle theme persistance, fix: optimised dark mode contrast ([35844e0](35844e0cf1))
* **dark mode:** clarity optimizations ([afa7e38](afa7e380aa))
* **dark mode:** lineage and metadata ([27907ed](27907ed00f))
* **dark mode:** refactoring clarity to enable dark mode, added toggle button ([5564aea](5564aea9c2))
* **dark mode:** removing custom css rules so clarity can handle dark/light modes. Handsontable css for dark mode ([2c0afd0](2c0afd0268))
2024-05-31 09:38:30 +00:00
d8b95c5739 Merge pull request 'Dark Mode' (#102) from issue98 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m35s
Release / Build-and-test-development (push) Successful in 8m31s
Release / release (push) Successful in 9m57s
Reviewed-on: #102
Reviewed-by: yury <yury@4gl.io>
2024-05-31 09:21:07 +00:00
Mihajlo Medjedovic
2f8d0b764a feat: updated handsontable to v14
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m17s
2024-05-30 23:35:05 +02:00
Mihajlo Medjedovic
d7732ed206 ci: fix
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m42s
2024-05-30 15:57:18 +02:00
Mihajlo Medjedovic
6e631cd9a5 ci: fix
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m43s
2024-05-30 15:53:51 +02:00
Mihajlo Medjedovic
0a9e5dd834 ci: fix
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m13s
2024-05-30 15:49:46 +02:00
Mihajlo Medjedovic
d14a4eaadd ci: fix
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m14s
2024-05-30 14:56:55 +02:00
Mihajlo Medjedovic
5f7c7fcc7b ci: fix
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m13s
2024-05-30 14:52:53 +02:00
Mihajlo Medjedovic
978f152ab6 ci: fix
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m39s
2024-05-30 14:46:10 +02:00
Mihajlo Medjedovic
68a2a606f3 ci: fix
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m14s
2024-05-30 14:22:01 +02:00
Mihajlo Medjedovic
bad43135d7 chore: sheet crypto package fix
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m16s
2024-05-30 14:11:54 +02:00
Mihajlo Medjedovic
110ad9a6e9 fix: added colors.scss file, start of a refactor
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m15s
2024-05-30 12:03:09 +02:00
Mihajlo Medjedovic
e98f288302 style: lint
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m16s
2024-05-30 09:47:38 +02:00
Mihajlo Medjedovic
9a79f37bf1 fix: added stealFocus directive 2024-05-30 09:47:08 +02:00
Mihajlo Medjedovic
85909cfc1e chore: prettier version
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m16s
2024-05-29 16:26:27 +02:00
Mihajlo Medjedovic
4330da520f style: lint
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m17s
2024-05-29 16:21:56 +02:00
Mihajlo Medjedovic
27907ed00f feat(dark mode): lineage and metadata 2024-05-29 16:21:28 +02:00
Mihajlo Medjedovic
31c90f3190 style: lint
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 1m15s
2024-05-29 14:36:17 +02:00
Mihajlo Medjedovic
35844e0cf1 feat: added app settings service to handle theme persistance, fix: optimised dark mode contrast 2024-05-29 14:35:43 +02:00
Mihajlo Medjedovic
afa7e380aa feat(dark mode): clarity optimizations
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 50s
2024-05-28 21:17:37 +02:00
cb9a5f0eb4 Merge branch 'main' into issue98
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 51s
2024-05-23 14:17:18 +00:00
Mihajlo Medjedovic
da522c557d chore(git): Merge branch 'issue98' of ssh://git.datacontroller.io:29419/dc/dc into issue98
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 51s
2024-05-23 16:16:57 +02:00
Mihajlo Medjedovic
2c0afd0268 feat(dark mode): removing custom css rules so clarity can handle dark/light modes. Handsontable css for dark mode 2024-05-23 16:16:47 +02:00
semantic-release-bot
20255c69c2 chore(release): 6.8.5 [skip ci]
## [6.8.5](https://git.datacontroller.io/dc/dc/compare/v6.8.4...v6.8.5) (2024-05-23)

### Bug Fixes

* bitemporal load issue [#105](#105) ([967698e](967698e4ce))
2024-05-23 11:34:51 +00:00
74f1c5416b Merge pull request 'fix: bitemporal load issue #105' (#108) from issue105 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m43s
Release / Build-and-test-development (push) Successful in 8m40s
Release / release (push) Successful in 10m6s
Reviewed-on: #108
2024-05-23 11:08:03 +00:00
feed7f1ded Merge branch 'main' into issue105
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m44s
2024-05-23 11:07:29 +00:00
967698e4ce fix: bitemporal load issue #105
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m49s
2024-05-23 12:07:11 +01:00
semantic-release-bot
71bd81ae47 chore(release): 6.8.4 [skip ci]
## [6.8.4](https://git.datacontroller.io/dc/dc/compare/v6.8.3...v6.8.4) (2024-05-22)

### Bug Fixes

* new approach to fixing [#105](#105) ([c11bd9a](c11bd9a2c5))
2024-05-22 16:56:15 +00:00
89a5153bb3 Merge pull request 'fix: new approach to fixing #105' (#106) from issue105 into main
All checks were successful
Release / Build-production-and-ng-test (push) Successful in 4m44s
Release / Build-and-test-development (push) Successful in 8m42s
Release / release (push) Successful in 10m14s
Reviewed-on: #106
2024-05-22 16:33:29 +00:00
c11bd9a2c5 fix: new approach to fixing #105
All checks were successful
Build / Build-and-ng-test (pull_request) Successful in 4m54s
2024-05-22 17:33:04 +01:00
59d46a9926 Merge branch 'main' into issue98
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 51s
2024-05-22 11:30:29 +00:00
Mihajlo Medjedovic
5564aea9c2 feat(dark mode): refactoring clarity to enable dark mode, added toggle button
Some checks failed
Build / Build-and-ng-test (pull_request) Failing after 51s
2024-05-08 16:51:01 +02:00
145 changed files with 6960 additions and 4419 deletions

View File

@ -8,9 +8,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 20.14.0
- name: Install Google Chrome
run: |
@ -31,11 +31,9 @@ jobs:
- name: Install dependencies
run: |
cd client
npm ci
# Decrypt and Install sheet
echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg
npm i ./libraries/sheet-crypto.tgz
# End
npm ci
- name: Licence checker
run: |

View File

@ -11,9 +11,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 20.14.0
- name: Write .npmrc file
run: |
@ -36,11 +36,9 @@ jobs:
- name: Install dependencies
run: |
cd client
npm ci
# Decrypt and Install sheet
echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg
npm i ./libraries/sheet-crypto.tgz
# End
npm ci
- name: Check audit
# Audit should fail and stop the CI if critical vulnerability found
@ -68,9 +66,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 20.14.0
- name: Write .npmrc file
run: |
@ -94,11 +92,9 @@ jobs:
- name: Install dependencies
run: |
cd client
npm ci
# Decrypt and Install sheet
echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg
npm i ./libraries/sheet-crypto.tgz
# End
npm ci
# Install pm2 and prepare SASJS server
- run: npm i -g pm2
@ -140,7 +136,7 @@ jobs:
replace-in-files --regex='"hosturl".*' --replacement='hosturl:"http://localhost:4200",' ./cypress.config.ts
cat ./cypress.config.ts
# Start frontend and run cypress
npm start & npx wait-on http://localhost:4200 && npx cypress run --browser chrome --spec "cypress/e2e/liveness.cy.ts,cypress/e2e/editor.cy.ts,cypress/e2e/excel.cy.ts,cypress/e2e/filtering.cy.ts,cypress/e2e/licensing.cy.ts"
npm start & npx wait-on http://localhost:4200 && npx cypress run --browser chrome --spec "cypress/e2e/liveness.cy.ts,cypress/e2e/editor.cy.ts,cypress/e2e/excel-multi-load.cy.ts,cypress/e2e/excel.cy.ts,cypress/e2e/filtering.cy.ts,cypress/e2e/licensing.cy.ts"
- name: Zip Cypress videos
if: always()
@ -160,9 +156,9 @@ jobs:
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 20.14.0
- name: Write .npmrc file
run: |
@ -188,11 +184,9 @@ jobs:
description: We want to prevent creating empty release if frontend fails
run: |
cd client
npm ci
# Decrypt and Install sheet
echo ${{ secrets.SHEET_PWD }} | gpg --batch --yes --passphrase-fd 0 ./libraries/sheet-crypto.tgz.gpg
npm i ./libraries/sheet-crypto.tgz
# End
npm ci
npm i webpack
npm run build

3
.gitignore vendored
View File

@ -11,8 +11,9 @@ client/cypress/screenshots
client/cypress/results
client/cypress/videos
client/documentation
client/sheet-crypto*
client/**/sheet-crypto.tgz
client/.nx
client/libraries/sheet-crypto.tgz
cypress.env.json
sasjsbuild
sasjsresults

View File

@ -1,3 +1,94 @@
# [6.12.0](https://git.datacontroller.io/dc/dc/compare/v6.11.1...v6.12.0) (2024-09-02)
### Bug Fixes
* added appLoc to the system page ([dd2138a](https://git.datacontroller.io/dc/dc/commit/dd2138ac5e6067de310e83d16fccc9b9764ba3ff))
* bumping core for passthrough fix, [#124](https://git.datacontroller.io/dc/dc/issues/124) ([caa9854](https://git.datacontroller.io/dc/dc/commit/caa9854ff0431ccbb6ff1d6d3509dc877362cceb))
* excel with password flow, introducing web worker for XLSX.read ([a3ce367](https://git.datacontroller.io/dc/dc/commit/a3ce36795007a4e3b6ac3499ffd119dc3758f387))
* implemented the new request wrapper usage, added XLSX read with a Web Worker, multi load preview data, full height ([4218da9](https://git.datacontroller.io/dc/dc/commit/4218da91cd193aa45346ad7e34ccc00ca89df4fb))
* **multi load:** xlsx read file ahead of time, while user choose datasets ([6547461](https://git.datacontroller.io/dc/dc/commit/65474616379e1dacc1329b3bdc5eb14f34428bb1))
* refactored adapter request wrapper function to return job log as well ([67436f4](https://git.datacontroller.io/dc/dc/commit/67436f4ff9bb4d77d5f897f47a3e3d472981f275))
* using temporary names for temporary tables ([ce50365](https://git.datacontroller.io/dc/dc/commit/ce503653cd9fc36f72fb172bd14816e07c792e14)), closes [#124](https://git.datacontroller.io/dc/dc/issues/124)
### Features
* searching data in excel files using new algorithm (massive performance improvement) ([bbb725c](https://git.datacontroller.io/dc/dc/commit/bbb725c64cc23ed701b189623992408c42fdde8f))
## [6.11.1](https://git.datacontroller.io/dc/dc/compare/v6.11.0...v6.11.1) (2024-07-02)
### Bug Fixes
* adding SYSSITE, part of [#116](https://git.datacontroller.io/dc/dc/issues/116) ([a156c01](https://git.datacontroller.io/dc/dc/commit/a156c0111b3de5e3744e38d377d6e9aa09915803))
* ensuring review_reason_txt in output. Closes [#117](https://git.datacontroller.io/dc/dc/issues/117) ([e5d93fd](https://git.datacontroller.io/dc/dc/commit/e5d93fd7d6d86bc47ff56664bd812b4d9d0749a5))
# [6.11.0](https://git.datacontroller.io/dc/dc/compare/v6.10.1...v6.11.0) (2024-06-27)
### Bug Fixes
* addressing PR comments ([d94df7f](https://git.datacontroller.io/dc/dc/commit/d94df7f0ebae8feab5e1d5cf8011af8c8be2ca18))
* **multi load:** fixed parsing algorithm reused for the multi load, the fix affects the normal upload as well. ([d4fee79](https://git.datacontroller.io/dc/dc/commit/d4fee791a72021e449cf9680c3e3a525dce41ac1))
* **multi load:** label rename ([fa04d7b](https://git.datacontroller.io/dc/dc/commit/fa04d7bf4e5ba337146bdaa926c60488f8851449))
### Features
* **multi load:** added HOT for user datasets input ([18363bb](https://git.datacontroller.io/dc/dc/commit/18363bbbeb9cf96183ba4841da8134b2f66f735c))
* **multi load:** implemented matching libds and parsing of the multiple sheets ([efcdc69](https://git.datacontroller.io/dc/dc/commit/efcdc694dd275cdb9a4e19f26e5522b8dadc5fd9))
* **multi load:** licence submit limits ([cffeab8](https://git.datacontroller.io/dc/dc/commit/cffeab813d8d4b324f82710dfd73953d4cbf8ffe))
* **multi load:** multiple csv files ([4d27665](https://git.datacontroller.io/dc/dc/commit/4d276657b35a147a2233a03afcb1716348555f52))
* **multi load:** refactored range find function, unlocking excel with password is reusable ([eb7c443](https://git.datacontroller.io/dc/dc/commit/eb7c44333c865e7f7bbfb54dd7f73bfc110f86a7))
* **multi load:** submitting multiple found tables at once ([5deba44](https://git.datacontroller.io/dc/dc/commit/5deba44d2b7352866d821b70dbbfbbf54955dc47))
## [6.10.1](https://git.datacontroller.io/dc/dc/compare/v6.10.0...v6.10.1) (2024-06-07)
### Bug Fixes
* adding 60 more colours to crayons table. Closes [#112](https://git.datacontroller.io/dc/dc/issues/112) ([3521579](https://git.datacontroller.io/dc/dc/commit/3521579dead089eebf62455686be3aee88bde687))
* terms and conditions colours, editor on smaller screens show only icons ([e32d44b](https://git.datacontroller.io/dc/dc/commit/e32d44b1bcdfeea43d19b21ec0ddf4af1ce3992a))
# [6.10.0](https://git.datacontroller.io/dc/dc/compare/v6.9.0...v6.10.0) (2024-06-07)
### Features
* updated handsontable to v14 ([2f8d0b7](https://git.datacontroller.io/dc/dc/commit/2f8d0b764a957ad8c11cd1088fad5e0670aa1731))
# [6.9.0](https://git.datacontroller.io/dc/dc/compare/v6.8.5...v6.9.0) (2024-05-31)
### Bug Fixes
* added colors.scss file, start of a refactor ([110ad9a](https://git.datacontroller.io/dc/dc/commit/110ad9a6e9ed39bd5591ae65c2d0005ba47ca758))
* added stealFocus directive ([9a79f37](https://git.datacontroller.io/dc/dc/commit/9a79f37bf143a1e05df7407358e2687c678e3e68))
### Features
* added app settings service to handle theme persistance, fix: optimised dark mode contrast ([35844e0](https://git.datacontroller.io/dc/dc/commit/35844e0cf1a639553269f2ab0f8666a56ab5cc47))
* **dark mode:** clarity optimizations ([afa7e38](https://git.datacontroller.io/dc/dc/commit/afa7e380aa3bdabd380c038522b9d73d9a8a3b91))
* **dark mode:** lineage and metadata ([27907ed](https://git.datacontroller.io/dc/dc/commit/27907ed00fe81f4c752ffe99d2fb029d5c884f0a))
* **dark mode:** refactoring clarity to enable dark mode, added toggle button ([5564aea](https://git.datacontroller.io/dc/dc/commit/5564aea9c25f8e81ff85afa8352325b9992e4043))
* **dark mode:** removing custom css rules so clarity can handle dark/light modes. Handsontable css for dark mode ([2c0afd0](https://git.datacontroller.io/dc/dc/commit/2c0afd02684cdf3bda374731b0359665e00ed95d))
## [6.8.5](https://git.datacontroller.io/dc/dc/compare/v6.8.4...v6.8.5) (2024-05-23)
### Bug Fixes
* bitemporal load issue [#105](https://git.datacontroller.io/dc/dc/issues/105) ([967698e](https://git.datacontroller.io/dc/dc/commit/967698e4ce1e0abcbc6f0aff8a4be6c512dee93c))
## [6.8.4](https://git.datacontroller.io/dc/dc/compare/v6.8.3...v6.8.4) (2024-05-22)
### Bug Fixes
* new approach to fixing [#105](https://git.datacontroller.io/dc/dc/issues/105) ([c11bd9a](https://git.datacontroller.io/dc/dc/commit/c11bd9a2c55e49f10451962cb2e222c21206bce5))
## [6.8.3](https://git.datacontroller.io/dc/dc/compare/v6.8.2...v6.8.3) (2024-05-09)

View File

@ -69,7 +69,8 @@
],
"scripts": [
"node_modules/marked/marked.min.js"
]
],
"webWorkerTsConfig": "tsconfig.worker.json"
},
"configurations": {
"production": {
@ -148,7 +149,8 @@
"src/styles.scss"
],
"scripts": [],
"karmaConfig": "karma.conf.js"
"karmaConfig": "karma.conf.js",
"webWorkerTsConfig": "tsconfig.worker.json"
}
},
"lint": {

View File

@ -15,9 +15,6 @@ context('editor tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -118,10 +115,6 @@ context('editor tests: ', function () {
})
})
})
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const clickOnEdit = (callback?: any) => {

View File

@ -0,0 +1,228 @@
import { Callbacks } from 'cypress/types/jquery/index'
const username = Cypress.env('username')
const password = Cypress.env('password')
const hostUrl = Cypress.env('hosturl')
const appLocation = Cypress.env('appLocation')
const longerCommandTimeout = Cypress.env('longerCommandTimeout')
const serverType = Cypress.env('serverType')
const libraryToOpenIncludes = Cypress.env(`libraryToOpenIncludes_${serverType}`)
const fixturePath = 'excels_multi_load/'
const library = 'DC996664'
const mpeXTestTable = 'MPE_X_TEST'
const mpeTablesTable = 'MPE_TABLES'
context('excel multi load tests: ', function () {
this.beforeAll(() => {
cy.visit(`${hostUrl}/SASLogon/logout`)
cy.loginAndUpdateValidKey(true)
})
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
visitPage('home/multi-load')
colorLog(
`TEST START ---> ${
Cypress.mocha.getRunner().suite.ctx.currentTest.title
}`,
'#3498DB'
)
})
it('1 | Uploads Excel file with multiple sheets, 3 sheets including data, 2 sheets matched with dataset', (done) => {
attachExcelFile('multi_load_test_2.xlsx', () => {
checkHotUserDatasetTable('hotTableUserDataset', [
[library, mpeXTestTable],
[library, mpeTablesTable]
], () => {
cy.get('#continue-btn').trigger('click').then(() => {
checkIfTreeHasTables([`${library}.${mpeXTestTable}`, `${library}.${mpeTablesTable}`], undefined, (includes: boolean) => {
if (includes) {
// MPE_TABLES sheet does not have data so 1 error image must be shown
hasErrorTables(1, (valid: boolean) => {
if (valid) done()
})
}
})
})
})
})
})
it('2 | Uploads Excel file with multiple sheets, 2 sheets matched with dataset, 1 matched sheet does not have data', (done) => {
attachExcelFile('multi_load_test_1.xlsx', () => {
checkHotUserDatasetTable('hotTableUserDataset', [
[library, mpeXTestTable],
[library, mpeTablesTable]
], () => {
cy.get('#continue-btn').trigger('click').then(() => {
checkIfTreeHasTables([`${library}.${mpeXTestTable}`, `${library}.${mpeTablesTable}`], `${library}.${mpeXTestTable}`, (includes: boolean) => {
if (includes) {
cy.get('#hotTable').should('be.visible').then(() => {
checkHotUserDatasetTable('hotTable', [
['No', '1', 'more dummy data'],
['No', '1', 'It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told:'],
['No', '1', 'if you can fill the unforgiving minute']
], () => {
submitTables()
hasSuccessSubmits(2, (valid: boolean) => {
if (valid) done()
})
})
})
}
})
})
})
})
})
it('3 | Uploads Excel file with multiple sheets, 1 sheets has 2 tables', (done) => {
attachExcelFile('multi_load_test_1.xlsx', () => {
checkHotUserDatasetTable('hotTableUserDataset', [
[library, mpeXTestTable],
[library, mpeTablesTable]
], () => {
cy.get('#continue-btn').trigger('click').then(() => {
checkIfTreeHasTables([`${library}.${mpeXTestTable}`, `${library}.${mpeTablesTable}`], `${library}.${mpeXTestTable}`, (includes: boolean) => {
if (includes) {
cy.get('#hotTable').should('be.visible').then(() => {
checkHotUserDatasetTable('hotTable', [
['No', '1', 'more dummy data'],
['No', '1', 'It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told: It was a dark and stormy night. The wind was blowing a gale! The captain said to his mate - mate, tell us a tale. And this, is the tale he told:'],
['No', '1', 'if you can fill the unforgiving minute']
], () => {
clickOnTreeNode('DC996664.MPE_TABLES', () => {
cy.wait(1000).then(() => {
cy.get('#hotTable').should('be.visible').then(() => {
checkHotUserDatasetTable('hotTable', [
['No', 'DC914286', 'MPE_COLUMN_LEVEL_SECURITY'],
['No', 'DC914286', 'MPE_XLMAP_INFO'],
['No', 'DC914286', 'MPE_XLMAP_RULES']
], () => {
submitTables()
hasSuccessSubmits(2, (valid: boolean) => {
if (valid) done()
})
})
})
})
})
})
})
}
})
})
})
})
})
this.afterEach(() => {
colorLog(`TEST END -------------`, '#3498DB')
})
})
const attachExcelFile = (excelFilename: string, callback?: any) => {
cy.get('#browse-file')
.should('exist')
.click()
.then(() => {
cy.get('input[type="file"]#file-upload')
.attachFile(`/${fixturePath}/${excelFilename}`)
.then(() => {
if (callback) callback()
})
})
}
const checkHotUserDatasetTable = (hotId: string, dataToContain: any[][], callback?: () => void) => {
cy.get(`#${hotId}`, { timeout: longerCommandTimeout })
.find('div.ht_master.handsontable')
.find('div.wtHolder')
.find('div.wtHider')
.find('div.wtSpreader')
.find('table.htCore')
.find('tbody')
.then((data) => {
cy.wait(2000).then(() => {
for (let rowI = 0; rowI < dataToContain.length; rowI++) {
for (let colI = 0; colI < dataToContain[rowI].length; colI++) {
expect(data[0].children[rowI].children[colI]).to.contain(dataToContain[rowI][colI])
}
}
if (callback) callback()
})
})
}
const clickOnTreeNode = (clickOnNode: string, callback?: () => void) => {
cy.get('.nav-tree clr-tree > clr-tree-node').then((treeNodes: any) => {
for (let node of treeNodes) {
if (node.innerText.toUpperCase().trim().includes(clickOnNode)) {
cy.get(node).trigger('click')
if (callback) callback()
}
}
})
}
const checkIfTreeHasTables = (tables: string[], clickOnNode?: string, callback?: (includes: boolean) => void) => {
cy.get('.nav-tree clr-tree > clr-tree-node').then((treeNodes: any) => {
let datasets = tables
let nodesCorrect = true
let nodeToClick
for (let node of treeNodes) {
if (!datasets.includes(node.innerText.toUpperCase().trim())) {
nodesCorrect = false
}
if (clickOnNode) {
if (node.innerText.toUpperCase().trim().includes(clickOnNode)) {
nodeToClick = node
}
}
}
if (nodeToClick) {
cy.wait(1000)
cy.get(nodeToClick).trigger('click')
}
if (callback) callback(nodesCorrect)
})
}
const submitTables = () => {
cy.get('#submit-all').trigger('click')
cy.get('#submit-tables').trigger('click')
cy.wait(1000)
}
const hasSuccessSubmits = (expectedNoOfSubmits: number, callback: (valid: boolean) => void) => {
cy.get('.nav-tree clr-tree > clr-tree-node cds-icon[status="success"]').should('be.visible').then(($nodes) => {
callback(expectedNoOfSubmits === $nodes.length)
})
}
const hasErrorTables = (expectedNoOfErrors: number, callback: (valid: boolean) => void) => {
cy.get('.nav-tree clr-tree > clr-tree-node cds-icon[status="danger"]').should('be.visible').then(($nodes) => {
callback(expectedNoOfErrors === $nodes.length)
})
}
const visitPage = (url: string) => {
cy.visit(`${hostUrl}${appLocation}/#/${url}`)
}
const colorLog = (msg: string, color: string) => {
console.log('%c' + msg, 'color:' + color + ';font-weight:bold;')
}

View File

@ -17,9 +17,6 @@ context('excel tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
@ -112,13 +109,8 @@ context('excel tests: ', function () {
openTableFromTree(libraryToOpenIncludes, 'mpe_x_test')
attachExcelFile('duplicate_column_excel.xlsx', () => {
cy.get('.abortMsg', { timeout: longerCommandTimeout })
.should('exist')
.then((elements: any) => {
if (elements[0]) {
if (elements[0].innerText.toLowerCase().includes('missing')) done()
}
})
submitExcel()
rejectExcel(done)
})
})
@ -337,7 +329,6 @@ context('excel tests: ', function () {
this.afterEach(() => {
colorLog(`TEST END -------------`, '#3498DB')
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})

View File

@ -15,9 +15,7 @@ context('filtering tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation, { timeout: longerCommandTimeout })
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -174,10 +172,6 @@ context('filtering tests: ', function () {
// })
// })
// })
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const checkInfoBarIncludes = (text: string, callback: any) => {

View File

@ -23,15 +23,12 @@ interface EditConfigTableCells {
context('licensing tests: ', function () {
this.beforeAll(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
cy.loginAndUpdateValidKey()
})
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -375,9 +372,7 @@ context('licensing tests: ', function () {
})
}
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const logout = (callback?: any) => {

View File

@ -18,9 +18,6 @@ context('liveness tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})

View File

@ -16,7 +16,6 @@ context('editor tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
cy.wait(2000)
cy.get('body').then(($body) => {
@ -393,10 +392,6 @@ context('editor tests: ', function () {
// }
// )
// })
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const removeAllColumns = () => {

View File

@ -15,9 +15,6 @@ context('editor tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -118,10 +115,6 @@ context('editor tests: ', function () {
})
})
})
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const clickOnEdit = (callback?: any) => {

View File

@ -19,9 +19,6 @@ context('excel tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
@ -339,7 +336,6 @@ context('excel tests: ', function () {
this.afterEach(() => {
colorLog(`TEST END -------------`, '#3498DB')
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})

View File

@ -15,9 +15,6 @@ context('filtering tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation, { timeout: longerCommandTimeout })
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -173,10 +170,6 @@ context('filtering tests: ', function () {
})
})
})
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const checkInfoBarIncludes = (text: string, callback: any) => {

View File

@ -23,15 +23,11 @@ interface EditConfigTableCells {
context('licensing tests: ', function () {
this.beforeAll(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
cy.loginAndUpdateValidKey()
})
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})
@ -374,10 +370,6 @@ context('licensing tests: ', function () {
})
})
}
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const logout = (callback?: any) => {

View File

@ -18,10 +18,6 @@ context('liveness tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
// cy.get('input.username').type(username)
// cy.get('input.password').type(password)
// cy.get('.login-group button').click()
visitPage('home')
})

View File

@ -17,7 +17,6 @@ context('editor tests: ', function () {
this.beforeEach(() => {
cy.visit(hostUrl + appLocation)
cy.wait(2000)
cy.get('body').then(($body) => {
@ -386,10 +385,6 @@ context('editor tests: ', function () {
}
)
})
this.afterEach(() => {
// cy.visit(`${hostUrl}/SASLogon/logout`)
})
})
const checkColumns = (columns: string[], callback: () => void) => {

View File

@ -10,7 +10,7 @@ const check = (cwd) => {
onlyAllow:
'AFLv2.1;Apache 2.0;Apache-2.0;Apache*;Artistic-2.0;0BSD;BSD*;BSD-2-Clause;BSD-3-Clause;CC0-1.0;CC-BY-3.0;CC-BY-4.0;ISC;MIT;MPL-2.0;ODC-By-1.0;Python-2.0;Unlicense;',
excludePackages:
'@cds/city@1.1.0;@handsontable/angular@13.1.0;handsontable@13.1.0;hyperformula@2.7.0;jackspeak@2.2.0;path-scurry@1.7.0'
'@cds/city@1.1.0;@handsontable/angular@14.4.0;handsontable@14.4.0;hyperformula@2.7.0;jackspeak@2.2.0;path-scurry@1.7.0'
},
(error, json) => {
if (error) {

2433
client/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -48,9 +48,10 @@
"@clr/angular": "^17.0.1",
"@clr/icons": "^13.0.2",
"@clr/ui": "^17.0.1",
"@handsontable/angular": "^13.1.0",
"@handsontable/angular": "^14.3.0",
"@sasjs/adapter": "4.10.2",
"@sasjs/utils": "^3.4.0",
"@sheet/crypto": "file:libraries/sheet-crypto.tgz",
"@types/d3-graphviz": "^2.6.7",
"@types/text-encoding": "0.0.35",
"base64-arraybuffer": "^0.2.0",
@ -59,7 +60,7 @@
"crypto-js": "^4.2.0",
"d3-graphviz": "^5.0.2",
"fs-extra": "^7.0.1",
"handsontable": "^13.1.0",
"handsontable": "^14.3.0",
"https-browserify": "1.0.0",
"hyperformula": "^2.5.0",