ffc-pay-etl-framework 1.4.3-alpha.9 → 1.4.4-alpha.11

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 (84) hide show
  1. package/package.json +24 -27
  2. package/snyk-monitor-result.json +2 -2
  3. package/snyk_report.html +1 -1
  4. package/test-output/junit.xml +185 -0
  5. package/test-output/lcov-report/base.css +224 -0
  6. package/test-output/lcov-report/block-navigation.js +87 -0
  7. package/test-output/lcov-report/database_connections/index.html +146 -0
  8. package/test-output/lcov-report/database_connections/index.js.html +106 -0
  9. package/test-output/lcov-report/database_connections/postgresDatabaseConnection.js.html +226 -0
  10. package/test-output/lcov-report/database_connections/providedConnection.js.html +142 -0
  11. package/test-output/lcov-report/destinations/consoleDestination.js.html +199 -0
  12. package/test-output/lcov-report/destinations/csvFileDestination.js.html +310 -0
  13. package/test-output/lcov-report/destinations/index.html +176 -0
  14. package/test-output/lcov-report/destinations/index.js.html +121 -0
  15. package/test-output/lcov-report/destinations/postgresDestination.js.html +502 -0
  16. package/test-output/lcov-report/destinations/sqlFileDestination.js.html +328 -0
  17. package/test-output/lcov-report/favicon.png +0 -0
  18. package/test-output/lcov-report/index.html +206 -0
  19. package/test-output/lcov-report/lib/index.html +131 -0
  20. package/test-output/lcov-report/lib/index.js.html +403 -0
  21. package/test-output/lcov-report/lib/rowMetaData.js.html +157 -0
  22. package/test-output/lcov-report/loaders/csvloader.js.html +259 -0
  23. package/test-output/lcov-report/loaders/index.html +131 -0
  24. package/test-output/lcov-report/loaders/index.js.html +100 -0
  25. package/test-output/lcov-report/misc/index.html +131 -0
  26. package/test-output/lcov-report/misc/index.js.html +85 -0
  27. package/test-output/lcov-report/misc/postgresSQLTask.js.html +298 -0
  28. package/test-output/lcov-report/prettify.css +1 -0
  29. package/test-output/lcov-report/prettify.js +2 -0
  30. package/test-output/lcov-report/sort-arrow-sprite.png +0 -0
  31. package/test-output/lcov-report/sorter.js +210 -0
  32. package/test-output/lcov-report/transformers/fakerTransformer.js.html +229 -0
  33. package/test-output/lcov-report/transformers/index.html +161 -0
  34. package/test-output/lcov-report/transformers/index.js.html +112 -0
  35. package/test-output/lcov-report/transformers/stringReplaceTransformer.js.html +190 -0
  36. package/test-output/lcov-report/transformers/toUpperCaseTransformer.js.html +166 -0
  37. package/test-output/lcov-report/validators/index.html +161 -0
  38. package/test-output/lcov-report/validators/index.js.html +112 -0
  39. package/test-output/lcov-report/validators/multiToolValidator.js.html +232 -0
  40. package/test-output/lcov-report/validators/requiredValidator.js.html +190 -0
  41. package/test-output/lcov-report/validators/uniqueValidator.js.html +208 -0
  42. package/test-output/lcov.info +858 -0
  43. package/.devcontainer/devcontainer.json +0 -43
  44. package/.devcontainer/docker-compose.yaml +0 -15
  45. package/.devcontainer/postgres_init.sql +0 -5
  46. package/.dockerignore +0 -10
  47. package/.github/workflows/main.yaml +0 -77
  48. package/.snyk +0 -5
  49. package/CODE_OF_CONDUCT.md +0 -51
  50. package/CONTRIBUTING.md +0 -45
  51. package/ISSUE_TEMPLATE.md +0 -39
  52. package/Jenkinsfile +0 -3
  53. package/PULL_REQUEST_TEMPLATE.md +0 -32
  54. package/__mocks__/fs.js +0 -21
  55. package/eslint.config.js +0 -3
  56. package/jest/setEnvVars.js +0 -1
  57. package/sonar-project.properties +0 -3
  58. package/test/database_connections/postgresDatabaseConnection.test.js +0 -89
  59. package/test/database_connections/providedConnection.test.js +0 -36
  60. package/test/destinations/consoleDestination.test.js +0 -80
  61. package/test/destinations/csvFileDestination.test.js +0 -97
  62. package/test/destinations/postgresDestination.test.js +0 -311
  63. package/test/destinations/sqlFileDestination.test.js +0 -150
  64. package/test/etl/etl.test.js +0 -186
  65. package/test/fixtures/Avg_Rainfall_30yrs.csv +0 -314
  66. package/test/fixtures/Crop_growing_period.csv +0 -314
  67. package/test/fixtures/Crops.csv +0 -2485
  68. package/test/fixtures/Farmer_Wages.csv +0 -1899
  69. package/test/fixtures/Fertilizer_Consumption.csv +0 -2482
  70. package/test/fixtures/GDP.csv +0 -2150
  71. package/test/fixtures/Harvest_prices.csv +0 -1933
  72. package/test/fixtures/Irrigation.csv +0 -2045
  73. package/test/fixtures/LandUse.csv +0 -2382
  74. package/test/fixtures/Livestock_Milk_Production.csv +0 -1446
  75. package/test/fixtures/Monthly_Rainfall.csv +0 -1704
  76. package/test/fixtures/SoilType.csv +0 -314
  77. package/test/loaders/csvLoader.test.js +0 -280
  78. package/test/misc/postgresSQLTask.test.js +0 -82
  79. package/test/transformers/fakerTransformer.test.js +0 -63
  80. package/test/transformers/stringReplaceTransformer.test.js +0 -55
  81. package/test/transformers/toUpperCaseTransformer.test.js +0 -26
  82. package/test/validators/multiToolValidator.test.js +0 -51
  83. package/test/validators/requiredValidator.test.js +0 -63
  84. package/test/validators/uniqueValidator.test.js +0 -84
package/package.json CHANGED
@@ -1,30 +1,42 @@
1
1
  {
2
2
  "name": "ffc-pay-etl-framework",
3
- "version": "1.4.3-alpha.9",
3
+ "version": "1.4.4-alpha.11",
4
4
  "description": "A framework for creating ETL pipelines in node",
5
- "publisher": "Defra",
6
5
  "main": "index.js",
7
- "private": false,
6
+ "repository": "https://github.com/DEFRA/ffc-pay-etl-framework",
7
+ "author": "Defra",
8
+ "contributors": [
9
+ "Charlie Benger-Stevenson charlie.benger-stevenson.external@eviden.com",
10
+ "Leigh Godson leigh.godson@atos.net",
11
+ "Sam Plackett samuel.plackett@atos.net"
12
+ ],
13
+ "license": "OGL-UK-3.0",
14
+ "dependencies": {
15
+ "@faker-js/faker": "8.4.1",
16
+ "csv-parse": "6.1.0",
17
+ "sequelize": "6.37.3",
18
+ "validator": "13.15.23"
19
+ },
20
+ "devDependencies": {
21
+ "debug": "4.3.6",
22
+ "eslint": "9.39.1",
23
+ "jest": "29.7.0",
24
+ "jest-junit": "16.0.0",
25
+ "neostandard": "0.12.2",
26
+ "nodemon": "3.1.4",
27
+ "prettier": "3.3.3"
28
+ },
8
29
  "scripts": {
9
30
  "test": "jest",
10
31
  "test:watch": "jest --watchAll",
11
32
  "test:lint": "eslint",
12
33
  "test:lint:fix": "eslint --fix",
13
34
  "dev": "nodemon index.js",
14
- "clean": "rm -rf ./dist",
15
35
  "example": "node ./examples/sql-return-values.js"
16
36
  },
17
37
  "keywords": [
18
38
  "ETL"
19
39
  ],
20
- "author": "Defra",
21
- "contributors": [
22
- "Charlie Benger-Stevenson charlie.benger-stevenson.external@eviden.com",
23
- "Leigh Godson leigh.godson@atos.net",
24
- "Sam Plackett samuel.plackett@atos.net"
25
- ],
26
- "license": "OGL-UK-3.0",
27
- "repository": "https://github.com/DEFRA/ffc-pay-etl-framework",
28
40
  "jest": {
29
41
  "setupFiles": [
30
42
  "<rootDir>/jest/setEnvVars.js"
@@ -58,20 +70,5 @@
58
70
  }
59
71
  ]
60
72
  ]
61
- },
62
- "devDependencies": {
63
- "debug": "4.3.6",
64
- "eslint": "9.39.1",
65
- "jest": "29.7.0",
66
- "jest-junit": "16.0.0",
67
- "neostandard": "0.12.2",
68
- "nodemon": "3.1.4",
69
- "prettier": "3.3.3"
70
- },
71
- "dependencies": {
72
- "@faker-js/faker": "8.4.1",
73
- "csv-parse": "6.1.0",
74
- "sequelize": "6.37.3",
75
- "validator": "13.15.23"
76
73
  }
77
74
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "ok": true,
3
3
  "org": "defra-ffc",
4
- "id": "e182fb9b-7aed-46c4-b042-28e9823a0cbe",
4
+ "id": "e9d99bef-7426-4f4d-bf10-346b4ed4d49a",
5
5
  "isMonitored": true,
6
6
  "licensesPolicy": {
7
7
  "severities": {
@@ -87,7 +87,7 @@
87
87
  }
88
88
  }
89
89
  },
90
- "uri": "https://app.snyk.io/org/defra-ffc/project/9a158ae4-d085-4d97-821a-1540da2dea53/history/eb6e249b-16cc-4ce5-95ac-cceb03d1c661",
90
+ "uri": "https://app.snyk.io/org/defra-ffc/project/9a158ae4-d085-4d97-821a-1540da2dea53/history/15170b10-2e12-4d7a-b30d-ba20e2b19231",
91
91
  "alerts": [
92
92
  {
93
93
  "msg": "You have reached your monthly limit of 200 private tests for your defra-ffc org.\nTo learn more about our plans and increase your tests limit visit https://snyk.io/plans.",
package/snyk_report.html CHANGED
@@ -456,7 +456,7 @@
456
456
  <div class="header-wrap">
457
457
  <h1 class="project__header__title">Snyk test report</h1>
458
458
 
459
- <p class="timestamp">December 5th 2025, 2:34:34 pm (UTC+00:00)</p>
459
+ <p class="timestamp">December 5th 2025, 2:59:43 pm (UTC+00:00)</p>
460
460
  </div>
461
461
  <div class="source-panel">
462
462
  <span>Scanned the following path:</span>
@@ -0,0 +1,185 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testsuites name="jest tests" tests="76" failures="0" errors="0" time="5.148">
3
+ <testsuite name="PostgresSQLTask tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:11" time="1.449" tests="6">
4
+ <testcase classname="PostgresSQLTask tests should execute plain sql" name="PostgresSQLTask tests should execute plain sql" time="0.03">
5
+ </testcase>
6
+ <testcase classname="PostgresSQLTask tests should get column name placeholders and character positions" name="PostgresSQLTask tests should get column name placeholders and character positions" time="0.008">
7
+ </testcase>
8
+ <testcase classname="PostgresSQLTask tests should interpolate column values" name="PostgresSQLTask tests should interpolate column values" time="0.001">
9
+ </testcase>
10
+ <testcase classname="PostgresSQLTask tests should interpolate column values into sql" name="PostgresSQLTask tests should interpolate column values into sql" time="0.002">
11
+ </testcase>
12
+ <testcase classname="PostgresSQLTask tests should get the connection name" name="PostgresSQLTask tests should get the connection name" time="0.001">
13
+ </testcase>
14
+ <testcase classname="PostgresSQLTask tests should set the ETL object" name="PostgresSQLTask tests should set the ETL object" time="0.002">
15
+ </testcase>
16
+ </testsuite>
17
+ <testsuite name="sqlFileDestination tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:11" time="1.505" tests="4">
18
+ <testcase classname="sqlFileDestination tests should write an insert statement" name="sqlFileDestination tests should write an insert statement" time="0.016">
19
+ </testcase>
20
+ <testcase classname="sqlFileDestination tests should set the connection" name="sqlFileDestination tests should set the connection" time="0.001">
21
+ </testcase>
22
+ <testcase classname="sqlFileDestination tests should get the connection name" name="sqlFileDestination tests should get the connection name" time="0.001">
23
+ </testcase>
24
+ <testcase classname="sqlFileDestination tests should set tasks" name="sqlFileDestination tests should set tasks" time="0.001">
25
+ </testcase>
26
+ </testsuite>
27
+ <testsuite name="uniqueValidator tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:11" time="1.478" tests="3">
28
+ <testcase classname="uniqueValidator tests should not add any errors if all fields are unique" name="uniqueValidator tests should not add any errors if all fields are unique" time="0.024">
29
+ </testcase>
30
+ <testcase classname="uniqueValidator tests should add errors if specified field is not unique" name="uniqueValidator tests should add errors if specified field is not unique" time="0.002">
31
+ </testcase>
32
+ <testcase classname="uniqueValidator tests should use custom error message" name="uniqueValidator tests should use custom error message" time="0.003">
33
+ </testcase>
34
+ </testsuite>
35
+ <testsuite name="csvLoader tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:11" time="1.811" tests="10">
36
+ <testcase classname="csvLoader tests should load a csv file" name="csvLoader tests should load a csv file" time="0.044">
37
+ </testcase>
38
+ <testcase classname="csvLoader tests should count csv file lines" name="csvLoader tests should count csv file lines" time="0.005">
39
+ </testcase>
40
+ <testcase classname="csvLoader tests should remove non-printable characters from CSV data" name="csvLoader tests should remove non-printable characters from CSV data" time="0.004">
41
+ </testcase>
42
+ <testcase classname="csvLoader tests should load from a readable stream" name="csvLoader tests should load from a readable stream" time="0.005">
43
+ </testcase>
44
+ <testcase classname="csvLoader tests should count lines from a readable stream" name="csvLoader tests should count lines from a readable stream" time="0.003">
45
+ </testcase>
46
+ <testcase classname="csvLoader tests should remove non-printable characters from CSV data from a stream" name="csvLoader tests should remove non-printable characters from CSV data from a stream" time="0.003">
47
+ </testcase>
48
+ <testcase classname="csvLoader tests should start processing from the specified starting line" name="csvLoader tests should start processing from the specified starting line" time="0.002">
49
+ </testcase>
50
+ <testcase classname="csvLoader tests should handle relaxed quote parsing" name="csvLoader tests should handle relaxed quote parsing" time="0.003">
51
+ </testcase>
52
+ <testcase classname="csvLoader tests should handle empty CSV" name="csvLoader tests should handle empty CSV" time="0.002">
53
+ </testcase>
54
+ <testcase classname="csvLoader tests should handle CSV with only headers" name="csvLoader tests should handle CSV with only headers" time="0.002">
55
+ </testcase>
56
+ </testsuite>
57
+ <testsuite name="requiredValidator tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:12" time="0.346" tests="3">
58
+ <testcase classname="requiredValidator tests should not add any errors if all required fields are present" name="requiredValidator tests should not add any errors if all required fields are present" time="0.016">
59
+ </testcase>
60
+ <testcase classname="requiredValidator tests should add errors for all missing required fields" name="requiredValidator tests should add errors for all missing required fields" time="0.002">
61
+ </testcase>
62
+ <testcase classname="requiredValidator tests should use custom error message" name="requiredValidator tests should use custom error message" time="0.002">
63
+ </testcase>
64
+ </testsuite>
65
+ <testsuite name="postgresConnection tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:12" time="0.385" tests="2">
66
+ <testcase classname="postgresConnection tests should connect" name="postgresConnection tests should connect" time="0.003">
67
+ </testcase>
68
+ <testcase classname="postgresConnection tests should fail to connect" name="postgresConnection tests should fail to connect" time="0.016">
69
+ </testcase>
70
+ </testsuite>
71
+ <testsuite name="postgresDestination tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:10" time="2.033" tests="23">
72
+ <testcase classname="postgresDestination tests should write a row" name="postgresDestination tests should write a row" time="0.024">
73
+ </testcase>
74
+ <testcase classname="postgresDestination tests should fire result event" name="postgresDestination tests should fire result event" time="0.006">
75
+ </testcase>
76
+ <testcase classname="postgresDestination tests should produce debug output" name="postgresDestination tests should produce debug output" time="0.003">
77
+ </testcase>
78
+ <testcase classname="postgresDestination tests should format a date as specified" name="postgresDestination tests should format a date as specified" time="0.002">
79
+ </testcase>
80
+ <testcase classname="postgresDestination tests should write a sql statement" name="postgresDestination tests should write a sql statement" time="0.001">
81
+ </testcase>
82
+ <testcase classname="postgresDestination tests should write a sql statement with schema if provided" name="postgresDestination tests should write a sql statement with schema if provided" time="0.001">
83
+ </testcase>
84
+ <testcase classname="postgresDestination tests should write a sql statement with a date format" name="postgresDestination tests should write a sql statement with a date format" time="0.001">
85
+ </testcase>
86
+ <testcase classname="postgresDestination tests should write a sql statement correctly if date but no value" name="postgresDestination tests should write a sql statement correctly if date but no value" time="0.001">
87
+ </testcase>
88
+ <testcase classname="postgresDestination tests should write a sql statement when a target column is a keyword" name="postgresDestination tests should write a sql statement when a target column is a keyword" time="0">
89
+ </testcase>
90
+ <testcase classname="postgresDestination tests should write a sql statement when a source column is a keyword and there is no target column" name="postgresDestination tests should write a sql statement when a source column is a keyword and there is no target column" time="0.001">
91
+ </testcase>
92
+ <testcase classname="postgresDestination tests should write a sql statement when a target column type is a number" name="postgresDestination tests should write a sql statement when a target column type is a number" time="0.001">
93
+ </testcase>
94
+ <testcase classname="postgresDestination tests should write a sql statement when a target column type is a number but the value is NaN" name="postgresDestination tests should write a sql statement when a target column type is a number but the value is NaN" time="0">
95
+ </testcase>
96
+ <testcase classname="postgresDestination tests should write a sql statement when a target column has the returning flag set" name="postgresDestination tests should write a sql statement when a target column has the returning flag set" time="0">
97
+ </testcase>
98
+ <testcase classname="postgresDestination tests should fire off any addtional tasks" name="postgresDestination tests should fire off any addtional tasks" time="0.005">
99
+ </testcase>
100
+ <testcase classname="postgresDestination tests should get connection name" name="postgresDestination tests should get connection name" time="0.001">
101
+ </testcase>
102
+ <testcase classname="postgresDestination tests should return true if mapping contains one or more mappings that have the returning flag set" name="postgresDestination tests should return true if mapping contains one or more mappings that have the returning flag set" time="0.004">
103
+ </testcase>
104
+ <testcase classname="postgresDestination tests should return false if mapping does not contain one or more mappings that have the returning flag set" name="postgresDestination tests should return false if mapping does not contain one or more mappings that have the returning flag set" time="0">
105
+ </testcase>
106
+ <testcase classname="postgresDestination tests should return array of mappings that have the returning flag set" name="postgresDestination tests should return array of mappings that have the returning flag set" time="0.001">
107
+ </testcase>
108
+ <testcase classname="postgresDestination tests writeInsertStatement should handle no ignoredColumns provided" name="postgresDestination tests writeInsertStatement should handle no ignoredColumns provided" time="0.035">
109
+ </testcase>
110
+ <testcase classname="postgresDestination tests writeInsertStatement should handle ignoredColumns provided" name="postgresDestination tests writeInsertStatement should handle ignoredColumns provided" time="0.001">
111
+ </testcase>
112
+ <testcase classname="postgresDestination tests writeInsertStatement should handle mixed columns" name="postgresDestination tests writeInsertStatement should handle mixed columns" time="0">
113
+ </testcase>
114
+ <testcase classname="postgresDestination tests writeInsertStatement should handle all columns ignored" name="postgresDestination tests writeInsertStatement should handle all columns ignored" time="0.001">
115
+ </testcase>
116
+ <testcase classname="postgresDestination tests writeInsertStatement should handle case sensitivity" name="postgresDestination tests writeInsertStatement should handle case sensitivity" time="0.001">
117
+ </testcase>
118
+ </testsuite>
119
+ <testsuite name="csvFileDestination tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:11" time="1.989" tests="4">
120
+ <testcase classname="csvFileDestination tests should write a csv line" name="csvFileDestination tests should write a csv line" time="0.053">
121
+ </testcase>
122
+ <testcase classname="csvFileDestination tests should execute additional tasks" name="csvFileDestination tests should execute additional tasks" time="0.003">
123
+ </testcase>
124
+ <testcase classname="csvFileDestination tests should set a connection" name="csvFileDestination tests should set a connection" time="0.001">
125
+ </testcase>
126
+ <testcase classname="csvFileDestination tests should get the connection name" name="csvFileDestination tests should get the connection name" time="0.001">
127
+ </testcase>
128
+ </testsuite>
129
+ <testsuite name="consoleDestination tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:12" time="0.503" tests="4">
130
+ <testcase classname="consoleDestination tests should write to the console" name="consoleDestination tests should write to the console" time="0.01">
131
+ </testcase>
132
+ <testcase classname="consoleDestination tests should set a connection" name="consoleDestination tests should set a connection" time="0.001">
133
+ </testcase>
134
+ <testcase classname="consoleDestination tests should get the connection name" name="consoleDestination tests should get the connection name" time="0.002">
135
+ </testcase>
136
+ <testcase classname="consoleDestination tests should execute additional tasks" name="consoleDestination tests should execute additional tasks" time="0.013">
137
+ </testcase>
138
+ </testsuite>
139
+ <testsuite name="multilToolValidator tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:12" time="0.234" tests="1">
140
+ <testcase classname="multilToolValidator tests should not add any errors if all fields are valid" name="multilToolValidator tests should not add any errors if all fields are valid" time="0.006">
141
+ </testcase>
142
+ </testsuite>
143
+ <testsuite name="stringReplaceTransformer tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:12" time="0.303" tests="2">
144
+ <testcase classname="stringReplaceTransformer tests should replace a search string with a replacement string" name="stringReplaceTransformer tests should replace a search string with a replacement string" time="0.004">
145
+ </testcase>
146
+ <testcase classname="stringReplaceTransformer tests should replace all instances of a search string with a replacement string" name="stringReplaceTransformer tests should replace all instances of a search string with a replacement string" time="0.002">
147
+ </testcase>
148
+ </testsuite>
149
+ <testsuite name="toUpperCaseTransformer tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:13" time="0.209" tests="1">
150
+ <testcase classname="toUpperCaseTransformer tests should convert a string to upper case" name="toUpperCaseTransformer tests should convert a string to upper case" time="0.003">
151
+ </testcase>
152
+ </testsuite>
153
+ <testsuite name="ETL tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:11" time="2.305" tests="9">
154
+ <testcase classname="ETL tests should fire result event" name="ETL tests should fire result event" time="0.022">
155
+ </testcase>
156
+ <testcase classname="ETL tests should add a connection to the connections list" name="ETL tests should add a connection to the connections list" time="0.001">
157
+ </testcase>
158
+ <testcase classname="ETL tests should execute beforeETL task" name="ETL tests should execute beforeETL task" time="0.002">
159
+ </testcase>
160
+ <testcase classname="ETL tests should throw if no connection found for beforeETL task" name="ETL tests should throw if no connection found for beforeETL task" time="0.022">
161
+ </testcase>
162
+ <testcase classname="ETL tests should add transform to transformation list" name="ETL tests should add transform to transformation list" time="0.001">
163
+ </testcase>
164
+ <testcase classname="ETL tests should add destination to destination list" name="ETL tests should add destination to destination list" time="0.001">
165
+ </testcase>
166
+ <testcase classname="ETL tests should fail to add destination to destination list" name="ETL tests should fail to add destination to destination list" time="0.001">
167
+ </testcase>
168
+ <testcase classname="ETL tests should add validator to validator list" name="ETL tests should add validator to validator list" time="0">
169
+ </testcase>
170
+ <testcase classname="ETL tests should emit error event if destination fails" name="ETL tests should emit error event if destination fails" time="0.007">
171
+ </testcase>
172
+ </testsuite>
173
+ <testsuite name="ProvidedConnection" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:13" time="0.408" tests="2">
174
+ <testcase classname="ProvidedConnection should return a connection object with the correct name and db" name="ProvidedConnection should return a connection object with the correct name and db" time="0.001">
175
+ </testcase>
176
+ <testcase classname="ProvidedConnection should handle empty options" name="ProvidedConnection should handle empty options" time="0">
177
+ </testcase>
178
+ </testsuite>
179
+ <testsuite name="fakerTransformer tests" errors="0" failures="0" skipped="0" timestamp="2025-12-05T15:00:12" time="2.962" tests="2">
180
+ <testcase classname="fakerTransformer tests should convert a value to a fake" name="fakerTransformer tests should convert a value to a fake" time="2.567">
181
+ </testcase>
182
+ <testcase classname="fakerTransformer tests should support locales" name="fakerTransformer tests should support locales" time="0.003">
183
+ </testcase>
184
+ </testsuite>
185
+ </testsuites>
@@ -0,0 +1,224 @@
1
+ body, html {
2
+ margin:0; padding: 0;
3
+ height: 100%;
4
+ }
5
+ body {
6
+ font-family: Helvetica Neue, Helvetica, Arial;
7
+ font-size: 14px;
8
+ color:#333;
9
+ }
10
+ .small { font-size: 12px; }
11
+ *, *:after, *:before {
12
+ -webkit-box-sizing:border-box;
13
+ -moz-box-sizing:border-box;
14
+ box-sizing:border-box;
15
+ }
16
+ h1 { font-size: 20px; margin: 0;}
17
+ h2 { font-size: 14px; }
18
+ pre {
19
+ font: 12px/1.4 Consolas, "Liberation Mono", Menlo, Courier, monospace;
20
+ margin: 0;
21
+ padding: 0;
22
+ -moz-tab-size: 2;
23
+ -o-tab-size: 2;
24
+ tab-size: 2;
25
+ }
26
+ a { color:#0074D9; text-decoration:none; }
27
+ a:hover { text-decoration:underline; }
28
+ .strong { font-weight: bold; }
29
+ .space-top1 { padding: 10px 0 0 0; }
30
+ .pad2y { padding: 20px 0; }
31
+ .pad1y { padding: 10px 0; }
32
+ .pad2x { padding: 0 20px; }
33
+ .pad2 { padding: 20px; }
34
+ .pad1 { padding: 10px; }
35
+ .space-left2 { padding-left:55px; }
36
+ .space-right2 { padding-right:20px; }
37
+ .center { text-align:center; }
38
+ .clearfix { display:block; }
39
+ .clearfix:after {
40
+ content:'';
41
+ display:block;
42
+ height:0;
43
+ clear:both;
44
+ visibility:hidden;
45
+ }
46
+ .fl { float: left; }
47
+ @media only screen and (max-width:640px) {
48
+ .col3 { width:100%; max-width:100%; }
49
+ .hide-mobile { display:none!important; }
50
+ }
51
+
52
+ .quiet {
53
+ color: #7f7f7f;
54
+ color: rgba(0,0,0,0.5);
55
+ }
56
+ .quiet a { opacity: 0.7; }
57
+
58
+ .fraction {
59
+ font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace;
60
+ font-size: 10px;
61
+ color: #555;
62
+ background: #E8E8E8;
63
+ padding: 4px 5px;
64
+ border-radius: 3px;
65
+ vertical-align: middle;
66
+ }
67
+
68
+ div.path a:link, div.path a:visited { color: #333; }
69
+ table.coverage {
70
+ border-collapse: collapse;
71
+ margin: 10px 0 0 0;
72
+ padding: 0;
73
+ }
74
+
75
+ table.coverage td {
76
+ margin: 0;
77
+ padding: 0;
78
+ vertical-align: top;
79
+ }
80
+ table.coverage td.line-count {
81
+ text-align: right;
82
+ padding: 0 5px 0 20px;
83
+ }
84
+ table.coverage td.line-coverage {
85
+ text-align: right;
86
+ padding-right: 10px;
87
+ min-width:20px;
88
+ }
89
+
90
+ table.coverage td span.cline-any {
91
+ display: inline-block;
92
+ padding: 0 5px;
93
+ width: 100%;
94
+ }
95
+ .missing-if-branch {
96
+ display: inline-block;
97
+ margin-right: 5px;
98
+ border-radius: 3px;
99
+ position: relative;
100
+ padding: 0 4px;
101
+ background: #333;
102
+ color: yellow;
103
+ }
104
+
105
+ .skip-if-branch {
106
+ display: none;
107
+ margin-right: 10px;
108
+ position: relative;
109
+ padding: 0 4px;
110
+ background: #ccc;
111
+ color: white;
112
+ }
113
+ .missing-if-branch .typ, .skip-if-branch .typ {
114
+ color: inherit !important;
115
+ }
116
+ .coverage-summary {
117
+ border-collapse: collapse;
118
+ width: 100%;
119
+ }
120
+ .coverage-summary tr { border-bottom: 1px solid #bbb; }
121
+ .keyline-all { border: 1px solid #ddd; }
122
+ .coverage-summary td, .coverage-summary th { padding: 10px; }
123
+ .coverage-summary tbody { border: 1px solid #bbb; }
124
+ .coverage-summary td { border-right: 1px solid #bbb; }
125
+ .coverage-summary td:last-child { border-right: none; }
126
+ .coverage-summary th {
127
+ text-align: left;
128
+ font-weight: normal;
129
+ white-space: nowrap;
130
+ }
131
+ .coverage-summary th.file { border-right: none !important; }
132
+ .coverage-summary th.pct { }
133
+ .coverage-summary th.pic,
134
+ .coverage-summary th.abs,
135
+ .coverage-summary td.pct,
136
+ .coverage-summary td.abs { text-align: right; }
137
+ .coverage-summary td.file { white-space: nowrap; }
138
+ .coverage-summary td.pic { min-width: 120px !important; }
139
+ .coverage-summary tfoot td { }
140
+
141
+ .coverage-summary .sorter {
142
+ height: 10px;
143
+ width: 7px;
144
+ display: inline-block;
145
+ margin-left: 0.5em;
146
+ background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
147
+ }
148
+ .coverage-summary .sorted .sorter {
149
+ background-position: 0 -20px;
150
+ }
151
+ .coverage-summary .sorted-desc .sorter {
152
+ background-position: 0 -10px;
153
+ }
154
+ .status-line { height: 10px; }
155
+ /* yellow */
156
+ .cbranch-no { background: yellow !important; color: #111; }
157
+ /* dark red */
158
+ .red.solid, .status-line.low, .low .cover-fill { background:#C21F39 }
159
+ .low .chart { border:1px solid #C21F39 }
160
+ .highlighted,
161
+ .highlighted .cstat-no, .highlighted .fstat-no, .highlighted .cbranch-no{
162
+ background: #C21F39 !important;
163
+ }
164
+ /* medium red */
165
+ .cstat-no, .fstat-no, .cbranch-no, .cbranch-no { background:#F6C6CE }
166
+ /* light red */
167
+ .low, .cline-no { background:#FCE1E5 }
168
+ /* light green */
169
+ .high, .cline-yes { background:rgb(230,245,208) }
170
+ /* medium green */
171
+ .cstat-yes { background:rgb(161,215,106) }
172
+ /* dark green */
173
+ .status-line.high, .high .cover-fill { background:rgb(77,146,33) }
174
+ .high .chart { border:1px solid rgb(77,146,33) }
175
+ /* dark yellow (gold) */
176
+ .status-line.medium, .medium .cover-fill { background: #f9cd0b; }
177
+ .medium .chart { border:1px solid #f9cd0b; }
178
+ /* light yellow */
179
+ .medium { background: #fff4c2; }
180
+
181
+ .cstat-skip { background: #ddd; color: #111; }
182
+ .fstat-skip { background: #ddd; color: #111 !important; }
183
+ .cbranch-skip { background: #ddd !important; color: #111; }
184
+
185
+ span.cline-neutral { background: #eaeaea; }
186
+
187
+ .coverage-summary td.empty {
188
+ opacity: .5;
189
+ padding-top: 4px;
190
+ padding-bottom: 4px;
191
+ line-height: 1;
192
+ color: #888;
193
+ }
194
+
195
+ .cover-fill, .cover-empty {
196
+ display:inline-block;
197
+ height: 12px;
198
+ }
199
+ .chart {
200
+ line-height: 0;
201
+ }
202
+ .cover-empty {
203
+ background: white;
204
+ }
205
+ .cover-full {
206
+ border-right: none !important;
207
+ }
208
+ pre.prettyprint {
209
+ border: none !important;
210
+ padding: 0 !important;
211
+ margin: 0 !important;
212
+ }
213
+ .com { color: #999 !important; }
214
+ .ignore-none { color: #999; font-weight: normal; }
215
+
216
+ .wrapper {
217
+ min-height: 100%;
218
+ height: auto !important;
219
+ height: 100%;
220
+ margin: 0 auto -48px;
221
+ }
222
+ .footer, .push {
223
+ height: 48px;
224
+ }
@@ -0,0 +1,87 @@
1
+ /* eslint-disable */
2
+ var jumpToCode = (function init() {
3
+ // Classes of code we would like to highlight in the file view
4
+ var missingCoverageClasses = ['.cbranch-no', '.cstat-no', '.fstat-no'];
5
+
6
+ // Elements to highlight in the file listing view
7
+ var fileListingElements = ['td.pct.low'];
8
+
9
+ // We don't want to select elements that are direct descendants of another match
10
+ var notSelector = ':not(' + missingCoverageClasses.join('):not(') + ') > '; // becomes `:not(a):not(b) > `
11
+
12
+ // Selector that finds elements on the page to which we can jump
13
+ var selector =
14
+ fileListingElements.join(', ') +
15
+ ', ' +
16
+ notSelector +
17
+ missingCoverageClasses.join(', ' + notSelector); // becomes `:not(a):not(b) > a, :not(a):not(b) > b`
18
+
19
+ // The NodeList of matching elements
20
+ var missingCoverageElements = document.querySelectorAll(selector);
21
+
22
+ var currentIndex;
23
+
24
+ function toggleClass(index) {
25
+ missingCoverageElements
26
+ .item(currentIndex)
27
+ .classList.remove('highlighted');
28
+ missingCoverageElements.item(index).classList.add('highlighted');
29
+ }
30
+
31
+ function makeCurrent(index) {
32
+ toggleClass(index);
33
+ currentIndex = index;
34
+ missingCoverageElements.item(index).scrollIntoView({
35
+ behavior: 'smooth',
36
+ block: 'center',
37
+ inline: 'center'
38
+ });
39
+ }
40
+
41
+ function goToPrevious() {
42
+ var nextIndex = 0;
43
+ if (typeof currentIndex !== 'number' || currentIndex === 0) {
44
+ nextIndex = missingCoverageElements.length - 1;
45
+ } else if (missingCoverageElements.length > 1) {
46
+ nextIndex = currentIndex - 1;
47
+ }
48
+
49
+ makeCurrent(nextIndex);
50
+ }
51
+
52
+ function goToNext() {
53
+ var nextIndex = 0;
54
+
55
+ if (
56
+ typeof currentIndex === 'number' &&
57
+ currentIndex < missingCoverageElements.length - 1
58
+ ) {
59
+ nextIndex = currentIndex + 1;
60
+ }
61
+
62
+ makeCurrent(nextIndex);
63
+ }
64
+
65
+ return function jump(event) {
66
+ if (
67
+ document.getElementById('fileSearch') === document.activeElement &&
68
+ document.activeElement != null
69
+ ) {
70
+ // if we're currently focused on the search input, we don't want to navigate
71
+ return;
72
+ }
73
+
74
+ switch (event.which) {
75
+ case 78: // n
76
+ case 74: // j
77
+ goToNext();
78
+ break;
79
+ case 66: // b
80
+ case 75: // k
81
+ case 80: // p
82
+ goToPrevious();
83
+ break;
84
+ }
85
+ };
86
+ })();
87
+ window.addEventListener('keydown', jumpToCode);