@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.
- package/README.md +53 -15
- package/lib/config.d.ts +1 -0
- package/lib/config.js +14 -45
- package/lib/databases.d.ts +9 -0
- package/lib/databases.js +90 -117
- package/lib/datasets.js +78 -83
- package/lib/index.d.ts +8 -7
- package/lib/index.js +42 -523
- package/lib/legislatures.json +38 -0
- package/lib/loaders.d.ts +64 -0
- package/lib/loaders.js +177 -0
- package/lib/model/ameli.d.ts +105 -4
- package/lib/model/ameli.js +88 -166
- package/lib/model/debats.d.ts +0 -4
- package/lib/model/debats.js +0 -122
- package/lib/model/dosleg.d.ts +227 -29
- package/lib/model/dosleg.js +205 -839
- package/lib/model/index.d.ts +4 -5
- package/lib/model/index.js +12 -47
- package/lib/model/questions.d.ts +88 -2
- package/lib/model/questions.js +75 -51
- package/lib/model/sens.d.ts +524 -2
- package/lib/model/sens.js +449 -56
- package/lib/model/texte.d.ts +7 -0
- package/lib/model/texte.js +251 -0
- package/lib/model/util.d.ts +7 -1
- package/lib/model/util.js +26 -59
- package/lib/raw_types/ameli.d.ts +912 -538
- package/lib/raw_types/ameli.js +3 -42
- package/lib/raw_types/debats.d.ts +204 -124
- package/lib/raw_types/debats.js +3 -21
- package/lib/raw_types/dosleg.d.ts +3533 -2024
- package/lib/raw_types/dosleg.js +3 -95
- package/lib/raw_types/questions.d.ts +404 -220
- package/lib/raw_types/questions.js +3 -21
- package/lib/raw_types/sens.d.ts +4391 -2706
- package/lib/raw_types/sens.js +3 -111
- package/lib/raw_types_schemats/ameli.d.ts +541 -0
- package/lib/raw_types_schemats/ameli.js +3 -0
- package/lib/raw_types_schemats/debats.d.ts +127 -0
- package/lib/raw_types_schemats/debats.js +3 -0
- package/lib/raw_types_schemats/dosleg.d.ts +2029 -0
- package/lib/raw_types_schemats/dosleg.js +3 -0
- package/lib/raw_types_schemats/questions.d.ts +233 -0
- package/lib/raw_types_schemats/questions.js +3 -0
- package/lib/raw_types_schemats/sens.d.ts +2709 -0
- package/lib/raw_types_schemats/sens.js +3 -0
- package/lib/scripts/convert_data.js +184 -275
- package/lib/scripts/datautil.d.ts +5 -0
- package/lib/scripts/datautil.js +21 -0
- package/lib/scripts/parse_textes.js +49 -0
- package/lib/scripts/retrieve_documents.js +255 -0
- package/lib/scripts/retrieve_open_data.js +211 -360
- package/lib/scripts/retrieve_senateurs_photos.js +144 -257
- package/lib/scripts/shared/cli_helpers.d.ts +44 -0
- package/lib/scripts/shared/cli_helpers.js +35 -0
- package/lib/scripts/shared/util.d.ts +3 -0
- package/lib/scripts/shared/util.js +36 -0
- package/lib/strings.js +20 -45
- package/lib/types/ameli.d.ts +2 -2
- package/lib/types/ameli.js +14 -25
- package/lib/types/debats.d.ts +2 -2
- package/lib/types/debats.js +3 -21
- package/lib/types/dosleg.d.ts +3 -3
- package/lib/types/dosleg.js +152 -119
- package/lib/types/questions.d.ts +2 -2
- package/lib/types/questions.js +1 -13
- package/lib/types/sens.d.ts +2 -4
- package/lib/types/sens.js +1 -16
- package/lib/types/sessions.d.ts +42 -0
- package/lib/types/sessions.js +46 -0
- package/lib/types/texte.d.ts +65 -0
- package/lib/types/texte.js +19 -0
- package/lib/validators/config.js +47 -111
- package/lib/validators/senat.js +1 -5
- package/package.json +35 -32
- package/lib/aggregates.d.ts +0 -54
- package/lib/aggregates.js +0 -1122
- package/lib/aggregates.mjs +0 -802
- package/lib/aggregates.ts +0 -947
- package/lib/config.mjs +0 -16
- package/lib/config.ts +0 -26
- package/lib/databases.mjs +0 -26
- package/lib/databases.ts +0 -32
- package/lib/datasets.mjs +0 -78
- package/lib/datasets.ts +0 -118
- package/lib/fields.d.ts +0 -10
- package/lib/fields.js +0 -68
- package/lib/fields.mjs +0 -22
- package/lib/fields.ts +0 -29
- package/lib/index.mjs +0 -7
- package/lib/index.ts +0 -63
- package/lib/inserters.d.ts +0 -102
- package/lib/inserters.js +0 -518
- package/lib/inserters.mjs +0 -376
- package/lib/inserters.ts +0 -545
- package/lib/model/ameli.mjs +0 -57
- package/lib/model/ameli.ts +0 -86
- package/lib/model/debats.mjs +0 -43
- package/lib/model/debats.ts +0 -68
- package/lib/model/dosleg.mjs +0 -337
- package/lib/model/dosleg.ts +0 -558
- package/lib/model/index.mjs +0 -5
- package/lib/model/index.ts +0 -11
- package/lib/model/questions.mjs +0 -8
- package/lib/model/questions.ts +0 -14
- package/lib/model/sens.mjs +0 -9
- package/lib/model/sens.ts +0 -18
- package/lib/model/util.mjs +0 -10
- package/lib/model/util.ts +0 -16
- package/lib/raw_types/ameli.mjs +0 -2
- package/lib/raw_types/ameli.ts +0 -601
- package/lib/raw_types/debats.mjs +0 -2
- package/lib/raw_types/debats.ts +0 -145
- package/lib/raw_types/dosleg.mjs +0 -2
- package/lib/raw_types/dosleg.ts +0 -2193
- package/lib/raw_types/questions.mjs +0 -2
- package/lib/raw_types/questions.ts +0 -249
- package/lib/raw_types/sens.mjs +0 -2
- package/lib/raw_types/sens.ts +0 -2907
- package/lib/scripts/convert_data.mjs +0 -146
- package/lib/scripts/convert_data.ts +0 -182
- package/lib/scripts/fix_db.js +0 -144
- package/lib/scripts/fix_db.mjs +0 -64
- package/lib/scripts/fix_db.ts +0 -75
- package/lib/scripts/images/transparent_150x192.jpg +0 -0
- package/lib/scripts/images/transparent_155x225.jpg +0 -0
- package/lib/scripts/retrieve_open_data.mjs +0 -218
- package/lib/scripts/retrieve_open_data.ts +0 -258
- package/lib/scripts/retrieve_senateurs_photos.mjs +0 -164
- package/lib/scripts/retrieve_senateurs_photos.ts +0 -200
- package/lib/scripts/retrieve_textes.js +0 -179
- package/lib/scripts/retrieve_textes.mjs +0 -77
- package/lib/scripts/retrieve_textes.ts +0 -95
- package/lib/strings.mjs +0 -18
- package/lib/strings.ts +0 -26
- package/lib/types/ameli.mjs +0 -13
- package/lib/types/ameli.ts +0 -21
- package/lib/types/debats.mjs +0 -2
- package/lib/types/debats.ts +0 -6
- package/lib/types/dosleg.mjs +0 -151
- package/lib/types/dosleg.ts +0 -284
- package/lib/types/questions.mjs +0 -1
- package/lib/types/questions.ts +0 -3
- package/lib/types/sens.mjs +0 -23
- package/lib/types/sens.ts +0 -36
- package/lib/typings/windows-1252.d.js +0 -2
- package/lib/typings/windows-1252.d.mjs +0 -2
- package/lib/typings/windows-1252.d.ts +0 -11
- package/lib/validators/config.mjs +0 -54
- package/lib/validators/config.ts +0 -79
- package/lib/validators/senat.mjs +0 -24
- package/lib/validators/senat.ts +0 -26
- /package/lib/scripts/{fix_db.d.ts → parse_textes.d.ts} +0 -0
- /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
|
-
##
|
|
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
|
-
##
|
|
33
|
+
## Download data
|
|
30
34
|
|
|
31
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
95
|
+
npm run data:generate_schemas ../senat-data
|
|
58
96
|
```
|
package/lib/config.d.ts
CHANGED
package/lib/config.js
CHANGED
|
@@ -1,49 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
require("
|
|
4
|
-
require("
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
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
|
-
|
|
46
|
-
|
|
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
|
-
|
|
49
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29uZmlnIiwicmVxdWlyZSIsIl9zbGljZWRUb0FycmF5IiwiciIsImUiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbm9uSXRlcmFibGVSZXN0IiwiVHlwZUVycm9yIiwiYSIsIl9hcnJheUxpa2VUb0FycmF5IiwidCIsInRvU3RyaW5nIiwiY2FsbCIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiQXJyYXkiLCJmcm9tIiwidGVzdCIsImxlbmd0aCIsIm4iLCJsIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJpIiwidSIsImYiLCJvIiwibmV4dCIsIk9iamVjdCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJpc0FycmF5IiwiY29uZmlnIiwiZGIiLCJob3N0IiwicHJvY2VzcyIsImVudiIsIlRSSUNPVEVVU0VTX1NFTkFUX0RCX0hPU1QiLCJwYXNzd29yZCIsIlRSSUNPVEVVU0VTX1NFTkFUX0RCX1BBU1NXT1JEIiwicG9ydCIsIlRSSUNPVEVVU0VTX1NFTkFUX0RCX1BPUlQiLCJ1c2VyIiwiVFJJQ09URVVTRVNfU0VOQVRfREJfVVNFUiIsIl92YWxpZGF0ZUNvbmZpZyIsInZhbGlkYXRlQ29uZmlnIiwiX3ZhbGlkYXRlQ29uZmlnMiIsInZhbGlkQ29uZmlnIiwiZXJyb3IiLCJjb25zb2xlIiwiY29uY2F0IiwiSlNPTiIsInN0cmluZ2lmeSIsImV4aXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbInJlcXVpcmUoXCJkb3RlbnZcIikuY29uZmlnKClcblxuaW1wb3J0IHsgdmFsaWRhdGVDb25maWcgfSBmcm9tIFwiLi92YWxpZGF0b3JzL2NvbmZpZ1wiXG5cbmNvbnN0IGNvbmZpZyA9IHtcbiAgZGI6IHtcbiAgICBob3N0OiBwcm9jZXNzLmVudi5UUklDT1RFVVNFU19TRU5BVF9EQl9IT1NUIHx8IFwibG9jYWxob3N0XCIsXG4gICAgcGFzc3dvcmQ6IHByb2Nlc3MuZW52LlRSSUNPVEVVU0VTX1NFTkFUX0RCX1BBU1NXT1JEIHx8IFwib3BlbmRhdGFcIixcbiAgICBwb3J0OiBwcm9jZXNzLmVudi5UUklDT1RFVVNFU19TRU5BVF9EQl9QT1JUIHx8IDU0MzIsXG4gICAgdXNlcjogcHJvY2Vzcy5lbnYuVFJJQ09URVVTRVNfU0VOQVRfREJfVVNFUiB8fCBcIm9wZW5kYXRhXCIsXG4gIH0sXG59XG5cbmNvbnN0IFt2YWxpZENvbmZpZywgZXJyb3JdID0gdmFsaWRhdGVDb25maWcoY29uZmlnKVxuaWYgKGVycm9yICE9PSBudWxsKSB7XG4gIGNvbnNvbGUuZXJyb3IoXG4gICAgYEVycm9yIGluIGNvbmZpZ3VyYXRpb246XFxuJHtKU09OLnN0cmluZ2lmeShcbiAgICAgIHZhbGlkQ29uZmlnLFxuICAgICAgbnVsbCxcbiAgICAgIDIsXG4gICAgKX1cXG5FcnJvcjpcXG4ke0pTT04uc3RyaW5naWZ5KGVycm9yLCBudWxsLCAyKX1gLFxuICApXG4gIHByb2Nlc3MuZXhpdCgtMSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgdmFsaWRDb25maWdcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFBb0QsU0FBQUMsZUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFdBQUFDLGVBQUEsQ0FBQUYsQ0FBQSxLQUFBRyxxQkFBQSxDQUFBSCxDQUFBLEVBQUFDLENBQUEsS0FBQUcsMkJBQUEsQ0FBQUosQ0FBQSxFQUFBQyxDQUFBLEtBQUFJLGdCQUFBO0FBQUEsU0FBQUEsaUJBQUEsY0FBQUMsU0FBQTtBQUFBLFNBQUFGLDRCQUFBSixDQUFBLEVBQUFPLENBQUEsUUFBQVAsQ0FBQSwyQkFBQUEsQ0FBQSxTQUFBUSxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUEsT0FBQUUsQ0FBQSxNQUFBQyxRQUFBLENBQUFDLElBQUEsQ0FBQVgsQ0FBQSxFQUFBWSxLQUFBLDZCQUFBSCxDQUFBLElBQUFULENBQUEsQ0FBQWEsV0FBQSxLQUFBSixDQUFBLEdBQUFULENBQUEsQ0FBQWEsV0FBQSxDQUFBQyxJQUFBLGFBQUFMLENBQUEsY0FBQUEsQ0FBQSxHQUFBTSxLQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsb0JBQUFTLENBQUEsK0NBQUFRLElBQUEsQ0FBQVIsQ0FBQSxJQUFBRCxpQkFBQSxDQUFBUixDQUFBLEVBQUFPLENBQUE7QUFBQSxTQUFBQyxrQkFBQVIsQ0FBQSxFQUFBTyxDQUFBLGFBQUFBLENBQUEsSUFBQUEsQ0FBQSxHQUFBUCxDQUFBLENBQUFrQixNQUFBLE1BQUFYLENBQUEsR0FBQVAsQ0FBQSxDQUFBa0IsTUFBQSxZQUFBakIsQ0FBQSxNQUFBa0IsQ0FBQSxHQUFBSixLQUFBLENBQUFSLENBQUEsR0FBQU4sQ0FBQSxHQUFBTSxDQUFBLEVBQUFOLENBQUEsSUFBQWtCLENBQUEsQ0FBQWxCLENBQUEsSUFBQUQsQ0FBQSxDQUFBQyxDQUFBLFVBQUFrQixDQUFBO0FBQUEsU0FBQWhCLHNCQUFBSCxDQUFBLEVBQUFvQixDQUFBLFFBQUFYLENBQUEsV0FBQVQsQ0FBQSxnQ0FBQXFCLE1BQUEsSUFBQXJCLENBQUEsQ0FBQXFCLE1BQUEsQ0FBQUMsUUFBQSxLQUFBdEIsQ0FBQSw0QkFBQVMsQ0FBQSxRQUFBUixDQUFBLEVBQUFrQixDQUFBLEVBQUFJLENBQUEsRUFBQUMsQ0FBQSxFQUFBakIsQ0FBQSxPQUFBa0IsQ0FBQSxPQUFBQyxDQUFBLGlCQUFBSCxDQUFBLElBQUFkLENBQUEsR0FBQUEsQ0FBQSxDQUFBRSxJQUFBLENBQUFYLENBQUEsR0FBQTJCLElBQUEsUUFBQVAsQ0FBQSxRQUFBUSxNQUFBLENBQUFuQixDQUFBLE1BQUFBLENBQUEsVUFBQWdCLENBQUEsdUJBQUFBLENBQUEsSUFBQXhCLENBQUEsR0FBQXNCLENBQUEsQ0FBQVosSUFBQSxDQUFBRixDQUFBLEdBQUFvQixJQUFBLE1BQUF0QixDQUFBLENBQUF1QixJQUFBLENBQUE3QixDQUFBLENBQUE4QixLQUFBLEdBQUF4QixDQUFBLENBQUFXLE1BQUEsS0FBQUUsQ0FBQSxHQUFBSyxDQUFBLGlCQUFBekIsQ0FBQSxJQUFBMEIsQ0FBQSxPQUFBUCxDQUFBLEdBQUFuQixDQUFBLHlCQUFBeUIsQ0FBQSxZQUFBaEIsQ0FBQSxlQUFBZSxDQUFBLEdBQUFmLENBQUEsY0FBQW1CLE1BQUEsQ0FBQUosQ0FBQSxNQUFBQSxDQUFBLDJCQUFBRSxDQUFBLFFBQUFQLENBQUEsYUFBQVosQ0FBQTtBQUFBLFNBQUFMLGdCQUFBRixDQUFBLFFBQUFlLEtBQUEsQ0FBQWlCLE9BQUEsQ0FBQWhDLENBQUEsVUFBQUEsQ0FBQTtBQUZwREYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDbUMsTUFBTSxDQUFDLENBQUM7QUFJMUIsSUFBTUEsTUFBTSxHQUFHO0VBQ2JDLEVBQUUsRUFBRTtJQUNGQyxJQUFJLEVBQUVDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyx5QkFBeUIsSUFBSSxXQUFXO0lBQzFEQyxRQUFRLEVBQUVILE9BQU8sQ0FBQ0MsR0FBRyxDQUFDRyw2QkFBNkIsSUFBSSxVQUFVO0lBQ2pFQyxJQUFJLEVBQUVMLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDSyx5QkFBeUIsSUFBSSxJQUFJO0lBQ25EQyxJQUFJLEVBQUVQLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDTyx5QkFBeUIsSUFBSTtFQUNqRDtBQUNGLENBQUM7QUFFRCxJQUFBQyxlQUFBLEdBQTZCLElBQUFDLHNCQUFjLEVBQUNiLE1BQU0sQ0FBQztFQUFBYyxnQkFBQSxHQUFBaEQsY0FBQSxDQUFBOEMsZUFBQTtFQUE1Q0csV0FBVyxHQUFBRCxnQkFBQTtFQUFFRSxLQUFLLEdBQUFGLGdCQUFBO0FBQ3pCLElBQUlFLEtBQUssS0FBSyxJQUFJLEVBQUU7RUFDbEJDLE9BQU8sQ0FBQ0QsS0FBSyw2QkFBQUUsTUFBQSxDQUNpQkMsSUFBSSxDQUFDQyxTQUFTLENBQ3hDTCxXQUFXLEVBQ1gsSUFBSSxFQUNKLENBQ0YsQ0FBQyxnQkFBQUcsTUFBQSxDQUFhQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0osS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FDOUMsQ0FBQztFQUNEYixPQUFPLENBQUNrQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEI7QUFBQyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsY0FFY1IsV0FBVyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
18
|
+
exports.default = validConfig;
|
package/lib/databases.d.ts
CHANGED
|
@@ -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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
-
|
|
34
|
-
require("
|
|
35
|
-
require("
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
for (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
84
|
-
|
|
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
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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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
|