@tricoteuses/senat 1.1.2 → 1.3.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 (155) hide show
  1. package/README.md +53 -15
  2. package/lib/config.d.ts +1 -0
  3. package/lib/config.js +14 -45
  4. package/lib/databases.d.ts +9 -0
  5. package/lib/databases.js +90 -117
  6. package/lib/datasets.js +78 -83
  7. package/lib/index.d.ts +8 -7
  8. package/lib/index.js +42 -523
  9. package/lib/legislatures.json +38 -0
  10. package/lib/loaders.d.ts +64 -0
  11. package/lib/loaders.js +177 -0
  12. package/lib/model/ameli.d.ts +105 -4
  13. package/lib/model/ameli.js +88 -166
  14. package/lib/model/debats.d.ts +0 -4
  15. package/lib/model/debats.js +0 -122
  16. package/lib/model/dosleg.d.ts +227 -29
  17. package/lib/model/dosleg.js +205 -839
  18. package/lib/model/index.d.ts +4 -5
  19. package/lib/model/index.js +12 -47
  20. package/lib/model/questions.d.ts +88 -2
  21. package/lib/model/questions.js +75 -51
  22. package/lib/model/sens.d.ts +524 -2
  23. package/lib/model/sens.js +449 -56
  24. package/lib/model/texte.d.ts +7 -0
  25. package/lib/model/texte.js +251 -0
  26. package/lib/model/util.d.ts +7 -1
  27. package/lib/model/util.js +26 -59
  28. package/lib/raw_types/ameli.d.ts +912 -538
  29. package/lib/raw_types/ameli.js +3 -42
  30. package/lib/raw_types/debats.d.ts +204 -124
  31. package/lib/raw_types/debats.js +3 -21
  32. package/lib/raw_types/dosleg.d.ts +3533 -2024
  33. package/lib/raw_types/dosleg.js +3 -95
  34. package/lib/raw_types/questions.d.ts +404 -220
  35. package/lib/raw_types/questions.js +3 -21
  36. package/lib/raw_types/sens.d.ts +4391 -2706
  37. package/lib/raw_types/sens.js +3 -111
  38. package/lib/raw_types_schemats/ameli.d.ts +541 -0
  39. package/lib/raw_types_schemats/ameli.js +3 -0
  40. package/lib/raw_types_schemats/debats.d.ts +127 -0
  41. package/lib/raw_types_schemats/debats.js +3 -0
  42. package/lib/raw_types_schemats/dosleg.d.ts +2029 -0
  43. package/lib/raw_types_schemats/dosleg.js +3 -0
  44. package/lib/raw_types_schemats/questions.d.ts +233 -0
  45. package/lib/raw_types_schemats/questions.js +3 -0
  46. package/lib/raw_types_schemats/sens.d.ts +2709 -0
  47. package/lib/raw_types_schemats/sens.js +3 -0
  48. package/lib/scripts/convert_data.js +184 -275
  49. package/lib/scripts/datautil.d.ts +5 -0
  50. package/lib/scripts/datautil.js +21 -0
  51. package/lib/scripts/parse_textes.js +49 -0
  52. package/lib/scripts/retrieve_documents.js +255 -0
  53. package/lib/scripts/retrieve_open_data.js +211 -360
  54. package/lib/scripts/retrieve_senateurs_photos.js +144 -257
  55. package/lib/scripts/shared/cli_helpers.d.ts +44 -0
  56. package/lib/scripts/shared/cli_helpers.js +35 -0
  57. package/lib/scripts/shared/util.d.ts +3 -0
  58. package/lib/scripts/shared/util.js +36 -0
  59. package/lib/strings.js +20 -45
  60. package/lib/types/ameli.d.ts +2 -2
  61. package/lib/types/ameli.js +14 -25
  62. package/lib/types/debats.d.ts +2 -2
  63. package/lib/types/debats.js +3 -21
  64. package/lib/types/dosleg.d.ts +3 -3
  65. package/lib/types/dosleg.js +152 -119
  66. package/lib/types/questions.d.ts +2 -2
  67. package/lib/types/questions.js +1 -13
  68. package/lib/types/sens.d.ts +2 -4
  69. package/lib/types/sens.js +1 -16
  70. package/lib/types/sessions.d.ts +42 -0
  71. package/lib/types/sessions.js +46 -0
  72. package/lib/types/texte.d.ts +65 -0
  73. package/lib/types/texte.js +19 -0
  74. package/lib/validators/config.js +47 -111
  75. package/lib/validators/senat.js +1 -5
  76. package/package.json +35 -32
  77. package/lib/aggregates.d.ts +0 -54
  78. package/lib/aggregates.js +0 -1122
  79. package/lib/aggregates.mjs +0 -802
  80. package/lib/aggregates.ts +0 -947
  81. package/lib/config.mjs +0 -16
  82. package/lib/config.ts +0 -26
  83. package/lib/databases.mjs +0 -26
  84. package/lib/databases.ts +0 -32
  85. package/lib/datasets.mjs +0 -78
  86. package/lib/datasets.ts +0 -118
  87. package/lib/fields.d.ts +0 -10
  88. package/lib/fields.js +0 -68
  89. package/lib/fields.mjs +0 -22
  90. package/lib/fields.ts +0 -29
  91. package/lib/index.mjs +0 -7
  92. package/lib/index.ts +0 -63
  93. package/lib/inserters.d.ts +0 -102
  94. package/lib/inserters.js +0 -518
  95. package/lib/inserters.mjs +0 -376
  96. package/lib/inserters.ts +0 -545
  97. package/lib/model/ameli.mjs +0 -57
  98. package/lib/model/ameli.ts +0 -86
  99. package/lib/model/debats.mjs +0 -43
  100. package/lib/model/debats.ts +0 -68
  101. package/lib/model/dosleg.mjs +0 -337
  102. package/lib/model/dosleg.ts +0 -558
  103. package/lib/model/index.mjs +0 -5
  104. package/lib/model/index.ts +0 -11
  105. package/lib/model/questions.mjs +0 -8
  106. package/lib/model/questions.ts +0 -14
  107. package/lib/model/sens.mjs +0 -9
  108. package/lib/model/sens.ts +0 -18
  109. package/lib/model/util.mjs +0 -10
  110. package/lib/model/util.ts +0 -16
  111. package/lib/raw_types/ameli.mjs +0 -2
  112. package/lib/raw_types/ameli.ts +0 -601
  113. package/lib/raw_types/debats.mjs +0 -2
  114. package/lib/raw_types/debats.ts +0 -145
  115. package/lib/raw_types/dosleg.mjs +0 -2
  116. package/lib/raw_types/dosleg.ts +0 -2193
  117. package/lib/raw_types/questions.mjs +0 -2
  118. package/lib/raw_types/questions.ts +0 -249
  119. package/lib/raw_types/sens.mjs +0 -2
  120. package/lib/raw_types/sens.ts +0 -2907
  121. package/lib/scripts/convert_data.mjs +0 -146
  122. package/lib/scripts/convert_data.ts +0 -182
  123. package/lib/scripts/fix_db.js +0 -144
  124. package/lib/scripts/fix_db.mjs +0 -64
  125. package/lib/scripts/fix_db.ts +0 -75
  126. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  127. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  128. package/lib/scripts/retrieve_open_data.mjs +0 -218
  129. package/lib/scripts/retrieve_open_data.ts +0 -258
  130. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -164
  131. package/lib/scripts/retrieve_senateurs_photos.ts +0 -200
  132. package/lib/scripts/retrieve_textes.js +0 -179
  133. package/lib/scripts/retrieve_textes.mjs +0 -77
  134. package/lib/scripts/retrieve_textes.ts +0 -95
  135. package/lib/strings.mjs +0 -18
  136. package/lib/strings.ts +0 -26
  137. package/lib/types/ameli.mjs +0 -13
  138. package/lib/types/ameli.ts +0 -21
  139. package/lib/types/debats.mjs +0 -2
  140. package/lib/types/debats.ts +0 -6
  141. package/lib/types/dosleg.mjs +0 -151
  142. package/lib/types/dosleg.ts +0 -284
  143. package/lib/types/questions.mjs +0 -1
  144. package/lib/types/questions.ts +0 -3
  145. package/lib/types/sens.mjs +0 -23
  146. package/lib/types/sens.ts +0 -36
  147. package/lib/typings/windows-1252.d.js +0 -2
  148. package/lib/typings/windows-1252.d.mjs +0 -2
  149. package/lib/typings/windows-1252.d.ts +0 -11
  150. package/lib/validators/config.mjs +0 -54
  151. package/lib/validators/config.ts +0 -79
  152. package/lib/validators/senat.mjs +0 -24
  153. package/lib/validators/senat.ts +0 -26
  154. /package/lib/scripts/{fix_db.d.ts → parse_textes.d.ts} +0 -0
  155. /package/lib/scripts/{retrieve_textes.d.ts → retrieve_documents.d.ts} +0 -0
package/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Tricoteuses-Senat
2
2
 
3
- ## _Handle French Sénat's open data_
3
+ ## _Retrieve, clean up & handle French Sénat's open data_
4
+
5
+ ## Requirements
6
+
7
+ - Node >= 22
4
8
 
5
9
  ## Installation
6
10
 
@@ -15,7 +19,7 @@ Create a `.env` file to set PostgreSQL database informations and other configura
15
19
  npm install
16
20
  ```
17
21
 
18
- ### Database creation
22
+ ### Database creation (not needed if downloading with Docker image)
19
23
 
20
24
  #### Using Docker
21
25
 
@@ -26,33 +30,67 @@ docker run --name local-postgres -d -p 5432:5432 -e POSTGRES_PASSWORD=$YOUR_CUST
26
30
  docker exec -it local-postgres psql -U postgres -c "CREATE ROLE opendata;"
27
31
  ```
28
32
 
29
- ## Usage
33
+ ## Download data
30
34
 
31
- ### Retrieval, cleaning & import of open data from Sénat
35
+ Create a folder where the data will be downloaded and run the following command to download the data and convert it into JSON files.
32
36
 
33
37
  ```bash
34
38
  mkdir ../senat-data/
35
- npx babel-node --extensions ".ts" --max-old-space-size=4096 -- src/scripts/retrieve_open_data.ts --fetch --unzip --repair-encoding ../senat-data/
36
- npx babel-node --extensions ".ts" -- src/scripts/retrieve_open_data.ts --import ../senat-data/
37
- npx babel-node --extensions ".ts" -- src/scripts/fix_db.ts --updateSchema
38
- npx babel-node --extensions ".ts" -- src/scripts/convert_data.ts ../senat-data/ [--categories DosLeg]
39
+
40
+ # Available options for optional `categories` parameter : All, Ameli, Debats, DosLeg, Questions, Sens
41
+ npm run data:download ../senat-data -- [--categories All]
42
+ ```
43
+
44
+ Data from other sources is also available :
45
+ ```bash
46
+ # Retrieval of sénateurs' pictures from Sénat's website
47
+ npm run data:retrieve_senateurs_photos ../senat-data
48
+
49
+ # Retrieval of textes and rapports from Sénat's website
50
+ # Available options for optional `formats` parameter : xml, html, pdf
51
+ # Available options for optional `types` parameter : textes, rapports
52
+ npm run data:retrieve_documents ../senat-data -- --sessions 2024 2025 [--formats xml pdf] [--types textes]
53
+
54
+ # Retrieval & parsing (textes in xml format only for now)
55
+ npm run data:retrieve_documents ../senat-data -- --sessions 2024 2025 --parseDocuments
56
+
57
+ # Parsing only
58
+ npm run data:parse_textes_lois ../senat-data
39
59
  ```
40
60
 
41
- ## Retrieval of sénateurs' pictures from Sénat's website
61
+ ## Data download using Docker
62
+
63
+ A Docker image that downloads and cleans the data all at once is available. Create and run it locally from the container registry:
42
64
 
43
65
  ```bash
44
- npx babel-node --extensions ".ts" -- src/scripts/retrieve_senateurs_photos.ts --fetch ../senat-data/
66
+ docker volume create senat-data # Create a volume to download the data
67
+ docker run --name tricoteuses-senat -v senat-data:/app/senat-data -d registry.en-root.org/tricoteuses/tricoteuses-senat:latest
45
68
  ```
46
69
 
47
- ### Retrieval & cleaning of bills from Sénat HTML pages
70
+ Use the environment variable `CATEGORIES` and `SESSIONS` if needed.
71
+
72
+ ## Using the data
73
+
74
+ Once the data is downloaded, you can use loaders to retrieve it.
75
+ To use loaders in your project, you can install the _@tricoteuses/senat_ package, and import the iterator functions that you need.
76
+
77
+ _Only iterator for Questions, Sénateurs and Circonscriptions available for now_
48
78
 
49
79
  ```bash
50
- npx babel-node --extensions ".ts" -- src/scripts/retrieve_textes.ts ../senat-data/
80
+ npm install @tricoteuses/senat
81
+ ```
82
+
83
+ ```js
84
+ import { iterLoadSenatQuestions } from "@tricoteuses/senat/lib/loaders"
85
+
86
+ // Pass data directory and legislature as arguments
87
+ for (const { item: question } of iterLoadSenatQuestions("../senat-data", 17)) {
88
+ console.log(question.id)
89
+ }
51
90
  ```
52
91
 
53
- ### Generation of raw types from SQL schema.
92
+ ## Generation of raw types from SQL schema (for contributors only)
54
93
 
55
- To be run after database has been fixed (`src/scripts/fix_db.ts --updateSchema`).
56
94
  ```bash
57
- npx babel-node --extensions ".ts" -- src/scripts/retrieve_open_data.ts --schema ../senat-data/
95
+ npm run data:generate_schemas ../senat-data
58
96
  ```
package/lib/config.d.ts CHANGED
@@ -1,2 +1,3 @@
1
+ import "dotenv/config";
1
2
  declare const validConfig: any;
2
3
  export default validConfig;
package/lib/config.js CHANGED
@@ -1,49 +1,18 @@
1
1
  "use strict";
2
-
3
- require("core-js/modules/es.symbol.js");
4
- require("core-js/modules/es.symbol.description.js");
5
- require("core-js/modules/es.symbol.iterator.js");
6
- require("core-js/modules/es.array.from.js");
7
- require("core-js/modules/es.array.iterator.js");
8
- require("core-js/modules/es.array.slice.js");
9
- require("core-js/modules/es.date.to-string.js");
10
- require("core-js/modules/es.function.name.js");
11
- require("core-js/modules/es.object.define-property.js");
12
- require("core-js/modules/es.object.to-string.js");
13
- require("core-js/modules/es.regexp.exec.js");
14
- require("core-js/modules/es.regexp.to-string.js");
15
- require("core-js/modules/es.string.iterator.js");
16
- require("core-js/modules/web.dom-collections.iterator.js");
17
- Object.defineProperty(exports, "__esModule", {
18
- value: true
19
- });
20
- exports["default"] = void 0;
21
- require("core-js/modules/es.array.concat.js");
22
- require("core-js/modules/es.array.is-array.js");
23
- require("core-js/modules/es.date.to-json.js");
24
- var _config = require("./validators/config");
25
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
26
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
27
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
28
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
29
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
30
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
31
- require("dotenv").config();
32
- var config = {
33
- db: {
34
- host: process.env.TRICOTEUSES_SENAT_DB_HOST || "localhost",
35
- password: process.env.TRICOTEUSES_SENAT_DB_PASSWORD || "opendata",
36
- port: process.env.TRICOTEUSES_SENAT_DB_PORT || 5432,
37
- user: process.env.TRICOTEUSES_SENAT_DB_USER || "opendata"
38
- }
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("dotenv/config");
4
+ const config_1 = require("./validators/config");
5
+ const config = {
6
+ db: {
7
+ host: process.env["TRICOTEUSES_SENAT_DB_HOST"] || "localhost",
8
+ password: process.env["TRICOTEUSES_SENAT_DB_PASSWORD"] || "opendata",
9
+ port: process.env["TRICOTEUSES_SENAT_DB_PORT"] || 5432,
10
+ user: process.env["TRICOTEUSES_SENAT_DB_USER"] || "opendata",
11
+ },
39
12
  };
40
- var _validateConfig = (0, _config.validateConfig)(config),
41
- _validateConfig2 = _slicedToArray(_validateConfig, 2),
42
- validConfig = _validateConfig2[0],
43
- error = _validateConfig2[1];
13
+ const [validConfig, error] = (0, config_1.validateConfig)(config);
44
14
  if (error !== null) {
45
- console.error("Error in configuration:\n".concat(JSON.stringify(validConfig, null, 2), "\nError:\n").concat(JSON.stringify(error, null, 2)));
46
- process.exit(-1);
15
+ console.error(`Error in configuration:\n${JSON.stringify(validConfig, null, 2)}\nError:\n${JSON.stringify(error, null, 2)}`);
16
+ process.exit(-1);
47
17
  }
48
- var _default = exports["default"] = validConfig;
49
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uZmlnIiwicmVxdWlyZSIsIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidCIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpIiwidSIsImYiLCJvIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5IiwiY29uZmlnIiwiZGIiLCJob3N0IiwicHJvY2VzcyIsImVudiIsIlRSSUNPVEVVU0VTX1NFTkFUX0RCX0hPU1QiLCJwYXNzd29yZCIsIlRSSUNPVEVVU0VTX1NFTkFUX0RCX1BBU1NXT1JEIiwicG9ydCIsIlRSSUNPVEVVU0VTX1NFTkFUX0RCX1BPUlQiLCJ1c2VyIiwiVFJJQ09URVVTRVNfU0VOQVRfREJfVVNFUiIsIl92YWxpZGF0ZUNvbmZpZyIsInZhbGlkYXRlQ29uZmlnIiwiX3ZhbGlkYXRlQ29uZmlnMiIsInZhbGlkQ29uZmlnIiwiZXJyb3IiLCJjb25zb2xlIiwiY29uY2F0IiwiSlNPTiIsInN0cmluZ2lmeSIsImV4aXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoXCJkb3RlbnZcIikuY29uZmlnKClcblxuaW1wb3J0IHsgdmFsaWRhdGVDb25maWcgfSBmcm9tIFwiLi92YWxpZGF0b3JzL2NvbmZpZ1wiXG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgZGI6IHtcbiAgICBob3N0OiBwcm9jZXNzLmVudi5UUklDT1RFVVNFU19TRU5BVF9EQl9IT1NUIHx8IFwibG9jYWxob3N0XCIsXG4gICAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LlRSSUNPVEVVU0VTX1NFTkFUX0RCX1BBU1NXT1JEIHx8IFwib3BlbmRhdGFcIixcbiAgICBwb3J0OiBwcm9jZXNzLmVudi5UUklDT1RFVVNFU19TRU5BVF9EQl9QT1JUIHx8IDU0MzIsXG4gICAgdXNlcjogcHJvY2Vzcy5lbnYuVFJJQ09URVVTRVNfU0VOQVRfREJfVVNFUiB8fCBcIm9wZW5kYXRhXCIsXG4gIH0sXG59XG5cbmNvbnN0IFt2YWxpZENvbmZpZywgZXJyb3JdID0gdmFsaWRhdGVDb25maWcoY29uZmlnKVxuaWYgKGVycm9yICE9PSBudWxsKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgYEVycm9yIGluIGNvbmZpZ3VyYXRpb246XFxuJHtKU09OLnN0cmluZ2lmeShcbiAgICAgIHZhbGlkQ29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIDIsXG4gICAgKX1cXG5FcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCAyKX1gLFxuICApXG4gIHByb2Nlc3MuZXhpdCgtMSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRDb25maWdcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFBb0QsU0FBQUMsZUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsQ0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxDQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosQ0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBSixDQUFBLEVBQUFPLENBQUEsUUFBQVAsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBUSxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUEsT0FBQUUsQ0FBQSxNQUFBQyxRQUFBLENBQUFDLElBQUEsQ0FBQVgsQ0FBQSxFQUFBWSxLQUFBLDZCQUFBSCxDQUFBLElBQUFULENBQUEsQ0FBQWEsV0FBQSxLQUFBSixDQUFBLEdBQUFULENBQUEsQ0FBQWEsV0FBQSxDQUFBQyxJQUFBLGFBQUFMLENBQUEsY0FBQUEsQ0FBQSxHQUFBTSxLQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsb0JBQUFTLENBQUEsK0NBQUFRLElBQUEsQ0FBQVIsQ0FBQSxJQUFBRCxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUE7QUFBQSxTQUFBQyxrQkFBQVIsQ0FBQSxFQUFBTyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUCxDQUFBLENBQUFrQixNQUFBLE1BQUFYLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxZQUFBakIsQ0FBQSxNQUFBa0IsQ0FBQSxHQUFBSixLQUFBLENBQUFSLENBQUEsR0FBQU4sQ0FBQSxHQUFBTSxDQUFBLEVBQUFOLENBQUEsSUFBQWtCLENBQUEsQ0FBQWxCLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFrQixDQUFBO0FBQUEsU0FBQWhCLHNCQUFBSCxDQUFBLEVBQUFvQixDQUFBLFFBQUFYLENBQUEsV0FBQVQsQ0FBQSxnQ0FBQXFCLE1BQUEsSUFBQXJCLENBQUEsQ0FBQXFCLE1BQUEsQ0FBQUMsUUFBQSxLQUFBdEIsQ0FBQSw0QkFBQVMsQ0FBQSxRQUFBUixDQUFBLEVBQUFrQixDQUFBLEVBQUFJLENBQUEsRUFBQUMsQ0FBQSxFQUFBakIsQ0FBQSxPQUFBa0IsQ0FBQSxPQUFBQyxDQUFBLGlCQUFBSCxDQUFBLElBQUFkLENBQUEsR0FBQUEsQ0FBQSxDQUFBRSxJQUFBLENBQUFYLENBQUEsR0FBQTJCLElBQUEsUUFBQVAsQ0FBQSxRQUFBUSxNQUFBLENBQUFuQixDQUFBLE1BQUFBLENBQUEsVUFBQWdCLENBQUEsdUJBQUFBLENBQUEsSUFBQXhCLENBQUEsR0FBQXNCLENBQUEsQ0FBQVosSUFBQSxDQUFBRixDQUFBLEdBQUFvQixJQUFBLE1BQUF0QixDQUFBLENBQUF1QixJQUFBLENBQUE3QixDQUFBLENBQUE4QixLQUFBLEdBQUF4QixDQUFBLENBQUFXLE1BQUEsS0FBQUUsQ0FBQSxHQUFBSyxDQUFBLGlCQUFBekIsQ0FBQSxJQUFBMEIsQ0FBQSxPQUFBUCxDQUFBLEdBQUFuQixDQUFBLHlCQUFBeUIsQ0FBQSxZQUFBaEIsQ0FBQSxlQUFBZSxDQUFBLEdBQUFmLENBQUEsY0FBQW1CLE1BQUEsQ0FBQUosQ0FBQSxNQUFBQSxDQUFBLDJCQUFBRSxDQUFBLFFBQUFQLENBQUEsYUFBQVosQ0FBQTtBQUFBLFNBQUFMLGdCQUFBRixDQUFBLFFBQUFlLEtBQUEsQ0FBQWlCLE9BQUEsQ0FBQWhDLENBQUEsVUFBQUEsQ0FBQTtBQUZwREYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDbUMsTUFBTSxDQUFDLENBQUM7QUFJMUIsSUFBTUEsTUFBTSxHQUFHO0VBQ2JDLEVBQUUsRUFBRTtJQUNGQyxJQUFJLEVBQUVDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyx5QkFBeUIsSUFBSSxXQUFXO0lBQzFEQyxRQUFRLEVBQUVILE9BQU8sQ0FBQ0MsR0FBRyxDQUFDRyw2QkFBNkIsSUFBSSxVQUFVO0lBQ2pFQyxJQUFJLEVBQUVMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDSyx5QkFBeUIsSUFBSSxJQUFJO0lBQ25EQyxJQUFJLEVBQUVQLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDTyx5QkFBeUIsSUFBSTtFQUNqRDtBQUNGLENBQUM7QUFFRCxJQUFBQyxlQUFBLEdBQTZCLElBQUFDLHNCQUFjLEVBQUNiLE1BQU0sQ0FBQztFQUFBYyxnQkFBQSxHQUFBaEQsY0FBQSxDQUFBOEMsZUFBQTtFQUE1Q0csV0FBVyxHQUFBRCxnQkFBQTtFQUFFRSxLQUFLLEdBQUFGLGdCQUFBO0FBQ3pCLElBQUlFLEtBQUssS0FBSyxJQUFJLEVBQUU7RUFDbEJDLE9BQU8sQ0FBQ0QsS0FBSyw2QkFBQUUsTUFBQSxDQUNpQkMsSUFBSSxDQUFDQyxTQUFTLENBQ3hDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLENBQ0YsQ0FBQyxnQkFBQUcsTUFBQSxDQUFhQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0osS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDOUMsQ0FBQztFQUNEYixPQUFPLENBQUNrQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEI7QUFBQyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsY0FFY1IsV0FBVyIsImlnbm9yZUxpc3QiOltdfQ==
18
+ exports.default = validConfig;
@@ -1,9 +1,18 @@
1
+ import { Kysely } from "kysely";
1
2
  import PgPromise from "pg-promise";
3
+ import { DB as AmeliDatabase } from "./raw_types/ameli";
4
+ import { DB as DoslegDatabase } from "./raw_types/dosleg";
5
+ import { DB as QuestionsDatabase } from "./raw_types/questions";
6
+ import { DB as SensDatabase } from "./raw_types/sens";
2
7
  export declare const pgPromise: PgPromise.IMain<{}, import("pg-promise/typescript/pg-subset").IClient>;
3
8
  export declare const dbNames: string[];
4
9
  export declare const dbByName: {
5
10
  [name: string]: any;
6
11
  };
12
+ export declare const dbAmeli: Kysely<AmeliDatabase>;
13
+ export declare const dbDosleg: Kysely<DoslegDatabase>;
14
+ export declare const dbQuestions: Kysely<QuestionsDatabase>;
15
+ export declare const dbSens: Kysely<SensDatabase>;
7
16
  export declare let dbSharedConnectionObjectByName: {
8
17
  [name: string]: PgPromise.IConnected<unknown, any>;
9
18
  };
package/lib/databases.js CHANGED
@@ -1,125 +1,98 @@
1
1
  "use strict";
2
-
3
- function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
- require("core-js/modules/es.symbol.js");
5
- require("core-js/modules/es.symbol.description.js");
6
- require("core-js/modules/es.symbol.async-iterator.js");
7
- require("core-js/modules/es.symbol.iterator.js");
8
- require("core-js/modules/es.symbol.to-string-tag.js");
9
- require("core-js/modules/es.array.for-each.js");
10
- require("core-js/modules/es.array.from.js");
11
- require("core-js/modules/es.array.is-array.js");
12
- require("core-js/modules/es.array.iterator.js");
13
- require("core-js/modules/es.array.reverse.js");
14
- require("core-js/modules/es.array.slice.js");
15
- require("core-js/modules/es.date.to-string.js");
16
- require("core-js/modules/es.function.name.js");
17
- require("core-js/modules/es.json.to-string-tag.js");
18
- require("core-js/modules/es.math.to-string-tag.js");
19
- require("core-js/modules/es.object.create.js");
20
- require("core-js/modules/es.object.define-property.js");
21
- require("core-js/modules/es.object.get-prototype-of.js");
22
- require("core-js/modules/es.object.set-prototype-of.js");
23
- require("core-js/modules/es.regexp.exec.js");
24
- require("core-js/modules/es.regexp.to-string.js");
25
- require("core-js/modules/es.string.iterator.js");
26
- require("core-js/modules/web.dom-collections.for-each.js");
27
- require("core-js/modules/web.dom-collections.iterator.js");
28
- Object.defineProperty(exports, "__esModule", {
29
- value: true
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
30
17
  });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.dbSharedConnectionObjectByName = exports.dbSens = exports.dbQuestions = exports.dbDosleg = exports.dbAmeli = exports.dbByName = exports.dbNames = exports.pgPromise = void 0;
31
40
  exports.checkDatabase = checkDatabase;
32
41
  exports.checkDatabases = checkDatabases;
33
- exports.pgPromise = exports.dbSharedConnectionObjectByName = exports.dbNames = exports.dbByName = void 0;
34
- require("core-js/modules/es.object.to-string.js");
35
- require("core-js/modules/es.promise.js");
36
- var _pgPromise = _interopRequireDefault(require("pg-promise"));
37
- var _config = _interopRequireDefault(require("./config"));
38
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
39
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
40
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
41
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
42
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
43
- function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
44
- function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
45
- var pgPromise = exports.pgPromise = (0, _pgPromise["default"])();
46
- var dbNames = exports.dbNames = ["ameli", "debats", "dosleg", "questions", "sens"];
47
- var dbByName = exports.dbByName = {};
48
- for (var _i = 0, _dbNames = dbNames; _i < _dbNames.length; _i++) {
49
- var name = _dbNames[_i];
50
- dbByName[name] = pgPromise({
51
- database: name,
52
- host: _config["default"].db.host,
53
- password: _config["default"].db.password,
54
- port: _config["default"].db.port,
55
- user: _config["default"].db.user
56
- });
57
- }
58
- var dbSharedConnectionObjectByName = exports.dbSharedConnectionObjectByName = {};
59
- function checkDatabase(_x) {
60
- return _checkDatabase.apply(this, arguments);
42
+ const kysely_1 = require("kysely");
43
+ const pg = __importStar(require("pg"));
44
+ const pg_1 = require("pg");
45
+ const pg_cursor_1 = __importDefault(require("pg-cursor"));
46
+ const pg_promise_1 = __importDefault(require("pg-promise"));
47
+ const config_1 = __importDefault(require("./config"));
48
+ const datasets_1 = require("./datasets");
49
+ // Map int8 to number instead of string
50
+ // https://github.com/brianc/node-pg-types#use
51
+ pg.types.setTypeParser(pg_1.types.builtins.INT8, (val) => {
52
+ return parseInt(val, 10);
53
+ });
54
+ exports.pgPromise = (0, pg_promise_1.default)();
55
+ exports.dbNames = ["ameli", "debats", "dosleg"];
56
+ exports.dbByName = {};
57
+ for (const name of exports.dbNames) {
58
+ exports.dbByName[name] = (0, exports.pgPromise)({
59
+ database: name,
60
+ host: config_1.default.db.host,
61
+ password: config_1.default.db.password,
62
+ port: config_1.default.db.port,
63
+ user: config_1.default.db.user,
64
+ });
61
65
  }
62
- function _checkDatabase() {
63
- _checkDatabase = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(name) {
64
- var db;
65
- return _regeneratorRuntime().wrap(function _callee$(_context) {
66
- while (1) switch (_context.prev = _context.next) {
67
- case 0:
68
- // Check that database exists.
69
- db = dbByName[name];
70
- _context.next = 3;
71
- return db.connect();
72
- case 3:
73
- dbSharedConnectionObjectByName[name] = _context.sent;
74
- return _context.abrupt("return", db);
75
- case 5:
76
- case "end":
77
- return _context.stop();
78
- }
79
- }, _callee);
80
- }));
81
- return _checkDatabase.apply(this, arguments);
66
+ function createDb(database, schema) {
67
+ const dialect = new kysely_1.PostgresDialect({
68
+ pool: new pg.Pool({
69
+ database: database,
70
+ host: config_1.default.db.host,
71
+ user: config_1.default.db.user,
72
+ password: config_1.default.db.password,
73
+ port: config_1.default.db.port,
74
+ max: 10,
75
+ }),
76
+ cursor: pg_cursor_1.default,
77
+ });
78
+ return new kysely_1.Kysely({
79
+ log: ["error"],
80
+ dialect: dialect,
81
+ }).withSchema(schema);
82
82
  }
83
- function checkDatabases() {
84
- return _checkDatabases.apply(this, arguments);
83
+ exports.dbAmeli = createDb(datasets_1.datasets.ameli.database, datasets_1.datasets.ameli.schema);
84
+ exports.dbDosleg = createDb(datasets_1.datasets.dosleg.database, datasets_1.datasets.dosleg.schema);
85
+ exports.dbQuestions = createDb(datasets_1.datasets.questions.database, datasets_1.datasets.questions.schema);
86
+ exports.dbSens = createDb(datasets_1.datasets.sens.database, datasets_1.datasets.sens.schema);
87
+ exports.dbSharedConnectionObjectByName = {};
88
+ async function checkDatabase(name) {
89
+ // Check that database exists.
90
+ const db = exports.dbByName[name];
91
+ exports.dbSharedConnectionObjectByName[name] = await db.connect();
92
+ return db;
85
93
  }
86
- function _checkDatabases() {
87
- _checkDatabases = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
88
- var _iterator, _step, _name;
89
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
90
- while (1) switch (_context2.prev = _context2.next) {
91
- case 0:
92
- _iterator = _createForOfIteratorHelper(dbNames);
93
- _context2.prev = 1;
94
- _iterator.s();
95
- case 3:
96
- if ((_step = _iterator.n()).done) {
97
- _context2.next = 9;
98
- break;
99
- }
100
- _name = _step.value;
101
- _context2.next = 7;
102
- return checkDatabase(_name);
103
- case 7:
104
- _context2.next = 3;
105
- break;
106
- case 9:
107
- _context2.next = 14;
108
- break;
109
- case 11:
110
- _context2.prev = 11;
111
- _context2.t0 = _context2["catch"](1);
112
- _iterator.e(_context2.t0);
113
- case 14:
114
- _context2.prev = 14;
115
- _iterator.f();
116
- return _context2.finish(14);
117
- case 17:
118
- case "end":
119
- return _context2.stop();
120
- }
121
- }, _callee2, null, [[1, 11, 14, 17]]);
122
- }));
123
- return _checkDatabases.apply(this, arguments);
94
+ async function checkDatabases() {
95
+ for (const name of exports.dbNames) {
96
+ await checkDatabase(name);
97
+ }
124
98
  }
125
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGdQcm9taXNlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29uZmlnIiwiZSIsIl9fZXNNb2R1bGUiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInIiLCJ0IiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwibiIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwiYSIsInUiLCJjYWxsIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiZGVmaW5lUHJvcGVydHkiLCJpIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImgiLCJsIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsIm1ldGhvZCIsImRlbGVnYXRlIiwibWF5YmVJbnZva2VEZWxlZ2F0ZSIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwicmVzdWx0TmFtZSIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImNvbXBsZXRlIiwiZmluaXNoIiwiX2NhdGNoIiwiZGVsZWdhdGVZaWVsZCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsInBnUHJvbWlzZSIsImV4cG9ydHMiLCJQZ1Byb21pc2UiLCJkYk5hbWVzIiwiZGJCeU5hbWUiLCJfaSIsIl9kYk5hbWVzIiwiZGF0YWJhc2UiLCJob3N0IiwiY29uZmlnIiwiZGIiLCJwYXNzd29yZCIsInBvcnQiLCJ1c2VyIiwiZGJTaGFyZWRDb25uZWN0aW9uT2JqZWN0QnlOYW1lIiwiY2hlY2tEYXRhYmFzZSIsIl94IiwiX2NoZWNrRGF0YWJhc2UiLCJfY2FsbGVlIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImNvbm5lY3QiLCJjaGVja0RhdGFiYXNlcyIsIl9jaGVja0RhdGFiYXNlcyIsIl9jYWxsZWUyIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJfbmFtZSIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInQwIl0sInNvdXJjZXMiOlsiLi4vc3JjL2RhdGFiYXNlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUGdQcm9taXNlIGZyb20gXCJwZy1wcm9taXNlXCJcblxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi9jb25maWdcIlxuXG5leHBvcnQgY29uc3QgcGdQcm9taXNlID0gUGdQcm9taXNlKClcbmV4cG9ydCBjb25zdCBkYk5hbWVzID0gW1wiYW1lbGlcIiwgXCJkZWJhdHNcIiwgXCJkb3NsZWdcIiwgXCJxdWVzdGlvbnNcIiwgXCJzZW5zXCJdXG5leHBvcnQgY29uc3QgZGJCeU5hbWU6IHsgW25hbWU6IHN0cmluZ106IGFueSB9ID0ge31cbmZvciAoY29uc3QgbmFtZSBvZiBkYk5hbWVzKSB7XG4gIGRiQnlOYW1lW25hbWVdID0gcGdQcm9taXNlKHtcbiAgICBkYXRhYmFzZTogbmFtZSxcbiAgICBob3N0OiBjb25maWcuZGIuaG9zdCxcbiAgICBwYXNzd29yZDogY29uZmlnLmRiLnBhc3N3b3JkLFxuICAgIHBvcnQ6IGNvbmZpZy5kYi5wb3J0LFxuICAgIHVzZXI6IGNvbmZpZy5kYi51c2VyLFxuICB9KVxufVxuZXhwb3J0IGxldCBkYlNoYXJlZENvbm5lY3Rpb25PYmplY3RCeU5hbWU6IHtcbiAgW25hbWU6IHN0cmluZ106IFBnUHJvbWlzZS5JQ29ubmVjdGVkPHVua25vd24sIGFueT5cbn0gPSB7fVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tEYXRhYmFzZShuYW1lOiBzdHJpbmcpIHtcbiAgLy8gQ2hlY2sgdGhhdCBkYXRhYmFzZSBleGlzdHMuXG4gIGNvbnN0IGRiID0gZGJCeU5hbWVbbmFtZV1cbiAgZGJTaGFyZWRDb25uZWN0aW9uT2JqZWN0QnlOYW1lW25hbWVdID0gYXdhaXQgZGIuY29ubmVjdCgpXG4gIHJldHVybiBkYlxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tEYXRhYmFzZXMoKSB7XG4gIGZvciAoY29uc3QgbmFtZSBvZiBkYk5hbWVzKSB7XG4gICAgYXdhaXQgY2hlY2tEYXRhYmFzZShuYW1lKVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFB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