accessibility-checker 4.0.1 → 4.0.2

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.
Files changed (209) hide show
  1. package/bin/achecker.js +213 -262
  2. package/bin/achecker.js.map +1 -1
  3. package/cjs/bin/achecker.d.ts +2 -0
  4. package/cjs/bin/achecker.js +306 -0
  5. package/cjs/bin/achecker.js.map +1 -0
  6. package/cjs/index.d.ts +319 -0
  7. package/cjs/index.js +402 -0
  8. package/cjs/index.js.map +1 -0
  9. package/cjs/lib/ACBrowserManager.d.ts +22 -0
  10. package/cjs/lib/ACBrowserManager.js +172 -0
  11. package/cjs/lib/ACBrowserManager.js.map +1 -0
  12. package/cjs/lib/ACEngineManager.d.ts +19 -0
  13. package/cjs/lib/ACEngineManager.js +457 -0
  14. package/cjs/lib/ACEngineManager.js.map +1 -0
  15. package/cjs/lib/ACHelper.d.ts +2 -0
  16. package/cjs/lib/ACHelper.js +678 -0
  17. package/cjs/lib/ACHelper.js.map +1 -0
  18. package/cjs/lib/api/IChecker.d.ts +28 -0
  19. package/cjs/lib/api/IChecker.js +11 -0
  20. package/cjs/lib/api/IChecker.js.map +1 -0
  21. package/cjs/lib/api/IMapper.d.ts +37 -0
  22. package/cjs/lib/api/IMapper.js +18 -0
  23. package/cjs/lib/api/IMapper.js.map +1 -0
  24. package/cjs/lib/common/api-ext/Fetch.d.ts +17 -0
  25. package/cjs/lib/common/api-ext/Fetch.js +95 -0
  26. package/cjs/lib/common/api-ext/Fetch.js.map +1 -0
  27. package/cjs/lib/common/api-ext/IAbstractAPI.d.ts +33 -0
  28. package/cjs/lib/common/api-ext/IAbstractAPI.js +18 -0
  29. package/cjs/lib/common/api-ext/IAbstractAPI.js.map +1 -0
  30. package/cjs/lib/common/config/ACConfigManager.d.ts +13 -0
  31. package/cjs/lib/common/config/ACConfigManager.js +483 -0
  32. package/cjs/lib/common/config/ACConfigManager.js.map +1 -0
  33. package/cjs/lib/common/config/ACConstants.d.ts +17 -0
  34. package/cjs/lib/common/config/ACConstants.js +111 -0
  35. package/cjs/lib/common/config/ACConstants.js.map +1 -0
  36. package/cjs/lib/common/config/IArchive.d.ts +37 -0
  37. package/cjs/lib/common/config/IArchive.js +18 -0
  38. package/cjs/lib/common/config/IArchive.js.map +1 -0
  39. package/cjs/lib/common/config/IConfig.d.ts +152 -0
  40. package/cjs/lib/common/config/IConfig.js +36 -0
  41. package/cjs/lib/common/config/IConfig.js.map +1 -0
  42. package/cjs/lib/common/engine/IBounds.d.ts +21 -0
  43. package/cjs/lib/common/engine/IBounds.js +18 -0
  44. package/cjs/lib/common/engine/IBounds.js.map +1 -0
  45. package/cjs/lib/common/engine/IChecker.d.ts +23 -0
  46. package/cjs/lib/common/engine/IChecker.js +18 -0
  47. package/cjs/lib/common/engine/IChecker.js.map +1 -0
  48. package/cjs/lib/common/engine/IEngine.d.ts +39 -0
  49. package/cjs/lib/common/engine/IEngine.js +18 -0
  50. package/cjs/lib/common/engine/IEngine.js.map +1 -0
  51. package/cjs/lib/common/engine/IGuideline.d.ts +53 -0
  52. package/cjs/lib/common/engine/IGuideline.js +37 -0
  53. package/cjs/lib/common/engine/IGuideline.js.map +1 -0
  54. package/cjs/lib/common/engine/IMapper.d.ts +32 -0
  55. package/cjs/lib/common/engine/IMapper.js +18 -0
  56. package/cjs/lib/common/engine/IMapper.js.map +1 -0
  57. package/cjs/lib/common/engine/IReport.d.ts +143 -0
  58. package/cjs/lib/common/engine/IReport.js +44 -0
  59. package/cjs/lib/common/engine/IReport.js.map +1 -0
  60. package/cjs/lib/common/engine/IRule.d.ts +100 -0
  61. package/cjs/lib/common/engine/IRule.js +87 -0
  62. package/cjs/lib/common/engine/IRule.js.map +1 -0
  63. package/cjs/lib/common/engine/IRuleset.d.ts +20 -0
  64. package/cjs/lib/common/engine/IRuleset.js +18 -0
  65. package/cjs/lib/common/engine/IRuleset.js.map +1 -0
  66. package/cjs/lib/common/report/ACReporterCSV.d.ts +28 -0
  67. package/cjs/lib/common/report/ACReporterCSV.js +75 -0
  68. package/cjs/lib/common/report/ACReporterCSV.js.map +1 -0
  69. package/cjs/lib/common/report/ACReporterHTML.d.ts +27 -0
  70. package/cjs/lib/common/report/ACReporterHTML.js +61 -0
  71. package/cjs/lib/common/report/ACReporterHTML.js.map +1 -0
  72. package/cjs/lib/common/report/ACReporterJSON.d.ts +36 -0
  73. package/cjs/lib/common/report/ACReporterJSON.js +109 -0
  74. package/cjs/lib/common/report/ACReporterJSON.js.map +1 -0
  75. package/cjs/lib/common/report/ACReporterMetrics.d.ts +78 -0
  76. package/cjs/lib/common/report/ACReporterMetrics.js +135 -0
  77. package/cjs/lib/common/report/ACReporterMetrics.js.map +1 -0
  78. package/cjs/lib/common/report/ACReporterXLSX.d.ts +38 -0
  79. package/cjs/lib/common/report/ACReporterXLSX.js +996 -0
  80. package/cjs/lib/common/report/ACReporterXLSX.js.map +1 -0
  81. package/cjs/lib/common/report/BaselineManager.d.ts +169 -0
  82. package/cjs/lib/common/report/BaselineManager.js +382 -0
  83. package/cjs/lib/common/report/BaselineManager.js.map +1 -0
  84. package/cjs/lib/common/report/ReporterManager.d.ts +79 -0
  85. package/cjs/lib/common/report/ReporterManager.js +469 -0
  86. package/cjs/lib/common/report/ReporterManager.js.map +1 -0
  87. package/cjs/lib/common/report/genReport.d.ts +1 -0
  88. package/cjs/lib/common/report/genReport.js +12 -0
  89. package/cjs/lib/common/report/genReport.js.map +1 -0
  90. package/cjs/package.json +3 -0
  91. package/index.js +21 -63
  92. package/index.js.map +1 -1
  93. package/lib/ACBrowserManager.js +138 -203
  94. package/lib/ACBrowserManager.js.map +1 -1
  95. package/lib/ACEngineManager.js +395 -402
  96. package/lib/ACEngineManager.js.map +1 -1
  97. package/lib/ACHelper.js +581 -642
  98. package/lib/ACHelper.js.map +1 -1
  99. package/lib/common/api-ext/Fetch.js +58 -78
  100. package/lib/common/api-ext/Fetch.js.map +1 -1
  101. package/lib/common/config/ACConfigManager.js +271 -281
  102. package/lib/common/config/ACConfigManager.js.map +1 -1
  103. package/lib/common/config/ACConstants.js +38 -4
  104. package/lib/common/config/ACConstants.js.map +1 -1
  105. package/lib/common/config/IConfig.d.ts +1 -1
  106. package/lib/common/report/ACReporterCSV.js +42 -77
  107. package/lib/common/report/ACReporterCSV.js.map +1 -1
  108. package/lib/common/report/ACReporterHTML.js +15 -48
  109. package/lib/common/report/ACReporterHTML.js.map +1 -1
  110. package/lib/common/report/ACReporterJSON.js +59 -94
  111. package/lib/common/report/ACReporterJSON.js.map +1 -1
  112. package/lib/common/report/ACReporterMetrics.js +45 -108
  113. package/lib/common/report/ACReporterMetrics.js.map +1 -1
  114. package/lib/common/report/ACReporterXLSX.js +282 -300
  115. package/lib/common/report/ACReporterXLSX.js.map +1 -1
  116. package/lib/common/report/BaselineManager.js +82 -56
  117. package/lib/common/report/BaselineManager.js.map +1 -1
  118. package/lib/common/report/ReporterManager.js +125 -190
  119. package/lib/common/report/ReporterManager.js.map +1 -1
  120. package/lib/common/report/genReport.js +2 -2
  121. package/mjs/bin/achecker.d.ts +2 -0
  122. package/mjs/bin/achecker.js +236 -0
  123. package/mjs/bin/achecker.js.map +1 -0
  124. package/mjs/index.d.ts +319 -0
  125. package/mjs/index.js +368 -0
  126. package/mjs/index.js.map +1 -0
  127. package/mjs/lib/ACBrowserManager.d.ts +22 -0
  128. package/mjs/lib/ACBrowserManager.js +121 -0
  129. package/mjs/lib/ACBrowserManager.js.map +1 -0
  130. package/mjs/lib/ACEngineManager.d.ts +19 -0
  131. package/mjs/lib/ACEngineManager.js +397 -0
  132. package/mjs/lib/ACEngineManager.js.map +1 -0
  133. package/mjs/lib/ACHelper.d.ts +2 -0
  134. package/mjs/lib/ACHelper.js +614 -0
  135. package/mjs/lib/ACHelper.js.map +1 -0
  136. package/mjs/lib/api/IChecker.d.ts +28 -0
  137. package/mjs/lib/api/IChecker.js +8 -0
  138. package/mjs/lib/api/IChecker.js.map +1 -0
  139. package/mjs/lib/api/IMapper.d.ts +37 -0
  140. package/mjs/lib/api/IMapper.js +17 -0
  141. package/mjs/lib/api/IMapper.js.map +1 -0
  142. package/mjs/lib/common/api-ext/Fetch.d.ts +17 -0
  143. package/mjs/lib/common/api-ext/Fetch.js +45 -0
  144. package/mjs/lib/common/api-ext/Fetch.js.map +1 -0
  145. package/mjs/lib/common/api-ext/IAbstractAPI.d.ts +33 -0
  146. package/mjs/lib/common/api-ext/IAbstractAPI.js +17 -0
  147. package/mjs/lib/common/api-ext/IAbstractAPI.js.map +1 -0
  148. package/mjs/lib/common/config/ACConfigManager.d.ts +13 -0
  149. package/mjs/lib/common/config/ACConfigManager.js +421 -0
  150. package/mjs/lib/common/config/ACConfigManager.js.map +1 -0
  151. package/mjs/lib/common/config/ACConstants.d.ts +17 -0
  152. package/mjs/lib/common/config/ACConstants.js +75 -0
  153. package/mjs/lib/common/config/ACConstants.js.map +1 -0
  154. package/mjs/lib/common/config/IArchive.d.ts +37 -0
  155. package/mjs/lib/common/config/IArchive.js +17 -0
  156. package/mjs/lib/common/config/IArchive.js.map +1 -0
  157. package/mjs/lib/common/config/IConfig.d.ts +152 -0
  158. package/mjs/lib/common/config/IConfig.js +33 -0
  159. package/mjs/lib/common/config/IConfig.js.map +1 -0
  160. package/mjs/lib/common/engine/IBounds.d.ts +21 -0
  161. package/mjs/lib/common/engine/IBounds.js +17 -0
  162. package/mjs/lib/common/engine/IBounds.js.map +1 -0
  163. package/mjs/lib/common/engine/IChecker.d.ts +23 -0
  164. package/mjs/lib/common/engine/IChecker.js +17 -0
  165. package/mjs/lib/common/engine/IChecker.js.map +1 -0
  166. package/mjs/lib/common/engine/IEngine.d.ts +39 -0
  167. package/mjs/lib/common/engine/IEngine.js +17 -0
  168. package/mjs/lib/common/engine/IEngine.js.map +1 -0
  169. package/mjs/lib/common/engine/IGuideline.d.ts +53 -0
  170. package/mjs/lib/common/engine/IGuideline.js +34 -0
  171. package/mjs/lib/common/engine/IGuideline.js.map +1 -0
  172. package/mjs/lib/common/engine/IMapper.d.ts +32 -0
  173. package/mjs/lib/common/engine/IMapper.js +17 -0
  174. package/mjs/lib/common/engine/IMapper.js.map +1 -0
  175. package/mjs/lib/common/engine/IReport.d.ts +143 -0
  176. package/mjs/lib/common/engine/IReport.js +36 -0
  177. package/mjs/lib/common/engine/IReport.js.map +1 -0
  178. package/mjs/lib/common/engine/IRule.d.ts +100 -0
  179. package/mjs/lib/common/engine/IRule.js +79 -0
  180. package/mjs/lib/common/engine/IRule.js.map +1 -0
  181. package/mjs/lib/common/engine/IRuleset.d.ts +20 -0
  182. package/mjs/lib/common/engine/IRuleset.js +17 -0
  183. package/mjs/lib/common/engine/IRuleset.js.map +1 -0
  184. package/mjs/lib/common/report/ACReporterCSV.d.ts +28 -0
  185. package/mjs/lib/common/report/ACReporterCSV.js +60 -0
  186. package/mjs/lib/common/report/ACReporterCSV.js.map +1 -0
  187. package/mjs/lib/common/report/ACReporterHTML.d.ts +27 -0
  188. package/mjs/lib/common/report/ACReporterHTML.js +46 -0
  189. package/mjs/lib/common/report/ACReporterHTML.js.map +1 -0
  190. package/mjs/lib/common/report/ACReporterJSON.d.ts +36 -0
  191. package/mjs/lib/common/report/ACReporterJSON.js +94 -0
  192. package/mjs/lib/common/report/ACReporterJSON.js.map +1 -0
  193. package/mjs/lib/common/report/ACReporterMetrics.d.ts +78 -0
  194. package/mjs/lib/common/report/ACReporterMetrics.js +122 -0
  195. package/mjs/lib/common/report/ACReporterMetrics.js.map +1 -0
  196. package/mjs/lib/common/report/ACReporterXLSX.d.ts +38 -0
  197. package/mjs/lib/common/report/ACReporterXLSX.js +948 -0
  198. package/mjs/lib/common/report/ACReporterXLSX.js.map +1 -0
  199. package/mjs/lib/common/report/BaselineManager.d.ts +169 -0
  200. package/mjs/lib/common/report/BaselineManager.js +348 -0
  201. package/mjs/lib/common/report/BaselineManager.js.map +1 -0
  202. package/mjs/lib/common/report/ReporterManager.d.ts +79 -0
  203. package/mjs/lib/common/report/ReporterManager.js +469 -0
  204. package/mjs/lib/common/report/ReporterManager.js.map +1 -0
  205. package/mjs/lib/common/report/genReport.d.ts +1 -0
  206. package/mjs/lib/common/report/genReport.js +9 -0
  207. package/mjs/lib/common/report/genReport.js.map +1 -0
  208. package/mjs/package.json +3 -0
  209. package/package.json +10 -4
@@ -0,0 +1,8 @@
1
+ export var eAssertResult;
2
+ (function (eAssertResult) {
3
+ eAssertResult[eAssertResult["ERROR"] = -1] = "ERROR";
4
+ eAssertResult[eAssertResult["PASS"] = 0] = "PASS";
5
+ eAssertResult[eAssertResult["BASELINE_MISMATCH"] = 1] = "BASELINE_MISMATCH";
6
+ eAssertResult[eAssertResult["FAIL"] = 2] = "FAIL";
7
+ })(eAssertResult || (eAssertResult = {}));
8
+ //# sourceMappingURL=IChecker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IChecker.js","sourceRoot":"","sources":["../../../../src-ts/lib/api/IChecker.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACrB,oDAAU,CAAA;IACV,iDAAQ,CAAA;IACR,2EAAqB,CAAA;IACrB,iDAAQ,CAAA;AACZ,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB"}
@@ -0,0 +1,37 @@
1
+ /******************************************************************************
2
+ Copyright:: 2020- IBM, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ *****************************************************************************/
16
+ export type Bounds = {
17
+ left: number;
18
+ top: number;
19
+ width: number;
20
+ height: number;
21
+ };
22
+ export interface IMapResult {
23
+ node: Node;
24
+ namespace: string;
25
+ role: string;
26
+ rolePath: string;
27
+ attributes: {
28
+ [key: string]: string;
29
+ };
30
+ bounds?: Bounds;
31
+ }
32
+ export interface IMapper {
33
+ reset(node: Node): void;
34
+ openScope(node: Node): IMapResult[];
35
+ closeScope(node: Node): IMapResult[];
36
+ getNamespace(): string;
37
+ }
@@ -0,0 +1,17 @@
1
+ /******************************************************************************
2
+ Copyright:: 2020- IBM, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ *****************************************************************************/
16
+ export {};
17
+ //# sourceMappingURL=IMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IMapper.js","sourceRoot":"","sources":["../../../../src-ts/lib/api/IMapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;+EAc+E"}
@@ -0,0 +1,17 @@
1
+ /******************************************************************************
2
+ Copyright:: 2023- IBM, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ *****************************************************************************/
16
+ export declare function fetch_get(url: string): Promise<any>;
17
+ export declare function fetch_get_text(url: string): Promise<any>;
@@ -0,0 +1,45 @@
1
+ /******************************************************************************
2
+ Copyright:: 2023- IBM, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ *****************************************************************************/
16
+ let axios;
17
+ export async function fetch_get(url) {
18
+ if (typeof fetch === "function") {
19
+ const resp = await fetch(url);
20
+ return await resp.json();
21
+ }
22
+ else {
23
+ if (!axios) {
24
+ axios = await import("axios");
25
+ }
26
+ const response = await axios.get(url);
27
+ const data = await response.data;
28
+ return data;
29
+ }
30
+ }
31
+ export async function fetch_get_text(url) {
32
+ if (typeof fetch === "function") {
33
+ const resp = await fetch(url);
34
+ return await resp.text();
35
+ }
36
+ else {
37
+ if (!axios) {
38
+ axios = await import("axios");
39
+ }
40
+ const response = await axios.get(url);
41
+ const data = await response.data;
42
+ return data;
43
+ }
44
+ }
45
+ //# sourceMappingURL=Fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Fetch.js","sourceRoot":"","sources":["../../../../../src-ts/lib/common/api-ext/Fetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;8EAc8E;AAE9E,IAAI,KAAK,CAAC;AAEV,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACvC,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC5C,IAAI,OAAO,KAAK,KAAK,UAAU,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,KAAK,EAAE,CAAC;YACT,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC"}
@@ -0,0 +1,33 @@
1
+ /******************************************************************************
2
+ Copyright:: 2023- IBM, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ *****************************************************************************/
16
+ import { IBaselineReport } from "../engine/IReport.js";
17
+ /**
18
+ * Interface for writing files
19
+ */
20
+ export interface IAbstractAPI {
21
+ /**
22
+ * This method should ensure that the directory exists and write a file to the outputDir as specified by config.
23
+ * @param filePath
24
+ * @param data
25
+ */
26
+ writeFileSync(filePath: string, data: string | Buffer): any;
27
+ prepFileSync(filePath: string): string;
28
+ loadBaseline(label: string): IBaselineReport | null;
29
+ getChecker(): any;
30
+ info(...args: any[]): any;
31
+ log(...args: any[]): any;
32
+ error(...args: any[]): any;
33
+ }
@@ -0,0 +1,17 @@
1
+ /******************************************************************************
2
+ Copyright:: 2023- IBM, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ *****************************************************************************/
16
+ export {};
17
+ //# sourceMappingURL=IAbstractAPI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IAbstractAPI.js","sourceRoot":"","sources":["../../../../../src-ts/lib/common/api-ext/IAbstractAPI.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;8EAc8E"}
@@ -0,0 +1,13 @@
1
+ import { IConfig, IConfigInternal } from "./IConfig.js";
2
+ /**
3
+ * negative if versionA is less than versionB, positive if versionA is greater than versionB, and zero if they are equal. NaN is treated as 0.
4
+ * @param versionA
5
+ * @param versionB
6
+ */
7
+ export declare function compareVersions(versionA: string, versionB: string): number;
8
+ export declare class ACConfigManager {
9
+ static setConfig(inConfig?: IConfig | IConfigInternal): Promise<void>;
10
+ static getConfig(): Promise<IConfig>;
11
+ static getConfigUnsupported(): Promise<IConfigInternal>;
12
+ static getConfigNow(): IConfigInternal;
13
+ }
@@ -0,0 +1,421 @@
1
+ /******************************************************************************
2
+ Copyright:: 2020- IBM, Inc
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ *****************************************************************************/
16
+ // Load all the modules that are needed
17
+ import * as pathLib from "path";
18
+ import * as fs from "fs";
19
+ import * as YAML from "js-yaml";
20
+ import { ACConstants } from "./ACConstants.js";
21
+ import * as crypto from 'crypto';
22
+ import { fetch_get } from "../api-ext/Fetch.js";
23
+ import { ReporterManager } from "../report/ReporterManager.js";
24
+ import path from 'path';
25
+ // This line will be modified by sed for cjs vs mjs environments. Look at package.json before modifying
26
+ import { fileURLToPath } from 'url';
27
+ /**
28
+ * This function is responsible converting policies into an Array based on string or Array.
29
+ *
30
+ * i.e. convert array into string version of array
31
+ * "CI162_5_2_DCP070116,CI162_5_2_DCP070116"
32
+ *
33
+ * converts to:
34
+ *
35
+ * [
36
+ * "CI162_5_2_DCP070116",
37
+ * "CI162_5_2_DCP070116"
38
+ * ]
39
+ *
40
+ * @param {Array or String} policies - Provide list of policies, single policy or comma seperated policies
41
+ *
42
+ * @return {Array} policies - return the policy converted into Array version
43
+ *
44
+ * @memberOf this
45
+ */
46
+ function convertPolicies(policies) {
47
+ ACConstants.DEBUG && console.log("START 'convertPolicies' function");
48
+ ACConstants.DEBUG && console.log("Converting policy provided to Array: ");
49
+ ACConstants.DEBUG && console.log(policies);
50
+ ACConstants.DEBUG && console.log("END 'convertPolicies' function");
51
+ // In the case policies is an Array return it as engine expects list
52
+ if (policies instanceof Array) {
53
+ return policies;
54
+ }
55
+ // If the policies is string, we need to convert it to an array. Which includes comma seperated string support also
56
+ else if (typeof policies === "string") {
57
+ return policies.split(',');
58
+ }
59
+ return policies;
60
+ }
61
+ /**
62
+ * negative if versionA is less than versionB, positive if versionA is greater than versionB, and zero if they are equal. NaN is treated as 0.
63
+ * @param versionA
64
+ * @param versionB
65
+ */
66
+ export function compareVersions(versionA, versionB) {
67
+ const versionRE = /[0-9.]+(-rc\.[0-9]+)?/;
68
+ versionA = versionA.trim();
69
+ versionB = versionB.trim();
70
+ if (!versionRE.test(versionA))
71
+ throw new Error("Invalid version");
72
+ if (!versionRE.test(versionB))
73
+ throw new Error("Invalid version");
74
+ if (versionA === versionB)
75
+ return 0;
76
+ // Get x.y.z-rc.a into [x.y.z, a]
77
+ // Get x.y.z into [x.y.z]
78
+ let split1A = versionA.split("-rc.");
79
+ let split1B = versionB.split("-rc.");
80
+ // Get x.y.z into [x,y,z]
81
+ let split2A = split1A[0].split(".");
82
+ let split2B = split1B[0].split(".");
83
+ // For the components of the shortest version - can only compare numbers we have
84
+ let minLength = Math.min(split2A.length, split2B.length);
85
+ for (let idx = 0; idx < minLength; ++idx) {
86
+ if (split2A[idx] !== split2B[idx]) {
87
+ return parseInt(split2A[idx]) - parseInt(split2B[idx]);
88
+ }
89
+ }
90
+ // Handle 4.0 vs 4.0.1 (longer string is later)
91
+ if (split2A.length !== split2B.length) {
92
+ return split2A.length - split2B.length;
93
+ }
94
+ // Handle 4.0.0 vs 4.0.0-rc.x (shorter string is later)
95
+ if (split1A.length !== split1B.length) {
96
+ return split1B.length - split1A.length;
97
+ }
98
+ return parseInt(split1A[1]) - parseInt(split1B[1]);
99
+ }
100
+ /**
101
+ *
102
+ * @param archives
103
+ * @param toolVersion
104
+ */
105
+ function findLatestArchiveId(archives, toolVersion) {
106
+ const validArchiveKeywords = ["latest", "preview", "versioned"];
107
+ for (const archive of archives) {
108
+ if (validArchiveKeywords.includes(archive.id))
109
+ continue;
110
+ // If the toolVersion is greater than or equal to the archive version we've found it
111
+ if (compareVersions(toolVersion, archive.version) >= 0) {
112
+ return archive.id;
113
+ }
114
+ }
115
+ // Something wrong, go with the latest
116
+ return "latest";
117
+ }
118
+ /**
119
+ * This function is responsible processing the achecker config which was initialized to make sure it contains,
120
+ * information which matches what the engine reads.
121
+ *
122
+ * i.e.
123
+ * Need to change reportLevels and failLevels to match with level declerations in the engine.
124
+ * replace violation with level.violation
125
+ * Need to change array of policies into a string
126
+ * ["CI162_5_2_DCP070116","CI162_5_2_DCP070116"] to "CI162_5_2_DCP070116,CI162_5_2_DCP070116"
127
+ *
128
+ * @param {Object} ACConfig - Provide the config object in which needs to be processed.
129
+ *
130
+ * @return {Object} ACConfig - return the config object which has been made engine readable
131
+ *
132
+ * @memberOf this
133
+ */
134
+ async function processACConfig(ACConfig) {
135
+ ACConstants.DEBUG && console.log("START 'processACConfig' function");
136
+ const validArchiveKeywords = ["latest", "preview", "versioned"];
137
+ // Convert the reportLevels and failLevels to match with what the engine provides
138
+ // Don't need to convert the levels from the input as we are going to compare with out the level.
139
+ // by using contains algo, so that in the reports we can add it without level, until the engine is
140
+ // updated to pass back with out level.
141
+ //ACConfig.reportLevels = mapLevelsToEngineReadableLevels(ACConfig.reportLevels);
142
+ //ACConfig.failLevels = mapLevelsToEngineReadableLevels(ACConfig.failLevels);
143
+ // Convert the policies into a comma seperated string
144
+ ACConfig.policies = convertPolicies(ACConfig.policies);
145
+ // In the case that baseA11yServerURL is provided in the config use that as the base otherwise switch to the default one from the ACConstants object
146
+ let ruleServer = ACConfig.ruleServer ? ACConfig.ruleServer : ACConstants.ruleServer;
147
+ // Get and parse the rule archive.
148
+ let ruleArchiveFile = `${ruleServer}${ruleServer.includes("jsdelivr.net") ? "@next" : ""}/archives.json`;
149
+ let ruleArchiveParse;
150
+ try {
151
+ if (ACConfig.ignoreHTTPSErrors) {
152
+ process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
153
+ }
154
+ ruleArchiveParse = await fetch_get(ruleArchiveFile);
155
+ }
156
+ catch (err) {
157
+ console.log(err);
158
+ throw new Error(err);
159
+ }
160
+ let ruleArchivePath = null;
161
+ if (ruleArchiveParse && ruleArchiveParse.length > 0) {
162
+ ACConstants.DEBUG && console.log("Found archiveFile: " + ruleArchiveFile);
163
+ ACConfig.ruleArchiveSet = ruleArchiveParse;
164
+ let ruleArchive = ACConfig.ruleArchive;
165
+ // If the user asked us to sync the rule version with the tool version, we need to figure out what the last rule version was
166
+ if (ruleArchive === "versioned") {
167
+ if (!ACConfig.toolVersion) {
168
+ ruleArchive = "latest";
169
+ }
170
+ else {
171
+ ruleArchive = findLatestArchiveId(ACConfig.ruleArchiveSet, ACConfig.toolVersion);
172
+ }
173
+ }
174
+ ACConfig.ruleArchiveLabel = ACConfig.ruleArchive;
175
+ for (let i = 0; i < ACConfig.ruleArchiveSet.length; i++) {
176
+ if (ruleArchive === ACConfig.ruleArchiveSet[i].id && !ACConfig.ruleArchiveSet[i].sunset) {
177
+ ruleArchivePath = ACConfig.ruleArchiveSet[i].path;
178
+ ACConfig.ruleArchiveVersion = ACConfig.ruleArchiveSet[i].version;
179
+ ACConfig.ruleArchiveLabel = ruleArchiveParse[i].name + " (" + ruleArchiveParse[i].id + ")";
180
+ break;
181
+ }
182
+ }
183
+ if (!ruleArchivePath || ACConfig.ruleArchiveVersion === null) {
184
+ const errStr = "[ERROR] RuleArchiveInvalid: Make Sure correct rule archive is provided in the configuration file. More information is available in the README.md";
185
+ console.error(errStr);
186
+ throw new Error(errStr);
187
+ }
188
+ for (let i = 0; i < ACConfig.ruleArchiveSet.length; i++) {
189
+ if (ACConfig.ruleArchiveVersion === ACConfig.ruleArchiveSet[i].version && !validArchiveKeywords.includes(ACConfig.ruleArchiveSet[i].id)) {
190
+ ACConfig.ruleArchivePath = ACConfig.ruleArchiveSet[i].path;
191
+ break;
192
+ }
193
+ }
194
+ //}
195
+ }
196
+ else {
197
+ const errStr = "[ERROR] UnableToParseArchive: Archives are unable to be parse. Contact support team.";
198
+ console.error(errStr);
199
+ throw new Error(errStr);
200
+ }
201
+ // Build the new rulePack based of the baseA11yServerURL
202
+ if (!ACConfig.rulePack) {
203
+ if (ruleServer.includes("jsdelivr.net")) {
204
+ ACConfig.rulePack = `${ruleServer}@${ACConfig.ruleArchiveVersion}`;
205
+ }
206
+ else {
207
+ ACConfig.rulePack = `${ruleServer}${ruleArchivePath}/js`;
208
+ }
209
+ }
210
+ ACConfig.ruleServer = ruleServer;
211
+ ACConstants.DEBUG && console.log("Built new rulePack: " + ACConfig.rulePack);
212
+ ACConstants.DEBUG && console.log("END 'processACConfig' function");
213
+ // Return the updated ACConfig object
214
+ return ACConfig;
215
+ }
216
+ /**
217
+ * This function is responsible initializing all the default values for the configurations, in the case any
218
+ * of the config options are missing.
219
+ *
220
+ * @param {Object} config - Provide the config object in which we need to initialize the default values.
221
+ *
222
+ * @return {Object} config - return the config object which has all the default values, in the case
223
+ * some of the options are null or undefined.
224
+ *
225
+ * @memberOf this
226
+ */
227
+ function initializeDefaults(config) {
228
+ ACConstants.DEBUG && console.log("START 'initializeDefaults' function");
229
+ ACConstants.DEBUG && console.log("Config before initialization: ");
230
+ ACConstants.DEBUG && console.log(config);
231
+ // Make sure all the following options are defined, otherwise reset them to default values.
232
+ config.ruleArchiveLabel = config.ruleArchiveLabel || ACConstants.ruleArchiveLabel || config.ruleArchive;
233
+ // For capture screenshots need to check for null or undefined and then set default otherwise it will evaluate the
234
+ // boolean which causes it to always comply with the default value and not user provided option
235
+ if (config.captureScreenshots === null || config.captureScreenshots === undefined || typeof config.captureScreenshots === "undefined") {
236
+ config.captureScreenshots = ACConstants.captureScreenshots;
237
+ }
238
+ // Load in the package.json file so that we can extract the module name and the version to build
239
+ // a toolID which needs to be used when results are build for the purpose of keeping track of
240
+ // which tool is uploading the results.
241
+ let packageDir = "";
242
+ try {
243
+ packageDir = __dirname;
244
+ }
245
+ catch (err) {
246
+ // This line will be modified by sed for cjs vs mjs environments. Look at package.json before modifying
247
+ const __filename = fileURLToPath(import.meta.url);
248
+ const __dirname = path.dirname(__filename);
249
+ packageDir = __dirname;
250
+ }
251
+ while (!fs.existsSync(pathLib.join(packageDir, "package.json"))) {
252
+ packageDir = pathLib.join(packageDir, "..");
253
+ }
254
+ const packageObject = JSON.parse(fs.readFileSync(pathLib.join(packageDir, 'package.json')).toString());
255
+ // Build the toolID based on name and version
256
+ config.toolID = packageObject.name + "-v" + packageObject.version;
257
+ config.toolName = packageObject.name;
258
+ config.toolVersion = packageObject.version;
259
+ // Using the uuid module generate a uuid number which is used to assoiciate to the scans that
260
+ // are done for a single run of karma.
261
+ config.scanID = crypto.randomUUID();
262
+ for (const key in ACConstants) {
263
+ config[key] = typeof config[key] !== "undefined" ? config[key] : ACConstants[key];
264
+ }
265
+ ACConstants.DEBUG && console.log("Config after initialization: ");
266
+ ACConstants.DEBUG && console.log(config);
267
+ ACConstants.DEBUG && console.log("END 'initializeDefaults' function");
268
+ }
269
+ /**
270
+ * This function is responsible reading in the .yaml or .yml or .json and set the config options based on this.
271
+ *
272
+ * @return {Object} config - return the config object that was read in, refer to function initializeDefaults
273
+ * to view how the object is to be constructed.
274
+ *
275
+ * @memberOf this
276
+ */
277
+ async function loadConfigFromYAMLorJSONFile() {
278
+ ACConstants.DEBUG && console.log("START 'loadConfigFromYAMLorJSONFile' function");
279
+ // Variable Decleration
280
+ let config = {};
281
+ // Get the current working directory, where we will look for the yaml, yml or json file
282
+ let workingDir = process.cwd();
283
+ ACConstants.DEBUG && console.log("Working directory set to: " + workingDir);
284
+ // List of files to look for in that order, in the case even one is found we stop and load that as the config.
285
+ // Theses files will be checked for in the working directory:
286
+ // ./.achecker.yml
287
+ // ./.achecker.yaml
288
+ // ./achecker.js
289
+ // ./achecker.json
290
+ // ./.config/.achecker.yml
291
+ // ./.config/.achecker.yaml
292
+ // ./.config/achecker.js
293
+ // ./.config/achecker.json
294
+ // The node module, require will load js or json depending on which one is present, in the case
295
+ // both json and js are present it loads js first.
296
+ // Refer to ACConstants.js for more details
297
+ let configFiles = ACConstants.configFiles;
298
+ // Loop over all the possible location where the config file can reside, if one is found load it and break out.
299
+ for (let i = 0; i < configFiles.length; i++) {
300
+ // Get the full path to the config file we are going to check
301
+ let fileToCheck = pathLib.join(workingDir, configFiles[i]);
302
+ ACConstants.DEBUG && console.log("Checking file: " + fileToCheck);
303
+ // Get the extension of the file we are about to scan
304
+ let fileExtension = fileToCheck.substr(fileToCheck.lastIndexOf('.') + 1);
305
+ // If this is a yml or yaml file verify that the file exists and then load as such.
306
+ if (fileExtension === "yml" || fileExtension === "yaml") {
307
+ // Start checking which files exists, if it exists then load it as the config that was read in
308
+ // We only allow specifying a file, and the order it checks is based on what is specified in the array.
309
+ // i.e. So in the case that it finds yml, it will load and not check the rest, etc...
310
+ if (fs.existsSync(fileToCheck)) {
311
+ ACConstants.DEBUG && console.log("File: " + fileToCheck + " exists loading it.");
312
+ ACConstants.DEBUG && console.log("Loading as YAML file.");
313
+ // Load in as yml or yaml file and return this object
314
+ return YAML.load(fs.readFileSync(fileToCheck), 'utf8');
315
+ }
316
+ }
317
+ else {
318
+ ACConstants.DEBUG && console.log("Trying to load as json or js.");
319
+ // Need to use try/catch mech so that in the case the require throws an exception, we can
320
+ // catch this and discatd the error, as in the case there is no config file provided then
321
+ // we load in default values.
322
+ try {
323
+ // call the resolve to check if the file exists or not, and get the actualy path if it was js or json
324
+ let jsOrJSONFile = require.resolve(fileToCheck);
325
+ // Only try to load the achecker js or json file if it exists.
326
+ if (jsOrJSONFile) {
327
+ ACConstants.DEBUG && console.log("Loading: " + jsOrJSONFile);
328
+ // Load in as json or js and return this object
329
+ try {
330
+ return require(fileToCheck);
331
+ }
332
+ catch (err) {
333
+ try {
334
+ return await import(fileToCheck);
335
+ }
336
+ catch (err) {
337
+ return JSON.parse(fs.readFileSync(jsOrJSONFile).toString());
338
+ }
339
+ }
340
+ }
341
+ }
342
+ catch (e) {
343
+ ACConstants.DEBUG && console.log("JSON or JS file does not exists, will load default config.");
344
+ }
345
+ }
346
+ }
347
+ ACConstants.DEBUG && console.log("END 'loadConfigFromYAMLorJSONFile' function");
348
+ return config;
349
+ }
350
+ /**
351
+ * This function is responsible for processing the karma configuration for accessibility-checker.
352
+ * The ACConfig provided in the Karma configuration will be processed by this
353
+ * function and then the config variables will be assoiciated to the global space so that
354
+ * they can be accessed from window.__karma__.config
355
+ *
356
+ * @param {Object} config - All the Karma configuration, we will extract what we need from this over
357
+ * all object, we need the entire object so that we can reasign some config
358
+ * variables to global scope so that all karma testscases/scripts can access
359
+ * them.
360
+ *
361
+ * @return - N/A - Object will be processed and all the params that are needed for this module will
362
+ * be extracted and then the entire object will be added to global space.
363
+ *
364
+ * @memberOf this
365
+ */
366
+ async function processConfiguration(config) {
367
+ ACConstants.DEBUG && console.log("START 'processConfiguration' function");
368
+ // Variable Decleration
369
+ let ACConfig = null;
370
+ let configFromFile = null;
371
+ // Read in the .yaml (.yml) or .json file to load in the configuration
372
+ configFromFile = await loadConfigFromYAMLorJSONFile();
373
+ ACConstants.DEBUG && console.log("Loaded config from file: ");
374
+ ACConstants.DEBUG && console.log(configFromFile);
375
+ // In the case configuration was provided in a yaml, yml or json file, then set this as the configuration
376
+ // otherwise load them from the Karma configuration.
377
+ if (configFromFile !== null && typeof (configFromFile) !== "undefined" && Object.keys(configFromFile).length !== 0) {
378
+ ACConstants.DEBUG && console.log("Using config which was loaded from config file.");
379
+ ACConfig = configFromFile;
380
+ }
381
+ else if (config !== null && typeof (config) !== "undefined" && Object.keys(config).length !== 0) {
382
+ // Extract the ACConfig from the overall karma configuration, in the case config file
383
+ // was not provided.
384
+ ACConfig = config;
385
+ }
386
+ else {
387
+ ACConfig = JSON.parse(JSON.stringify(ACConstants));
388
+ }
389
+ // In the case the ACConfig object is not defined, then define it with default config options so
390
+ // it can be set in window.__karma__.config.ACConfig, so that we know even in the testcases, other
391
+ // wrapper scripts that there was nothing defined at all, and at the same time to make sure that this
392
+ // code was actually executed.
393
+ initializeDefaults(ACConfig);
394
+ // Now we process the final accessibility-checker config object that is build to make sure it is valid, also need to perform some
395
+ // mapping for provided paremeters to actualy read by the engine.
396
+ await processACConfig(ACConfig);
397
+ // In the case the Karma config is set to config.LOG_DEBUG then also enable the accessibility-checker debuging
398
+ ACConfig.DEBUG = ACConstants.DEBUG;
399
+ ACConstants.DEBUG && console.log("END 'processConfiguration' function");
400
+ return ACConfig;
401
+ }
402
+ let config = null;
403
+ export class ACConfigManager {
404
+ static async setConfig(inConfig) {
405
+ config = await processConfiguration(inConfig);
406
+ ReporterManager.setConfig(config);
407
+ }
408
+ static async getConfig() {
409
+ return this.getConfigUnsupported();
410
+ }
411
+ static async getConfigUnsupported() {
412
+ if (!config) {
413
+ await ACConfigManager.setConfig();
414
+ }
415
+ return config;
416
+ }
417
+ static getConfigNow() {
418
+ return config;
419
+ }
420
+ }
421
+ //# sourceMappingURL=ACConfigManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ACConfigManager.js","sourceRoot":"","sources":["../../../../../src-ts/lib/common/config/ACConfigManager.ts"],"names":[],"mappings":"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"}