cassproject 5.0.5 → 5.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/package.json +24 -19
- package/src/com/eduworks/ec/graph/EcFrameworkGraph.js +36 -23
- package/src/org/cass/importer/CTDLASNCSVConceptImport.js +70 -3
- package/src/org/cass/importer/CTDLASNCSVImport.js +20 -4
- package/src/org/cassproject/ebac/repository/EcRepository.js +2 -2
- package/src/org/cassproject/general/AuditLogger.js +46 -2
- package/src/org/schema/3DModel.js +2 -2
- package/src/test/3.EcFrameworkGraph.test.js +8 -0
- package/test.js +0 -5048
package/README.md
CHANGED
|
@@ -50,6 +50,17 @@ Development unit tests presume you have a CaSS Repository running on `localhost:
|
|
|
50
50
|
|
|
51
51
|
# Changelog
|
|
52
52
|
|
|
53
|
+
## 5.0.7
|
|
54
|
+
* Security updates
|
|
55
|
+
* Assertions with the same registration will no longer propagate to the same inferred assertions.
|
|
56
|
+
* CTDL-ASN fixes
|
|
57
|
+
|
|
58
|
+
## 5.0.6
|
|
59
|
+
* Fixed bug using success in precache with L2 caching.
|
|
60
|
+
|
|
61
|
+
## 5.0.5
|
|
62
|
+
* Added implies relation.
|
|
63
|
+
|
|
53
64
|
## 5.0.4
|
|
54
65
|
* Updates to CEASN CSV Import validation
|
|
55
66
|
* Security updates.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cassproject",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.7",
|
|
4
4
|
"description": "Competency and Skills Service",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -10,17 +10,23 @@
|
|
|
10
10
|
"multitest": "concurrently --kill-others-on-fail \"npm run test15\" \"npm run test14\" \"npm run test13\" \"npm run test12\"",
|
|
11
11
|
"testCassTest": "npm run testkill && docker run -d --platform linux/amd64 --network cass-net --name cass-test -p80:80 -e CASS_LOOPBACK cass-test && wait-on http://localhost/api/ping && npm run testNode18 && npm run testNode18Fips && npm run testNode16 && npm run testNode15 && npm run testNode14 && npm run testNode13 && npm run testNode12 && npm run testCypressEdge && npm run testCypress && npm run testkill",
|
|
12
12
|
"testDevHttps": "npm run testkill && docker run -d --platform linux/amd64 --network cass-net --name cass-test -p443:80 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:dev && wait-on https://localhost/api/ping && npm run testNode18HttpsFips && npm run testNode18Https && npm run testNode16Https && npm run testNode15Https && npm run testNode14Https && npm run testNode13Https && npm run testNode12Https && npm run testCypressEdgeHttps && npm run testCypressHttps",
|
|
13
|
-
"test16HttpsFips": "export CASS_LOOPBACK=https://cass-testsf16/api/|| set CASS_LOOPBACK=https://cass-testsf16/api/&& npm run testkillsf16 && docker run -d --platform linux/amd64 --network cass-net --name cass-testsf16 -p450:443 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:1.6.
|
|
14
|
-
"test16Https11Fips": "export CASS_LOOPBACK=https://cass-testsf1116/api/|| set CASS_LOOPBACK=https://cass-testsf1116/api/&& npm run testkillsf1116 && docker run -d --platform linux/amd64 --network cass-net --name cass-testsf1116 -p449:443 -e CASS_LOOPBACK -e HTTPS=true -e HTTP2=false cassproject/cass:1.6.
|
|
15
|
-
"test16Https": "export CASS_LOOPBACK=https://cass-tests16/api/|| set CASS_LOOPBACK=https://cass-tests16/api/&& npm run testkills16 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests16 -p448:443 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:1.6.
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
"
|
|
13
|
+
"test16HttpsFips": "export CASS_LOOPBACK=https://cass-testsf16/api/|| set CASS_LOOPBACK=https://cass-testsf16/api/&& npm run testkillsf16 && docker run -d --platform linux/amd64 --network cass-net --name cass-testsf16 -p450:443 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:1.6.8 && wait-on https://localhost:450/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode24HttpsFips\" \"npm run testNode24HttpsForceFips\" \"npm run testNode22Https\" \"npm run testNode22HttpsFips\" \"npm run testNode22HttpsForceFips\" \"npm run testNode20Https\" \"npm run testNode20HttpsFips\" \"npm run testNode20HttpsForceFips\" \"npm run testNode18Https\" && npm run testkillsf16",
|
|
14
|
+
"test16Https11Fips": "export CASS_LOOPBACK=https://cass-testsf1116/api/|| set CASS_LOOPBACK=https://cass-testsf1116/api/&& npm run testkillsf1116 && docker run -d --platform linux/amd64 --network cass-net --name cass-testsf1116 -p449:443 -e CASS_LOOPBACK -e HTTPS=true -e HTTP2=false cassproject/cass:1.6.8 && wait-on https://localhost:449/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode24HttpsFips\" \"npm run testNode24HttpsForceFips\" \"npm run testNode22Https\" \"npm run testNode22HttpsFips\" \"npm run testNode22HttpsForceFips\" \"npm run testNode20Https\" \"npm run testNode20HttpsFips\" \"npm run testNode20HttpsForceFips\" \"npm run testNode18Https\" && npm run testkillsf1116",
|
|
15
|
+
"test16Https": "export CASS_LOOPBACK=https://cass-tests16/api/|| set CASS_LOOPBACK=https://cass-tests16/api/&& npm run testkills16 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests16 -p448:443 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:1.6.8 && wait-on https://localhost:448/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode24HttpsFips\" \"npm run testNode22Https\" \"npm run testNode22HttpsFips\" \"npm run testNode20Https\" \"npm run testNode20HttpsFips\" \"npm run testNode18Https\" && npm run testkills16",
|
|
16
|
+
"test16HttpsNoFips": "export CASS_LOOPBACK=https://cass-tests16/api/|| set CASS_LOOPBACK=https://cass-tests16/api/&& npm run testkills16 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests16 -p448:443 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:1.6.8 && wait-on https://localhost:448/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode22Https\" \"npm run testNode20Https\" \"npm run testNode18Https\" && npm run testkills16",
|
|
17
|
+
"test16Https11": "export CASS_LOOPBACK=https://cass-tests1116/api/|| set CASS_LOOPBACK=https://cass-tests1116/api/&& npm run testkills1116 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests1116 -p451:443 -e CASS_LOOPBACK -e HTTPS=true -e HTTP2=false cassproject/cass:1.6.8 && wait-on https://localhost:451/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode24HttpsFips\" \"npm run testNode22Https\" \"npm run testNode22HttpsFips\" \"npm run testNode20Https\" \"npm run testNode20HttpsFips\" \"npm run testNode18Https\" && npm run testkills1116",
|
|
18
|
+
"test16Https11NoFips": "export CASS_LOOPBACK=https://cass-tests1116/api/|| set CASS_LOOPBACK=https://cass-tests1116/api/&& npm run testkills1116 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests1116 -p451:443 -e CASS_LOOPBACK -e HTTPS=true -e HTTP2=false cassproject/cass:1.6.8 && wait-on https://localhost:451/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode22Https\" \"npm run testNode20Https\" \"npm run testNode18Https\" && npm run testkills1116",
|
|
19
|
+
"test16Fips": "export CASS_LOOPBACK=http://cass-testf16/api/|| set CASS_LOOPBACK=http://cass-testf16/api/&& npm run testkillf16 && docker run -d --platform linux/amd64 --network cass-net -e CASS_LOOPBACK --name cass-testf16 -p83:80 cassproject/cass:1.6.8 && wait-on http://localhost:83/api/ping && concurrently --kill-others-on-fail \"npm run testCypress\" \"npm run testNode24\" \"npm run testNode24Fips\" \"npm run testNode24ForceFips\" \"npm run testNode22\" \"npm run testNode22Fips\" \"npm run testNode22ForceFips\" \"npm run testNode20\" \"npm run testNode20Fips\" \"npm run testNode20ForceFips\" \"npm run testNode18\" && npm run testkillf16",
|
|
20
|
+
"test16": "export CASS_LOOPBACK=http://cass-test16/api/|| set CASS_LOOPBACK=http://cass-test16/api/&& npm run testkill16 && docker run -d --platform linux/amd64 --network cass-net -e CASS_LOOPBACK --name cass-test16 -p82:80 cassproject/cass:1.6.8 && wait-on http://localhost:82/api/ping && concurrently --kill-others-on-fail \"npm run testCypress\" \"npm run testNode24\" \"npm run testNode24Fips\" \"npm run testNode22\" \"npm run testNode22Fips\" \"npm run testNode20\" \"npm run testNode20Fips\" \"npm run testNode18\" && npm run testkill16",
|
|
21
|
+
"test16NoFips": "export CASS_LOOPBACK=http://cass-test16/api/|| set CASS_LOOPBACK=http://cass-test16/api/&& npm run testkill16 && docker run -d --platform linux/amd64 --network cass-net -e CASS_LOOPBACK --name cass-test16 -p82:80 cassproject/cass:1.6.8 && wait-on http://localhost:82/api/ping && concurrently --kill-others-on-fail \"npm run testCypress\" \"npm run testNode24\" \"npm run testNode22\" \"npm run testNode20\" \"npm run testNode18\" && npm run testkill16",
|
|
19
22
|
"test15HttpsFips": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=https://cass-testsf15/api/|| set CASS_LOOPBACK=https://cass-testsf15/api/&& npm run testkillsf15 && docker run -d --platform linux/amd64 --network cass-net --name cass-testsf15 -p446:443 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:1.5.75 && wait-on https://localhost:446/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode24HttpsFips\" \"npm run testNode22Https\" \"npm run testNode22HttpsFips\" \"npm run testNode22HttpsForceFips\" \"npm run testNode20Https\" \"npm run testNode20HttpsFips\" \"npm run testNode20HttpsForceFips\" \"npm run testNode18Https\" && npm run testkillsf15",
|
|
20
23
|
"test15Https11Fips": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=https://cass-testsf1115/api/|| set CASS_LOOPBACK=https://cass-testsf1115/api/&& npm run testkillsf1115 && docker run -d --platform linux/amd64 --network cass-net --name cass-testsf1115 -p447:443 -e CASS_LOOPBACK -e HTTPS=true -e HTTP2=false cassproject/cass:1.5.75 && wait-on https://localhost:447/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode24HttpsFips\" \"npm run testNode24HttpsForceFips\" \"npm run testNode22Https\" \"npm run testNode22HttpsFips\" \"npm run testNode22HttpsForceFips\" \"npm run testNode20Https\" \"npm run testNode20HttpsFips\" \"npm run testNode20HttpsForceFips\" \"npm run testNode18Https\" && npm run testkillsf1115",
|
|
21
24
|
"test15Https": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=https://cass-tests15/api/|| set CASS_LOOPBACK=https://cass-tests15/api/&& npm run testkills15 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests15 -p444:443 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:1.5.75 && wait-on https://localhost:444/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode24HttpsFips\" \"npm run testNode22Https\" \"npm run testNode22HttpsFips\" \"npm run testNode20Https\" \"npm run testNode20HttpsFips\" \"npm run testNode18Https\" && npm run testkills15",
|
|
25
|
+
"test15HttpsNoFips": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=https://cass-tests15/api/|| set CASS_LOOPBACK=https://cass-tests15/api/&& npm run testkills15 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests15 -p444:443 -e CASS_LOOPBACK -e HTTPS=true cassproject/cass:1.5.75 && wait-on https://localhost:444/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode22Https\" \"npm run testNode20Https\" \"npm run testNode18Https\" && npm run testkills15",
|
|
22
26
|
"test15Https11": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=https://cass-tests1115/api/|| set CASS_LOOPBACK=https://cass-tests1115/api/&& npm run testkills1115 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests1115 -p443:443 -e CASS_LOOPBACK -e HTTPS=true -e HTTP2=false cassproject/cass:1.5.75 && wait-on https://localhost/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode24HttpsFips\" \"npm run testNode22Https\" \"npm run testNode22HttpsFips\" \"npm run testNode20Https\" \"npm run testNode20HttpsFips\" \"npm run testNode18Https\" && npm run testkills1115",
|
|
27
|
+
"test15Https11NoFips": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=https://cass-tests1115/api/|| set CASS_LOOPBACK=https://cass-tests1115/api/&& npm run testkills1115 && docker run -d --platform linux/amd64 --network cass-net --name cass-tests1115 -p443:443 -e CASS_LOOPBACK -e HTTPS=true -e HTTP2=false cassproject/cass:1.5.75 && wait-on https://localhost/api/ping && concurrently --kill-others-on-fail \"npm run testCypressHttps\" \"npm run testNode24Https\" \"npm run testNode22Https\" \"npm run testNode20Https\" \"npm run testNode18Https\" && npm run testkills1115",
|
|
23
28
|
"test15Fips": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=http://cass-testf15/api/|| set CASS_LOOPBACK=http://cass-testf15/api/&& npm run testkillf15 && docker run -d --platform linux/amd64 --network cass-net -e CASS_LOOPBACK --name cass-testf15 -p81:80 cassproject/cass:1.5.75 && wait-on http://localhost:81/api/ping && concurrently --kill-others-on-fail \"npm run testCypress\" \"npm run testNode24\" \"npm run testNode24Fips\" \"npm run testNode24ForceFips\" \"npm run testNode22\" \"npm run testNode22Fips\" \"npm run testNode22ForceFips\" \"npm run testNode20\" \"npm run testNode20Fips\" \"npm run testNode20ForceFips\" \"npm run testNode18\" && npm run testkillf15",
|
|
29
|
+
"test15NoFips": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=http://cass-test15/api/|| set CASS_LOOPBACK=http://cass-test15/api/&& npm run testkill15 && docker run -d --platform linux/amd64 --network cass-net -e CASS_LOOPBACK --name cass-test15 -p80:80 cassproject/cass:1.5.75 && wait-on http://localhost/api/ping && concurrently --kill-others-on-fail \"npm run testCypress\" \"npm run testNode24\" \"npm run testNode22\" \"npm run testNode20\" \"npm run testNode18\" && npm run testkill15",
|
|
24
30
|
"test15": "export TESTLEVEL=15|| set TESTLEVEL=15&& export CASS_LOOPBACK=http://cass-test15/api/|| set CASS_LOOPBACK=http://cass-test15/api/&& npm run testkill15 && docker run -d --platform linux/amd64 --network cass-net -e CASS_LOOPBACK --name cass-test15 -p80:80 cassproject/cass:1.5.75 && wait-on http://localhost/api/ping && concurrently --kill-others-on-fail \"npm run testCypress\" \"npm run testNode24\" \"npm run testNode24Fips\" \"npm run testNode22\" \"npm run testNode22Fips\" \"npm run testNode20\" \"npm run testNode20Fips\" \"npm run testNode18\" && npm run testkill15",
|
|
25
31
|
"test14": "npm run testkill14 && docker run -d --platform linux/amd64 --network cass-net -e CASS_LOOPBACK --name cass-test14 -p80:80 cassproject/cass:1.4.4 && wait-on http://localhost/api/ping && concurrently --kill-others-on-fail \"npm run testCypress\" \"npm run testNode16\" && npm run testkill14",
|
|
26
32
|
"test13": "npm run testkill13 && docker run -d --platform linux/amd64 --network cass-net -e CASS_LOOPBACK --name cass-test13 -p80:80 cassproject/cass:1.3.18 && wait-on http://localhost/api/ping && concurrently --kill-others-on-fail \"npm run testCypress\" \"npm run testNode16\" && npm run testkill13",
|
|
@@ -106,7 +112,6 @@
|
|
|
106
112
|
"docs": "npm install yuidocjs yuidoc-ember-cli-theme && yuidoc -c yuidoc.json -o docs -e .js src && npm remove yuidocjs yuidoc-ember-cli-theme",
|
|
107
113
|
"doclint": "npm install yuidocjs yuidoc-ember-cli-theme && yuidoc --lint -c yuidoc.json -o docs -e .js src",
|
|
108
114
|
"cypress:install": "cypress install",
|
|
109
|
-
"cypress:run": "cypress run --headless",
|
|
110
115
|
"browserify:cypress:open": "cypress open --config-file cypressBrowserify.config.js",
|
|
111
116
|
"browserify:cypress:open:https": "cypress open -e CASS_LOOPBACK=https://localhost/api/ --config-file cypressBrowserify.config.js",
|
|
112
117
|
"vite:cypress:open": "cypress open --config-file cypressVite.config.js",
|
|
@@ -153,7 +158,7 @@
|
|
|
153
158
|
"base64-arraybuffer": "^1.0.2",
|
|
154
159
|
"forge": "^2.3.0",
|
|
155
160
|
"jsonld": "^8.3.3",
|
|
156
|
-
"node-forge": "^1.3.
|
|
161
|
+
"node-forge": "^1.3.3",
|
|
157
162
|
"papaparse": "^5.5.3",
|
|
158
163
|
"pem-jwk": "^2.0.0",
|
|
159
164
|
"promise-worker": "^2.0.1",
|
|
@@ -183,24 +188,24 @@
|
|
|
183
188
|
"homepage": "https://github.com/cassproject/cass-npm#readme",
|
|
184
189
|
"devDependencies": {
|
|
185
190
|
"@cypress/browserify-preprocessor": "^3.0.2",
|
|
186
|
-
"@cypress/vite-dev-server": "^
|
|
187
|
-
"@cypress/webpack-preprocessor": "^
|
|
191
|
+
"@cypress/vite-dev-server": "^7.0.1",
|
|
192
|
+
"@cypress/webpack-preprocessor": "^7.0.2",
|
|
188
193
|
"chai": "4.5.0",
|
|
189
194
|
"concurrently": "^9.2.1",
|
|
190
195
|
"convert-hrtime": "^5.0.0",
|
|
191
|
-
"cypress": "^15.
|
|
196
|
+
"cypress": "^15.7.1",
|
|
192
197
|
"cypress-fail-fast": "^7.1.1",
|
|
193
198
|
"eslint": "^9.39.1",
|
|
194
|
-
"fake-indexeddb": "^6.2.
|
|
195
|
-
"mocha": "^
|
|
199
|
+
"fake-indexeddb": "^6.2.5",
|
|
200
|
+
"mocha": "^11.7.5",
|
|
196
201
|
"node-polyfill-webpack-plugin": "^4.1.0",
|
|
197
|
-
"nodemon": "^3.1.
|
|
202
|
+
"nodemon": "^3.1.11",
|
|
198
203
|
"nyc": "^17.1.0",
|
|
199
|
-
"sinon": "^
|
|
204
|
+
"sinon": "^21.0.0",
|
|
200
205
|
"url-polyfill": "^1.1.14",
|
|
201
|
-
"wait-on": "^
|
|
202
|
-
"webpack": "^5.
|
|
203
|
-
"webpack-cli": "^
|
|
206
|
+
"wait-on": "^9.0.3",
|
|
207
|
+
"webpack": "^5.103.0",
|
|
208
|
+
"webpack-cli": "^6.0.1"
|
|
204
209
|
},
|
|
205
210
|
"packageManager": "npm@11.3.0+sha512.96eb611483f49c55f7fa74df61b588de9e213f80a256728e6798ddc67176c7b07e4a1cfc7de8922422cbce02543714367037536955221fa451b0c4fefaf20c66"
|
|
206
211
|
}
|
|
@@ -209,12 +209,18 @@ module.exports = class EcFrameworkGraph extends EcDirectedGraph {
|
|
|
209
209
|
}
|
|
210
210
|
visited.push(competency);
|
|
211
211
|
if (negative) {
|
|
212
|
-
|
|
212
|
+
let msc = this.getMetaStateCompetency(competency);
|
|
213
|
+
for (let assertion of assertions) {
|
|
214
|
+
if (visited.length > 1 && assertion.registration && msc.positiveAssertion?.some(a => a.registration == assertion.registration))
|
|
215
|
+
continue;
|
|
216
|
+
if (visited.length > 1 && assertion.registration && msc.negativeAssertion?.some(a => a.registration == assertion.registration))
|
|
217
|
+
continue;
|
|
213
218
|
this.addToMetaStateArray(
|
|
214
|
-
|
|
219
|
+
msc,
|
|
215
220
|
"negativeAssertion",
|
|
216
221
|
assertion
|
|
217
222
|
);
|
|
223
|
+
}
|
|
218
224
|
await Promise.all(
|
|
219
225
|
this.getOutEdges(competency).map(async (alignment) =>
|
|
220
226
|
await this.getCompetency(alignment.target).then(async (t) =>
|
|
@@ -243,12 +249,18 @@ module.exports = class EcFrameworkGraph extends EcDirectedGraph {
|
|
|
243
249
|
)
|
|
244
250
|
);
|
|
245
251
|
} else {
|
|
246
|
-
|
|
252
|
+
let msc = this.getMetaStateCompetency(competency);
|
|
253
|
+
for (let assertion of assertions) {
|
|
254
|
+
if (visited.length > 1 && assertion.registration && msc.positiveAssertion?.some(a => a.registration == assertion.registration))
|
|
255
|
+
continue;
|
|
256
|
+
if (visited.length > 1 && assertion.registration && msc.negativeAssertion?.some(a => a.registration == assertion.registration))
|
|
257
|
+
continue;
|
|
247
258
|
this.addToMetaStateArray(
|
|
248
|
-
|
|
259
|
+
msc,
|
|
249
260
|
"positiveAssertion",
|
|
250
261
|
assertion
|
|
251
262
|
);
|
|
263
|
+
}
|
|
252
264
|
await Promise.all(
|
|
253
265
|
this.getInEdges(competency).map(async (alignment) =>
|
|
254
266
|
await this.getCompetency(alignment.source).then(async (t) =>
|
|
@@ -267,20 +279,20 @@ module.exports = class EcFrameworkGraph extends EcDirectedGraph {
|
|
|
267
279
|
await this.getCompetency(alignment.target).then(
|
|
268
280
|
alignment.relationType == Relation.IMPLIES
|
|
269
281
|
? async (t) =>
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
282
|
+
await this.processAssertionBooleanOutward(
|
|
283
|
+
alignment,
|
|
284
|
+
t,
|
|
285
|
+
assertions,
|
|
286
|
+
negative,
|
|
287
|
+
visited
|
|
288
|
+
) : async (s) =>
|
|
289
|
+
await this.processAssertionBooleanInward(
|
|
290
|
+
alignment,
|
|
291
|
+
s,
|
|
292
|
+
assertions,
|
|
293
|
+
negative,
|
|
294
|
+
visited
|
|
295
|
+
)
|
|
284
296
|
)
|
|
285
297
|
)
|
|
286
298
|
)
|
|
@@ -317,11 +329,12 @@ module.exports = class EcFrameworkGraph extends EcDirectedGraph {
|
|
|
317
329
|
visited
|
|
318
330
|
);
|
|
319
331
|
}
|
|
320
|
-
addToMetaStateArray(metaState, key, value)
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
332
|
+
addToMetaStateArray(metaState, key, value) {
|
|
333
|
+
if (metaState == null) return;
|
|
334
|
+
if (metaState[key] == null) metaState[key] = [];
|
|
335
|
+
if (metaState[key].some(e => e.shortId() == value.shortId())) return;
|
|
336
|
+
metaState[key].push(value);
|
|
337
|
+
}
|
|
325
338
|
/**
|
|
326
339
|
* Fetches the Meta Competency (additional state information used to compute profiles or other data) for a competency.
|
|
327
340
|
*
|
|
@@ -158,15 +158,19 @@ module.exports = class CTDLASNCSVConceptImport {
|
|
|
158
158
|
for (let each = 0; each < tabularData.length; each++) {
|
|
159
159
|
let pretranslatedE = tabularData[each];
|
|
160
160
|
// Skip extra lines if found in file
|
|
161
|
-
if (!pretranslatedE
|
|
161
|
+
if (!pretranslatedE) {
|
|
162
162
|
continue;
|
|
163
163
|
}
|
|
164
164
|
if (!pretranslatedE["@id"]) {
|
|
165
165
|
failure(`Row ${each + 2}: is missing an @id`);
|
|
166
166
|
return;
|
|
167
167
|
}
|
|
168
|
+
if (!pretranslatedE["@type"]) {
|
|
169
|
+
failure(`Row ${each + 2}: is missing a @type`);
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
168
172
|
if (!pretranslatedE["@id"].startsWith('http') && !pretranslatedE["@id"].startsWith('ce-')) {
|
|
169
|
-
failure(`row ${
|
|
173
|
+
failure(`row ${each + 2}: @id must be a valid URI or start with 'ce-'`)
|
|
170
174
|
return;
|
|
171
175
|
}
|
|
172
176
|
if (
|
|
@@ -404,6 +408,36 @@ module.exports = class CTDLASNCSVConceptImport {
|
|
|
404
408
|
}
|
|
405
409
|
}
|
|
406
410
|
}
|
|
411
|
+
if (e["skos:inScheme"] != null) {
|
|
412
|
+
let scheme = e["skos:inScheme"];
|
|
413
|
+
console.log('scheme', scheme);
|
|
414
|
+
for (
|
|
415
|
+
let i = 0;
|
|
416
|
+
i < schemeArray.length;
|
|
417
|
+
i++
|
|
418
|
+
) {
|
|
419
|
+
let schemeObj = schemeArray[i];
|
|
420
|
+
if (scheme == schemeObj["id"]) {
|
|
421
|
+
if (
|
|
422
|
+
schemeObj[
|
|
423
|
+
"skos:hasTopConcept"
|
|
424
|
+
] == null
|
|
425
|
+
) {
|
|
426
|
+
let hasTopConcept = [];
|
|
427
|
+
schemeObj[
|
|
428
|
+
"skos:hasTopConcept"
|
|
429
|
+
] = hasTopConcept;
|
|
430
|
+
}
|
|
431
|
+
let conceptId = f.shortId();
|
|
432
|
+
EcArray.setAdd(
|
|
433
|
+
schemeObj[
|
|
434
|
+
"skos:hasTopConcept"
|
|
435
|
+
],
|
|
436
|
+
conceptId
|
|
437
|
+
);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
}
|
|
407
441
|
f[
|
|
408
442
|
"schema:dateModified"
|
|
409
443
|
] = new Date().toISOString();
|
|
@@ -468,13 +502,17 @@ module.exports = class CTDLASNCSVConceptImport {
|
|
|
468
502
|
for (let each = 0; each < tabularData.length; each++) {
|
|
469
503
|
let pretranslatedE = tabularData[each];
|
|
470
504
|
// Skip extra lines if found in file
|
|
471
|
-
if (!pretranslatedE
|
|
505
|
+
if (!pretranslatedE) {
|
|
472
506
|
continue;
|
|
473
507
|
}
|
|
474
508
|
if (!pretranslatedE["@id"]) {
|
|
475
509
|
failure(`Row ${each + 2}: is missing an @id`);
|
|
476
510
|
return;
|
|
477
511
|
}
|
|
512
|
+
if (!pretranslatedE["@type"]) {
|
|
513
|
+
failure(`Row ${each + 2}: is missing a @type`);
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
478
516
|
if (
|
|
479
517
|
pretranslatedE["@type"].toLowerCase().startsWith('sample') || pretranslatedE["@type"].toLowerCase().startsWith('instruction')
|
|
480
518
|
) {
|
|
@@ -671,6 +709,35 @@ module.exports = class CTDLASNCSVConceptImport {
|
|
|
671
709
|
}
|
|
672
710
|
}
|
|
673
711
|
}
|
|
712
|
+
if (e["skos:inScheme"] != null) {
|
|
713
|
+
let scheme = e["skos:inScheme"];
|
|
714
|
+
for (
|
|
715
|
+
let i = 0;
|
|
716
|
+
i < schemeArray.length;
|
|
717
|
+
i++
|
|
718
|
+
) {
|
|
719
|
+
let schemeObj = schemeArray[i];
|
|
720
|
+
if (scheme == schemeObj["id"]) {
|
|
721
|
+
if (
|
|
722
|
+
schemeObj[
|
|
723
|
+
"skos:hasTopConcept"
|
|
724
|
+
] == null
|
|
725
|
+
) {
|
|
726
|
+
let hasTopConcept = [];
|
|
727
|
+
schemeObj[
|
|
728
|
+
"skos:hasTopConcept"
|
|
729
|
+
] = hasTopConcept;
|
|
730
|
+
}
|
|
731
|
+
let conceptId = f.shortId();
|
|
732
|
+
EcArray.setAdd(
|
|
733
|
+
schemeObj[
|
|
734
|
+
"skos:hasTopConcept"
|
|
735
|
+
],
|
|
736
|
+
conceptId
|
|
737
|
+
);
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
}
|
|
674
741
|
f[
|
|
675
742
|
"schema:dateModified"
|
|
676
743
|
] = new Date().toISOString();
|
|
@@ -191,7 +191,7 @@ module.exports = class CTDLASNCSVImport {
|
|
|
191
191
|
}
|
|
192
192
|
let pretranslatedE = tabularData[i];
|
|
193
193
|
// Skip extra lines if found in file
|
|
194
|
-
if (!pretranslatedE
|
|
194
|
+
if (!pretranslatedE) {
|
|
195
195
|
continue;
|
|
196
196
|
}
|
|
197
197
|
if (pretranslatedE["@type"].toLowerCase() &&
|
|
@@ -215,6 +215,10 @@ module.exports = class CTDLASNCSVImport {
|
|
|
215
215
|
failure(`Row ${i + 2}: is missing an @id`)
|
|
216
216
|
return;
|
|
217
217
|
}
|
|
218
|
+
if (!pretranslatedE["@type"]) {
|
|
219
|
+
failure(`Row ${i + 2}: is missing a @type`);
|
|
220
|
+
return;
|
|
221
|
+
}
|
|
218
222
|
if (!pretranslatedE["@id"].startsWith('http') && !pretranslatedE["@id"].startsWith('ce-')) {
|
|
219
223
|
failure(`row ${i + 2}: @id must be a valid URI or start with 'ce-'`)
|
|
220
224
|
return;
|
|
@@ -741,9 +745,21 @@ module.exports = class CTDLASNCSVImport {
|
|
|
741
745
|
for (let i = 0; i < tabularData.length; i++) {
|
|
742
746
|
let pretranslatedE = tabularData[i];
|
|
743
747
|
// Skip extra lines if found in file
|
|
744
|
-
if (!pretranslatedE
|
|
748
|
+
if (!pretranslatedE) {
|
|
745
749
|
continue;
|
|
746
750
|
}
|
|
751
|
+
if (!pretranslatedE["@id"]) {
|
|
752
|
+
failure(`Row ${i + 2}: is missing an @id`);
|
|
753
|
+
return;
|
|
754
|
+
}
|
|
755
|
+
if (!pretranslatedE["@id"].startsWith('http') && !pretranslatedE["@id"].startsWith('ce-')) {
|
|
756
|
+
failure(`row ${i + 2}: @id must be a valid URI or start with 'ce-'`)
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
if (!pretranslatedE["@type"]) {
|
|
760
|
+
failure(`Row ${i + 2}: is missing a @type`);
|
|
761
|
+
return;
|
|
762
|
+
}
|
|
747
763
|
if (
|
|
748
764
|
pretranslatedE["@type"].toLowerCase().startsWith('sample') || pretranslatedE["@type"].toLowerCase().startsWith('instruction')
|
|
749
765
|
) {
|
|
@@ -1134,10 +1150,10 @@ module.exports = class CTDLASNCSVImport {
|
|
|
1134
1150
|
} else if (translator["type"] == "ceasn:Competency") {
|
|
1135
1151
|
context = "https://schema.cassproject.org/0.4/";
|
|
1136
1152
|
type = "Competency";
|
|
1137
|
-
} else if (translator["type"] == "skos:ConceptScheme") {
|
|
1153
|
+
} else if (translator["type"] == "skos:ConceptScheme" || translator["type"] == "ceasn:ConceptScheme") {
|
|
1138
1154
|
context = "https://schema.cassproject.org/0.4/skos/";
|
|
1139
1155
|
type = "ConceptScheme";
|
|
1140
|
-
} else if (translator["type"] == "ceasn:Concept") {
|
|
1156
|
+
} else if (translator["type"] == "ceasn:Concept" || translator["type"] === 'skos:Concept') {
|
|
1141
1157
|
context = "https://schema.cassproject.org/0.4/skos/";
|
|
1142
1158
|
type = "Concept";
|
|
1143
1159
|
}
|
|
@@ -1205,7 +1205,7 @@ module.exports = class EcRepository {
|
|
|
1205
1205
|
EcRepository.cacheBacking[cached.id] = cached;
|
|
1206
1206
|
}
|
|
1207
1207
|
}
|
|
1208
|
-
let objResults = await me.precache.call(me, results,
|
|
1208
|
+
let objResults = await me.precache.call(me, results, null, null, eim, true, versionedUrls);
|
|
1209
1209
|
if (objResults.length == results.length)
|
|
1210
1210
|
return objResults;
|
|
1211
1211
|
//Second attempt, in case the indexed object URL doesn't match the permanent URL.
|
|
@@ -1215,7 +1215,7 @@ module.exports = class EcRepository {
|
|
|
1215
1215
|
.map(u => EcRemoteLinkedData.trimVersionFromUrl(u)); //NOSONAR - Nesting functions to perform filters is normal.
|
|
1216
1216
|
if (missingUris.length > 0)
|
|
1217
1217
|
objResults.push(...await me.precache.call(me, missingUris, null, null, eim, true));
|
|
1218
|
-
return objResults;
|
|
1218
|
+
return cassPromisify(objResults, success, failure);
|
|
1219
1219
|
}
|
|
1220
1220
|
for (let i = 0; i < results.length; i++) {
|
|
1221
1221
|
let d = new EcRemoteLinkedData(null, null);
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
const InverseSeverity = {
|
|
2
|
+
0: 'EMERGENCY',
|
|
3
|
+
1: 'ALERT ',
|
|
4
|
+
2: 'CRITICAL ',
|
|
5
|
+
3: 'ERROR ',
|
|
6
|
+
4: 'WARNING ',
|
|
7
|
+
5: 'NOTICE ',
|
|
8
|
+
6: 'INFO ',
|
|
9
|
+
7: 'DEBUG ',
|
|
10
|
+
8: 'DEBUG ',
|
|
11
|
+
9: 'NETWORK ',
|
|
12
|
+
10: 'DATA '
|
|
13
|
+
};
|
|
14
|
+
|
|
1
15
|
if (!global.auditLogger) { // Running client-side
|
|
2
16
|
global.auditLogger = {
|
|
3
17
|
report: function(system, severity, message, ...data) {
|
|
@@ -11,9 +25,39 @@ if (!global.auditLogger) { // Running client-side
|
|
|
11
25
|
console.trace("Could not log error message.");
|
|
12
26
|
}
|
|
13
27
|
},
|
|
14
|
-
|
|
28
|
+
SyslogFacility: {
|
|
29
|
+
USER: 1, // user
|
|
30
|
+
DAEMON: 3, // daemon - anything that runs in the background like jobs
|
|
31
|
+
AUTH: 4, // auth - anything that deals with authentication or authorization
|
|
32
|
+
FTP: 11, // ftp - transferring files in and out of the server
|
|
33
|
+
NETWORK: 16, // local0 - network traffic related like HTTP POST, GET, and DELETE
|
|
34
|
+
STORAGE: 17, // local1 - things like DBs
|
|
35
|
+
STANDARD: 18, // local2 - anything that doesn't fit into other categories most likely goes here
|
|
36
|
+
SECURITY: 23
|
|
37
|
+
},
|
|
38
|
+
LogCategory: {
|
|
39
|
+
SYSTEM: 'sys',
|
|
40
|
+
AUTH: 'auth',
|
|
41
|
+
MESSAGE: 'msg',
|
|
42
|
+
FILE_SYSTEM: 'fs',
|
|
43
|
+
NETWORK: 'net',
|
|
44
|
+
STORAGE: 'sto',
|
|
45
|
+
ADAPTER: 'ada',
|
|
46
|
+
PROFILE: 'pro',
|
|
47
|
+
SECURITY: 'sec'
|
|
48
|
+
},
|
|
15
49
|
Severity: {
|
|
16
|
-
|
|
50
|
+
EMERGENCY: 0, // system isn't working
|
|
51
|
+
ALERT: 1, // system needs attention
|
|
52
|
+
CRITICAL: 2, // code path has failed
|
|
53
|
+
ERROR: 3, // code path has failed, but can recover
|
|
54
|
+
WARNING: 4, // unusual conditions
|
|
55
|
+
NOTICE: 5, // normal but unlikely
|
|
56
|
+
INFO: 6, // normal
|
|
57
|
+
DEBUG: 7, // extra information
|
|
58
|
+
SERVICE: 8,
|
|
59
|
+
NETWORK: 9, // traffic information
|
|
60
|
+
DATA: 10, // data information
|
|
17
61
|
}
|
|
18
62
|
}
|
|
19
63
|
}
|
|
@@ -6,11 +6,11 @@ schema.MediaObject = require("./MediaObject.js");
|
|
|
6
6
|
case of a single file published after Zip compression, the convention of appending '+zip' to the [[encodingFormat]] can be used. Geospatial, AR/VR, artistic/animation, gaming, engineering and scientific content can all be represented using [[3DModel]].
|
|
7
7
|
*
|
|
8
8
|
* @author schema.org
|
|
9
|
-
* @class
|
|
9
|
+
* @class ThreeDModel
|
|
10
10
|
* @module org.schema
|
|
11
11
|
* @extends MediaObject
|
|
12
12
|
*/
|
|
13
|
-
module.exports = class
|
|
13
|
+
module.exports = class ThreeDModel extends schema.MediaObject {
|
|
14
14
|
/**
|
|
15
15
|
* Constructor, automatically sets @context and @type.
|
|
16
16
|
*
|
|
@@ -612,12 +612,20 @@ describe("EcFrameworkGraph", () => {
|
|
|
612
612
|
let result = [];
|
|
613
613
|
if (fg.getMetaStateCompetency(c)["positiveAssertion"] != null)
|
|
614
614
|
result.push(fg.getMetaStateCompetency(c)["positiveAssertion"].length);
|
|
615
|
+
else
|
|
616
|
+
result.push(0);
|
|
615
617
|
if (fg.getMetaStateCompetency(c2)["positiveAssertion"] != null)
|
|
616
618
|
result.push(fg.getMetaStateCompetency(c2)["positiveAssertion"].length);
|
|
619
|
+
else
|
|
620
|
+
result.push(0);
|
|
617
621
|
if (fg.getMetaStateCompetency(c)["negativeAssertion"] != null)
|
|
618
622
|
result.push(fg.getMetaStateCompetency(c)["negativeAssertion"].length);
|
|
623
|
+
else
|
|
624
|
+
result.push(0);
|
|
619
625
|
if (fg.getMetaStateCompetency(c2)["negativeAssertion"] != null)
|
|
620
626
|
result.push(fg.getMetaStateCompetency(c2)["negativeAssertion"].length);
|
|
627
|
+
else
|
|
628
|
+
result.push(0);
|
|
621
629
|
return result;
|
|
622
630
|
}).catch((err) => {
|
|
623
631
|
assert.fail(err);
|