@tricoteuses/senat 1.3.1 → 1.3.4
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/lib/config.d.ts +1 -0
- package/lib/config.js +14 -45
- package/lib/databases.js +86 -143
- package/lib/datasets.js +78 -83
- package/lib/index.d.ts +12 -4
- package/lib/index.js +42 -419
- package/lib/loaders.js +149 -654
- package/lib/model/ameli.js +83 -21
- package/lib/model/debats.js +0 -1
- package/lib/model/dosleg.d.ts +1 -1
- package/lib/model/dosleg.js +179 -73
- package/lib/model/index.d.ts +3 -3
- package/lib/model/index.js +12 -46
- package/lib/model/questions.js +68 -39
- package/lib/model/sens.d.ts +1 -1
- package/lib/model/sens.js +383 -113
- package/lib/model/texte.js +220 -290
- package/lib/model/util.js +9 -26
- package/lib/raw_types/ameli.js +5 -6
- package/lib/raw_types/debats.js +5 -6
- package/lib/raw_types/dosleg.js +5 -6
- package/lib/raw_types/questions.js +5 -6
- package/lib/raw_types/sens.js +5 -6
- package/lib/raw_types_schemats/ameli.js +1 -43
- package/lib/raw_types_schemats/debats.js +1 -22
- package/lib/raw_types_schemats/dosleg.js +1 -96
- package/lib/raw_types_schemats/questions.js +1 -22
- package/lib/raw_types_schemats/sens.js +1 -112
- package/lib/scripts/convert_data.js +181 -631
- package/lib/scripts/datautil.js +17 -60
- package/lib/scripts/parse_textes.js +46 -129
- package/lib/scripts/retrieve_documents.js +247 -513
- package/lib/scripts/retrieve_open_data.js +211 -368
- package/lib/scripts/retrieve_senateurs_photos.js +144 -239
- package/lib/scripts/shared/cli_helpers.js +30 -30
- package/lib/scripts/shared/util.js +28 -94
- package/lib/strings.js +20 -45
- package/lib/types/ameli.d.ts +1 -1
- package/lib/types/ameli.js +14 -25
- package/lib/types/debats.d.ts +1 -1
- package/lib/types/debats.js +3 -21
- package/lib/types/dosleg.d.ts +1 -1
- package/lib/types/dosleg.js +152 -119
- package/lib/types/questions.d.ts +1 -1
- package/lib/types/questions.js +1 -13
- package/lib/types/sens.d.ts +1 -1
- package/lib/types/sens.js +1 -13
- package/lib/types/sessions.js +44 -49
- package/lib/types/texte.js +17 -22
- package/lib/validators/config.js +47 -111
- package/lib/validators/senat.js +1 -5
- package/package.json +18 -40
- package/lib/aggregates.d.ts +0 -52
- package/lib/aggregates.mjs +0 -930
- package/lib/aggregates.ts +0 -833
- package/lib/config.mjs +0 -16
- package/lib/config.ts +0 -26
- package/lib/data/legislatures.json +0 -38
- package/lib/databases.mjs +0 -57
- package/lib/databases.ts +0 -71
- package/lib/datasets.mjs +0 -78
- package/lib/datasets.ts +0 -118
- package/lib/fields.d.ts +0 -10
- package/lib/fields.mjs +0 -68
- package/lib/fields.ts +0 -29
- package/lib/index.mjs +0 -4
- package/lib/index.ts +0 -42
- package/lib/inserters.d.ts +0 -98
- package/lib/inserters.mjs +0 -500
- package/lib/inserters.ts +0 -521
- package/lib/loaders.mjs +0 -158
- package/lib/loaders.ts +0 -271
- package/lib/model/ameli.mjs +0 -84
- package/lib/model/ameli.ts +0 -100
- package/lib/model/debats.mjs +0 -1
- package/lib/model/debats.ts +0 -0
- package/lib/model/dosleg.mjs +0 -196
- package/lib/model/dosleg.ts +0 -240
- package/lib/model/index.mjs +0 -4
- package/lib/model/index.ts +0 -14
- package/lib/model/questions.mjs +0 -71
- package/lib/model/questions.ts +0 -93
- package/lib/model/sens.mjs +0 -415
- package/lib/model/sens.ts +0 -516
- package/lib/model/texte.mjs +0 -208
- package/lib/model/texte.ts +0 -229
- package/lib/model/util.mjs +0 -19
- package/lib/model/util.ts +0 -32
- package/lib/raw_types/ameli.mjs +0 -5
- package/lib/raw_types/ameli.ts +0 -951
- package/lib/raw_types/debats.mjs +0 -5
- package/lib/raw_types/debats.ts +0 -222
- package/lib/raw_types/dosleg.mjs +0 -5
- package/lib/raw_types/dosleg.ts +0 -3625
- package/lib/raw_types/questions.mjs +0 -5
- package/lib/raw_types/questions.ts +0 -427
- package/lib/raw_types/sens.mjs +0 -5
- package/lib/raw_types/sens.ts +0 -4499
- package/lib/raw_types_kysely/ameli.d.ts +0 -6
- package/lib/raw_types_kysely/ameli.mjs +0 -7
- package/lib/raw_types_kysely/ameli.ts +0 -6
- package/lib/raw_types_kysely/debats.d.ts +0 -6
- package/lib/raw_types_kysely/debats.mjs +0 -7
- package/lib/raw_types_kysely/debats.ts +0 -6
- package/lib/raw_types_kysely/dosleg.d.ts +0 -6
- package/lib/raw_types_kysely/dosleg.mjs +0 -7
- package/lib/raw_types_kysely/dosleg.ts +0 -6
- package/lib/raw_types_kysely/questions.d.ts +0 -6
- package/lib/raw_types_kysely/questions.mjs +0 -7
- package/lib/raw_types_kysely/questions.ts +0 -6
- package/lib/raw_types_kysely/sens.d.ts +0 -6
- package/lib/raw_types_kysely/sens.mjs +0 -7
- package/lib/raw_types_kysely/sens.ts +0 -6
- package/lib/raw_types_kysely/texte.d.ts +0 -45
- package/lib/raw_types_kysely/texte.mjs +0 -7
- package/lib/raw_types_kysely/texte.ts +0 -53
- package/lib/raw_types_schemats/ameli.mjs +0 -2
- package/lib/raw_types_schemats/ameli.ts +0 -601
- package/lib/raw_types_schemats/debats.mjs +0 -2
- package/lib/raw_types_schemats/debats.ts +0 -145
- package/lib/raw_types_schemats/dosleg.mjs +0 -2
- package/lib/raw_types_schemats/dosleg.ts +0 -2195
- package/lib/raw_types_schemats/questions.mjs +0 -2
- package/lib/raw_types_schemats/questions.ts +0 -251
- package/lib/raw_types_schemats/sens.mjs +0 -2
- package/lib/raw_types_schemats/sens.ts +0 -2907
- package/lib/scripts/convert_data.mjs +0 -181
- package/lib/scripts/convert_data.ts +0 -243
- package/lib/scripts/datautil.mjs +0 -16
- package/lib/scripts/datautil.ts +0 -19
- package/lib/scripts/images/transparent_150x192.jpg +0 -0
- package/lib/scripts/images/transparent_155x225.jpg +0 -0
- package/lib/scripts/parse_textes.mjs +0 -46
- package/lib/scripts/parse_textes.ts +0 -65
- package/lib/scripts/retrieve_documents.mjs +0 -249
- package/lib/scripts/retrieve_documents.ts +0 -298
- package/lib/scripts/retrieve_open_data.mjs +0 -217
- package/lib/scripts/retrieve_open_data.ts +0 -274
- package/lib/scripts/retrieve_senateurs_photos.mjs +0 -147
- package/lib/scripts/retrieve_senateurs_photos.ts +0 -177
- package/lib/scripts/retrieve_textes.d.ts +0 -1
- package/lib/scripts/retrieve_textes.mjs +0 -328
- package/lib/scripts/retrieve_textes.ts +0 -143
- package/lib/scripts/shared/cli_helpers.ts +0 -36
- package/lib/scripts/shared/util.ts +0 -33
- package/lib/src/aggregates.d.ts +0 -52
- package/lib/src/aggregates.mjs +0 -726
- package/lib/src/config.d.ts +0 -2
- package/lib/src/config.mjs +0 -16
- package/lib/src/databases.d.ts +0 -18
- package/lib/src/databases.mjs +0 -55
- package/lib/src/datasets.d.ts +0 -28
- package/lib/src/datasets.mjs +0 -78
- package/lib/src/fields.d.ts +0 -10
- package/lib/src/fields.mjs +0 -22
- package/lib/src/index.d.ts +0 -8
- package/lib/src/index.mjs +0 -7
- package/lib/src/inserters.d.ts +0 -98
- package/lib/src/inserters.mjs +0 -360
- package/lib/src/loaders.d.ts +0 -36
- package/lib/src/loaders.mjs +0 -107
- package/lib/src/model/ameli.d.ts +0 -4
- package/lib/src/model/ameli.js +0 -57
- package/lib/src/model/debats.d.ts +0 -4
- package/lib/src/model/debats.js +0 -43
- package/lib/src/model/dosleg.d.ts +0 -197
- package/lib/src/model/dosleg.js +0 -169
- package/lib/src/model/index.d.ts +0 -4
- package/lib/src/model/index.js +0 -4
- package/lib/src/model/questions.d.ts +0 -89
- package/lib/src/model/questions.js +0 -76
- package/lib/src/model/sens.d.ts +0 -390
- package/lib/src/model/sens.js +0 -339
- package/lib/src/model/texte.d.ts +0 -7
- package/lib/src/model/texte.js +0 -183
- package/lib/src/raw_types_kysely/ameli.d.ts +0 -915
- package/lib/src/raw_types_kysely/ameli.js +0 -5
- package/lib/src/raw_types_kysely/debats.d.ts +0 -207
- package/lib/src/raw_types_kysely/debats.js +0 -5
- package/lib/src/raw_types_kysely/dosleg.d.ts +0 -3532
- package/lib/src/raw_types_kysely/dosleg.js +0 -5
- package/lib/src/raw_types_kysely/questions.d.ts +0 -414
- package/lib/src/raw_types_kysely/questions.js +0 -5
- package/lib/src/raw_types_kysely/sens.d.ts +0 -4394
- package/lib/src/raw_types_kysely/sens.js +0 -5
- package/lib/src/raw_types_schemats/ameli.d.ts +0 -541
- package/lib/src/raw_types_schemats/ameli.js +0 -2
- package/lib/src/raw_types_schemats/debats.d.ts +0 -127
- package/lib/src/raw_types_schemats/debats.js +0 -2
- package/lib/src/raw_types_schemats/dosleg.d.ts +0 -2027
- package/lib/src/raw_types_schemats/dosleg.js +0 -2
- package/lib/src/raw_types_schemats/questions.d.ts +0 -231
- package/lib/src/raw_types_schemats/questions.js +0 -2
- package/lib/src/raw_types_schemats/sens.d.ts +0 -2709
- package/lib/src/raw_types_schemats/sens.js +0 -2
- package/lib/src/scripts/convert_data.d.ts +0 -1
- package/lib/src/scripts/convert_data.js +0 -95
- package/lib/src/scripts/datautil.d.ts +0 -5
- package/lib/src/scripts/datautil.js +0 -16
- package/lib/src/scripts/parse_textes.d.ts +0 -1
- package/lib/src/scripts/parse_textes.js +0 -47
- package/lib/src/scripts/retrieve_documents.d.ts +0 -1
- package/lib/src/scripts/retrieve_documents.js +0 -258
- package/lib/src/scripts/retrieve_open_data.d.ts +0 -1
- package/lib/src/scripts/retrieve_open_data.js +0 -214
- package/lib/src/scripts/retrieve_senateurs_photos.d.ts +0 -1
- package/lib/src/scripts/retrieve_senateurs_photos.js +0 -147
- package/lib/src/scripts/shared/cli_helpers.d.ts +0 -44
- package/lib/src/scripts/shared/cli_helpers.js +0 -32
- package/lib/src/scripts/shared/util.d.ts +0 -3
- package/lib/src/scripts/shared/util.js +0 -28
- package/lib/src/strings.d.ts +0 -1
- package/lib/src/strings.mjs +0 -18
- package/lib/src/types/ameli.d.ts +0 -10
- package/lib/src/types/ameli.js +0 -13
- package/lib/src/types/debats.d.ts +0 -4
- package/lib/src/types/debats.js +0 -2
- package/lib/src/types/dosleg.d.ts +0 -98
- package/lib/src/types/dosleg.js +0 -151
- package/lib/src/types/questions.d.ts +0 -2
- package/lib/src/types/questions.js +0 -1
- package/lib/src/types/sens.d.ts +0 -10
- package/lib/src/types/sens.js +0 -1
- package/lib/src/types/sessions.d.ts +0 -42
- package/lib/src/types/sessions.js +0 -43
- package/lib/src/types/texte.d.ts +0 -61
- package/lib/src/types/texte.js +0 -16
- package/lib/src/validators/config.d.ts +0 -1
- package/lib/src/validators/config.js +0 -54
- package/lib/src/validators/senat.d.ts +0 -0
- package/lib/src/validators/senat.js +0 -24
- 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 -1
- package/lib/types/sens.ts +0 -12
- package/lib/types/sessions.mjs +0 -43
- package/lib/types/sessions.ts +0 -42
- package/lib/types/texte.mjs +0 -16
- package/lib/types/texte.ts +0 -76
- 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
|
@@ -1,521 +1,255 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
require("
|
|
7
|
-
require("
|
|
8
|
-
require("
|
|
9
|
-
require("
|
|
10
|
-
require("
|
|
11
|
-
require("
|
|
12
|
-
require("
|
|
13
|
-
require("
|
|
14
|
-
require("
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
help: "formats of documents to retrieve (xml/html/pdf for textes, html/pdf for rapports); leave empty for all",
|
|
59
|
-
multiple: true,
|
|
60
|
-
name: "formats",
|
|
61
|
-
type: String
|
|
62
|
-
}, {
|
|
63
|
-
help: "types of documents to retrieve (textes/rapports); leave empty for all",
|
|
64
|
-
multiple: true,
|
|
65
|
-
name: "types",
|
|
66
|
-
type: String
|
|
67
|
-
}, {
|
|
68
|
-
help: "force retrieve all documents, even already retrieved ones",
|
|
69
|
-
name: "force",
|
|
70
|
-
type: Boolean
|
|
71
|
-
}]);
|
|
72
|
-
var options = (0, _commandLineArgs["default"])(optionsDefinitions);
|
|
73
|
-
var textDecoder = new TextDecoder("utf8");
|
|
74
|
-
function retrieveDocument(_x) {
|
|
75
|
-
return _retrieveDocument.apply(this, arguments);
|
|
76
|
-
}
|
|
77
|
-
function _retrieveDocument() {
|
|
78
|
-
_retrieveDocument = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(documentUrl) {
|
|
79
|
-
var response;
|
|
80
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
81
|
-
while (1) switch (_context.prev = _context.next) {
|
|
82
|
-
case 0:
|
|
83
|
-
if (!options.silent) {
|
|
84
|
-
console.log("Retrieving document ".concat(documentUrl, "\u2026"));
|
|
85
|
-
}
|
|
86
|
-
_context.prev = 1;
|
|
87
|
-
_context.next = 4;
|
|
88
|
-
return (0, _util.fetchWithRetry)(documentUrl);
|
|
89
|
-
case 4:
|
|
90
|
-
response = _context.sent;
|
|
91
|
-
if (response.ok) {
|
|
92
|
-
_context.next = 8;
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
if (response.status === 404) {
|
|
96
|
-
console.warn("Texte ".concat(documentUrl, " not found"));
|
|
97
|
-
} else {
|
|
98
|
-
console.error("An error occurred while retrieving texte ".concat(documentUrl, ": ").concat(response.status));
|
|
99
|
-
}
|
|
100
|
-
return _context.abrupt("return", null);
|
|
101
|
-
case 8:
|
|
102
|
-
return _context.abrupt("return", response.arrayBuffer());
|
|
103
|
-
case 11:
|
|
104
|
-
_context.prev = 11;
|
|
105
|
-
_context.t0 = _context["catch"](1);
|
|
106
|
-
console.error(_context.t0.message);
|
|
107
|
-
return _context.abrupt("return", null);
|
|
108
|
-
case 15:
|
|
109
|
-
case "end":
|
|
110
|
-
return _context.stop();
|
|
111
|
-
}
|
|
112
|
-
}, _callee, null, [[1, 11]]);
|
|
113
|
-
}));
|
|
114
|
-
return _retrieveDocument.apply(this, arguments);
|
|
115
|
-
}
|
|
116
|
-
function retrieveTextes(_x2) {
|
|
117
|
-
return _retrieveTextes.apply(this, arguments);
|
|
118
|
-
}
|
|
119
|
-
function _retrieveTextes() {
|
|
120
|
-
_retrieveTextes = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(dataDir) {
|
|
121
|
-
var textesDir, originalTextesDir, transformedTextesDir, retrievedTextesCount, texteUrlsNotFoundOrError, texteUrlsParseError, _iterator, _step, session, _iterator2, _step2, _texteMetadata$sessio, texteMetadata, texteDir, exposeDesMotifsContent, exposeDesMotifsPath, textePath, texteBuffer, _texteMetadata$sessio2, parsedTexte, texteXml, exposeDesMotifsHtml, transformedTexteDir, _textePath, _texteBuffer, _textePath2, _texteBuffer2;
|
|
122
|
-
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
123
|
-
while (1) switch (_context2.prev = _context2.next) {
|
|
124
|
-
case 0:
|
|
125
|
-
textesDir = _path["default"].join(dataDir, _loaders.TEXTE_FOLDER);
|
|
126
|
-
_fsExtra["default"].ensureDirSync(textesDir);
|
|
127
|
-
originalTextesDir = _path["default"].join(textesDir, _loaders.TEXTE_ORIGINAL_FOLDER);
|
|
128
|
-
transformedTextesDir = _path["default"].join(textesDir, _loaders.TEXTE_TRANSFORMED_FOLDER);
|
|
129
|
-
if (options.parseDocuments) {
|
|
130
|
-
(0, _util.ensureAndClearDir)(transformedTextesDir);
|
|
131
|
-
}
|
|
132
|
-
retrievedTextesCount = 0;
|
|
133
|
-
texteUrlsNotFoundOrError = [];
|
|
134
|
-
texteUrlsParseError = [];
|
|
135
|
-
_iterator = _createForOfIteratorHelper(options.sessions);
|
|
136
|
-
_context2.prev = 9;
|
|
137
|
-
_iterator.s();
|
|
138
|
-
case 11:
|
|
139
|
-
if ((_step = _iterator.n()).done) {
|
|
140
|
-
_context2.next = 103;
|
|
141
|
-
break;
|
|
142
|
-
}
|
|
143
|
-
session = _step.value;
|
|
144
|
-
_iterator2 = _createForOfIteratorHelper((0, _loaders.iterLoadSenatDossiersLegislatifsTexteUrls)(dataDir, session));
|
|
145
|
-
_context2.prev = 14;
|
|
146
|
-
_iterator2.s();
|
|
147
|
-
case 16:
|
|
148
|
-
if ((_step2 = _iterator2.n()).done) {
|
|
149
|
-
_context2.next = 93;
|
|
150
|
-
break;
|
|
151
|
-
}
|
|
152
|
-
texteMetadata = _step2.value.item;
|
|
153
|
-
texteDir = _path["default"].join(originalTextesDir, "".concat((_texteMetadata$sessio = texteMetadata.session) !== null && _texteMetadata$sessio !== void 0 ? _texteMetadata$sessio : _datautil.UNDEFINED_SESSION), texteMetadata.name);
|
|
154
|
-
_fsExtra["default"].ensureDirSync(texteDir);
|
|
155
|
-
exposeDesMotifsContent = null;
|
|
156
|
-
if (!texteMetadata.url_expose_des_motifs) {
|
|
157
|
-
_context2.next = 30;
|
|
158
|
-
break;
|
|
159
|
-
}
|
|
160
|
-
if (!options.silent) {
|
|
161
|
-
console.log("Retrieving exposé des motifs…");
|
|
162
|
-
}
|
|
163
|
-
exposeDesMotifsPath = _path["default"].join(texteDir, "".concat(texteMetadata.name, "-expose.html"));
|
|
164
|
-
_context2.next = 26;
|
|
165
|
-
return retrieveDocument(texteMetadata.url_expose_des_motifs.toString());
|
|
166
|
-
case 26:
|
|
167
|
-
exposeDesMotifsContent = _context2.sent;
|
|
168
|
-
if (exposeDesMotifsContent) {
|
|
169
|
-
_context2.next = 29;
|
|
170
|
-
break;
|
|
171
|
-
}
|
|
172
|
-
return _context2.abrupt("continue", 91);
|
|
173
|
-
case 29:
|
|
174
|
-
_fsExtra["default"].writeFileSync(exposeDesMotifsPath, Buffer.from(exposeDesMotifsContent));
|
|
175
|
-
case 30:
|
|
176
|
-
if (!(0, _util.isOptionEmptyOrHasValue)(options.formats, "xml")) {
|
|
177
|
-
_context2.next = 63;
|
|
178
|
-
break;
|
|
179
|
-
}
|
|
180
|
-
textePath = _path["default"].join(texteDir, "".concat(texteMetadata.name, ".xml"));
|
|
181
|
-
texteBuffer = null;
|
|
182
|
-
if (!(!options.force && _fsExtra["default"].existsSync(textePath))) {
|
|
183
|
-
_context2.next = 37;
|
|
184
|
-
break;
|
|
185
|
-
}
|
|
186
|
-
if (!options.silent) {
|
|
187
|
-
console.info("Already retrieved texte ".concat(textePath, "\u2026"));
|
|
188
|
-
}
|
|
189
|
-
_context2.next = 45;
|
|
190
|
-
break;
|
|
191
|
-
case 37:
|
|
192
|
-
_context2.next = 39;
|
|
193
|
-
return retrieveDocument(texteMetadata.url_xml.toString());
|
|
194
|
-
case 39:
|
|
195
|
-
texteBuffer = _context2.sent;
|
|
196
|
-
if (texteBuffer) {
|
|
197
|
-
_context2.next = 43;
|
|
198
|
-
break;
|
|
199
|
-
}
|
|
200
|
-
texteUrlsNotFoundOrError.push(texteMetadata.url_xml);
|
|
201
|
-
return _context2.abrupt("continue", 91);
|
|
202
|
-
case 43:
|
|
203
|
-
_fsExtra["default"].writeFileSync(textePath, Buffer.from(texteBuffer));
|
|
204
|
-
retrievedTextesCount++;
|
|
205
|
-
case 45:
|
|
206
|
-
if (!options.parseDocuments) {
|
|
207
|
-
_context2.next = 63;
|
|
208
|
-
break;
|
|
209
|
-
}
|
|
210
|
-
if (!options.silent) {
|
|
211
|
-
console.log("Parsing texte ".concat(texteMetadata.name, ".xml\u2026"));
|
|
212
|
-
}
|
|
213
|
-
parsedTexte = null;
|
|
214
|
-
if (!texteBuffer) {
|
|
215
|
-
_context2.next = 53;
|
|
216
|
-
break;
|
|
217
|
-
}
|
|
218
|
-
texteXml = textDecoder.decode(texteBuffer);
|
|
219
|
-
parsedTexte = (0, _texte.parseTexte)(texteXml);
|
|
220
|
-
_context2.next = 56;
|
|
221
|
-
break;
|
|
222
|
-
case 53:
|
|
223
|
-
_context2.next = 55;
|
|
224
|
-
return (0, _texte.parseTexteFromFile)(textePath);
|
|
225
|
-
case 55:
|
|
226
|
-
parsedTexte = _context2.sent;
|
|
227
|
-
case 56:
|
|
228
|
-
if (parsedTexte) {
|
|
229
|
-
_context2.next = 59;
|
|
230
|
-
break;
|
|
231
|
-
}
|
|
232
|
-
texteUrlsParseError.push(texteMetadata.url_xml);
|
|
233
|
-
return _context2.abrupt("continue", 91);
|
|
234
|
-
case 59:
|
|
235
|
-
if (exposeDesMotifsContent) {
|
|
236
|
-
if (!options.silent) {
|
|
237
|
-
console.log("Parsing exposé des motifs…");
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const assert_1 = __importDefault(require("assert"));
|
|
7
|
+
const command_line_args_1 = __importDefault(require("command-line-args"));
|
|
8
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
+
const path_1 = __importDefault(require("path"));
|
|
10
|
+
const loaders_1 = require("../loaders");
|
|
11
|
+
const texte_1 = require("../model/texte");
|
|
12
|
+
const datautil_1 = require("./datautil");
|
|
13
|
+
const cli_helpers_1 = require("./shared/cli_helpers");
|
|
14
|
+
const util_1 = require("./shared/util");
|
|
15
|
+
const optionsDefinitions = [
|
|
16
|
+
...cli_helpers_1.commonOptions,
|
|
17
|
+
{
|
|
18
|
+
help: "sessions of textes to retrieve; leave empty for all",
|
|
19
|
+
multiple: true,
|
|
20
|
+
name: "sessions",
|
|
21
|
+
type: String,
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
help: "parse and convert documents into JSON (textes only for now, requires format xml)",
|
|
25
|
+
name: "parseDocuments",
|
|
26
|
+
type: Boolean,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
alias: "F",
|
|
30
|
+
help: "formats of documents to retrieve (xml/html/pdf for textes, html/pdf for rapports); leave empty for all",
|
|
31
|
+
multiple: true,
|
|
32
|
+
name: "formats",
|
|
33
|
+
type: String,
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
help: "types of documents to retrieve (textes/rapports); leave empty for all",
|
|
37
|
+
multiple: true,
|
|
38
|
+
name: "types",
|
|
39
|
+
type: String,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
help: "force retrieve all documents, even already retrieved ones",
|
|
43
|
+
name: "force",
|
|
44
|
+
type: Boolean,
|
|
45
|
+
},
|
|
46
|
+
];
|
|
47
|
+
const options = (0, command_line_args_1.default)(optionsDefinitions);
|
|
48
|
+
const textDecoder = new TextDecoder("utf8");
|
|
49
|
+
async function retrieveDocument(documentUrl) {
|
|
50
|
+
if (!options["silent"]) {
|
|
51
|
+
console.log(`Retrieving document ${documentUrl}…`);
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const response = await (0, util_1.fetchWithRetry)(documentUrl);
|
|
55
|
+
if (!response.ok) {
|
|
56
|
+
if (response.status === 404) {
|
|
57
|
+
console.warn(`Texte ${documentUrl} not found`);
|
|
238
58
|
}
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
transformedTexteDir = _path["default"].join(transformedTextesDir, "".concat((_texteMetadata$sessio2 = texteMetadata.session) !== null && _texteMetadata$sessio2 !== void 0 ? _texteMetadata$sessio2 : _datautil.UNDEFINED_SESSION), texteMetadata.name);
|
|
243
|
-
_fsExtra["default"].ensureDirSync(transformedTexteDir);
|
|
244
|
-
_fsExtra["default"].writeJSONSync(_path["default"].join(transformedTexteDir, "".concat(texteMetadata.name, ".json")), parsedTexte, {
|
|
245
|
-
spaces: 2
|
|
246
|
-
});
|
|
247
|
-
case 63:
|
|
248
|
-
if (!(0, _util.isOptionEmptyOrHasValue)(options.formats, "html")) {
|
|
249
|
-
_context2.next = 77;
|
|
250
|
-
break;
|
|
251
|
-
}
|
|
252
|
-
_textePath = _path["default"].join(texteDir, "".concat(texteMetadata.name, ".html"));
|
|
253
|
-
if (!(!options.force && _fsExtra["default"].existsSync(_textePath))) {
|
|
254
|
-
_context2.next = 69;
|
|
255
|
-
break;
|
|
256
|
-
}
|
|
257
|
-
if (!options.silent) {
|
|
258
|
-
console.info("Already retrieved texte ".concat(_textePath, "\u2026"));
|
|
259
|
-
}
|
|
260
|
-
_context2.next = 77;
|
|
261
|
-
break;
|
|
262
|
-
case 69:
|
|
263
|
-
_context2.next = 71;
|
|
264
|
-
return retrieveDocument(texteMetadata.url_html.toString());
|
|
265
|
-
case 71:
|
|
266
|
-
_texteBuffer = _context2.sent;
|
|
267
|
-
if (_texteBuffer) {
|
|
268
|
-
_context2.next = 75;
|
|
269
|
-
break;
|
|
270
|
-
}
|
|
271
|
-
texteUrlsNotFoundOrError.push(texteMetadata.url_html);
|
|
272
|
-
return _context2.abrupt("continue", 91);
|
|
273
|
-
case 75:
|
|
274
|
-
_fsExtra["default"].writeFileSync(_textePath, Buffer.from(_texteBuffer));
|
|
275
|
-
retrievedTextesCount++;
|
|
276
|
-
case 77:
|
|
277
|
-
if (!(0, _util.isOptionEmptyOrHasValue)(options.formats, "pdf")) {
|
|
278
|
-
_context2.next = 91;
|
|
279
|
-
break;
|
|
280
|
-
}
|
|
281
|
-
_textePath2 = _path["default"].join(texteDir, "".concat(texteMetadata.name, ".pdf"));
|
|
282
|
-
if (!(!options.force && _fsExtra["default"].existsSync(_textePath2))) {
|
|
283
|
-
_context2.next = 83;
|
|
284
|
-
break;
|
|
285
|
-
}
|
|
286
|
-
if (!options.silent) {
|
|
287
|
-
console.info("Already retrieved texte ".concat(_textePath2, "\u2026"));
|
|
288
|
-
}
|
|
289
|
-
_context2.next = 91;
|
|
290
|
-
break;
|
|
291
|
-
case 83:
|
|
292
|
-
_context2.next = 85;
|
|
293
|
-
return retrieveDocument(texteMetadata.url_pdf.toString());
|
|
294
|
-
case 85:
|
|
295
|
-
_texteBuffer2 = _context2.sent;
|
|
296
|
-
if (_texteBuffer2) {
|
|
297
|
-
_context2.next = 89;
|
|
298
|
-
break;
|
|
299
|
-
}
|
|
300
|
-
texteUrlsNotFoundOrError.push(texteMetadata.url_pdf);
|
|
301
|
-
return _context2.abrupt("continue", 91);
|
|
302
|
-
case 89:
|
|
303
|
-
_fsExtra["default"].writeFileSync(_textePath2, Buffer.from(_texteBuffer2));
|
|
304
|
-
retrievedTextesCount++;
|
|
305
|
-
case 91:
|
|
306
|
-
_context2.next = 16;
|
|
307
|
-
break;
|
|
308
|
-
case 93:
|
|
309
|
-
_context2.next = 98;
|
|
310
|
-
break;
|
|
311
|
-
case 95:
|
|
312
|
-
_context2.prev = 95;
|
|
313
|
-
_context2.t0 = _context2["catch"](14);
|
|
314
|
-
_iterator2.e(_context2.t0);
|
|
315
|
-
case 98:
|
|
316
|
-
_context2.prev = 98;
|
|
317
|
-
_iterator2.f();
|
|
318
|
-
return _context2.finish(98);
|
|
319
|
-
case 101:
|
|
320
|
-
_context2.next = 11;
|
|
321
|
-
break;
|
|
322
|
-
case 103:
|
|
323
|
-
_context2.next = 108;
|
|
324
|
-
break;
|
|
325
|
-
case 105:
|
|
326
|
-
_context2.prev = 105;
|
|
327
|
-
_context2.t1 = _context2["catch"](9);
|
|
328
|
-
_iterator.e(_context2.t1);
|
|
329
|
-
case 108:
|
|
330
|
-
_context2.prev = 108;
|
|
331
|
-
_iterator.f();
|
|
332
|
-
return _context2.finish(108);
|
|
333
|
-
case 111:
|
|
334
|
-
if (options.verbose) {
|
|
335
|
-
console.log("".concat(retrievedTextesCount, " textes retrieved"));
|
|
336
|
-
console.log("".concat(texteUrlsNotFoundOrError.length, " textes failed to be retrieved with URLs ").concat(texteUrlsNotFoundOrError.join(", ")));
|
|
337
|
-
if (options.parseDocuments) {
|
|
338
|
-
console.log("".concat(texteUrlsParseError.length, " textes failed to be parsed with URLs ").concat(texteUrlsParseError.join(", ")));
|
|
59
|
+
else {
|
|
60
|
+
console.error(`An error occurred while retrieving texte ${documentUrl}: ${response.status}`);
|
|
339
61
|
}
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
return response.arrayBuffer();
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.error(error.message);
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
348
70
|
}
|
|
349
|
-
function
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
case 62:
|
|
466
|
-
if (options.verbose) {
|
|
467
|
-
console.log("".concat(retrievedRapportsCount, " rapports retrieved"));
|
|
468
|
-
console.log("".concat(rapportUrlsNotFoundOrError.length, " rapports failed with URLs ").concat(rapportUrlsNotFoundOrError.join(", ")));
|
|
469
|
-
}
|
|
470
|
-
case 63:
|
|
471
|
-
case "end":
|
|
472
|
-
return _context3.stop();
|
|
473
|
-
}
|
|
474
|
-
}, _callee3, null, [[5, 56, 59, 62], [10, 46, 49, 52]]);
|
|
475
|
-
}));
|
|
476
|
-
return _retrieveRapports.apply(this, arguments);
|
|
71
|
+
async function retrieveTextes(dataDir) {
|
|
72
|
+
const textesDir = path_1.default.join(dataDir, loaders_1.TEXTE_FOLDER);
|
|
73
|
+
fs_extra_1.default.ensureDirSync(textesDir);
|
|
74
|
+
const originalTextesDir = path_1.default.join(textesDir, loaders_1.TEXTE_ORIGINAL_FOLDER);
|
|
75
|
+
const transformedTextesDir = path_1.default.join(textesDir, loaders_1.TEXTE_TRANSFORMED_FOLDER);
|
|
76
|
+
if (options["parseDocuments"]) {
|
|
77
|
+
(0, util_1.ensureAndClearDir)(transformedTextesDir);
|
|
78
|
+
}
|
|
79
|
+
let retrievedTextesCount = 0;
|
|
80
|
+
const texteUrlsNotFoundOrError = [];
|
|
81
|
+
const texteUrlsParseError = [];
|
|
82
|
+
for (const session of options["sessions"]) {
|
|
83
|
+
for (const { item: texteMetadata, } of (0, loaders_1.iterLoadSenatDossiersLegislatifsTexteUrls)(dataDir, session)) {
|
|
84
|
+
const texteDir = path_1.default.join(originalTextesDir, `${texteMetadata.session ?? datautil_1.UNDEFINED_SESSION}`, texteMetadata.name);
|
|
85
|
+
fs_extra_1.default.ensureDirSync(texteDir);
|
|
86
|
+
let exposeDesMotifsContent = null;
|
|
87
|
+
if (texteMetadata.url_expose_des_motifs) {
|
|
88
|
+
if (!options["silent"]) {
|
|
89
|
+
console.log("Retrieving exposé des motifs…");
|
|
90
|
+
}
|
|
91
|
+
const exposeDesMotifsPath = path_1.default.join(texteDir, `${texteMetadata.name}-expose.html`);
|
|
92
|
+
exposeDesMotifsContent = await retrieveDocument(texteMetadata.url_expose_des_motifs.toString());
|
|
93
|
+
if (!exposeDesMotifsContent) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
fs_extra_1.default.writeFileSync(exposeDesMotifsPath, Buffer.from(exposeDesMotifsContent));
|
|
97
|
+
}
|
|
98
|
+
if ((0, util_1.isOptionEmptyOrHasValue)(options["formats"], "xml")) {
|
|
99
|
+
const textePath = path_1.default.join(texteDir, `${texteMetadata.name}.xml`);
|
|
100
|
+
let texteBuffer = null;
|
|
101
|
+
if (!options["force"] && fs_extra_1.default.existsSync(textePath)) {
|
|
102
|
+
if (!options["silent"]) {
|
|
103
|
+
console.info(`Already retrieved texte ${textePath}…`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
texteBuffer = await retrieveDocument(texteMetadata.url_xml.toString());
|
|
108
|
+
if (!texteBuffer) {
|
|
109
|
+
texteUrlsNotFoundOrError.push(texteMetadata.url_xml);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
fs_extra_1.default.writeFileSync(textePath, Buffer.from(texteBuffer));
|
|
113
|
+
retrievedTextesCount++;
|
|
114
|
+
}
|
|
115
|
+
if (options["parseDocuments"]) {
|
|
116
|
+
if (!options["silent"]) {
|
|
117
|
+
console.log(`Parsing texte ${texteMetadata.name}.xml…`);
|
|
118
|
+
}
|
|
119
|
+
let parsedTexte = null;
|
|
120
|
+
if (texteBuffer) {
|
|
121
|
+
const texteXml = textDecoder.decode(texteBuffer);
|
|
122
|
+
parsedTexte = (0, texte_1.parseTexte)(texteXml);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
parsedTexte = await (0, texte_1.parseTexteFromFile)(textePath);
|
|
126
|
+
}
|
|
127
|
+
if (!parsedTexte) {
|
|
128
|
+
texteUrlsParseError.push(texteMetadata.url_xml);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (exposeDesMotifsContent) {
|
|
132
|
+
if (!options["silent"]) {
|
|
133
|
+
console.log("Parsing exposé des motifs…");
|
|
134
|
+
}
|
|
135
|
+
const exposeDesMotifsHtml = textDecoder.decode(exposeDesMotifsContent);
|
|
136
|
+
parsedTexte.exposeDesMotifs =
|
|
137
|
+
(0, texte_1.parseExposeDesMotifs)(exposeDesMotifsHtml);
|
|
138
|
+
}
|
|
139
|
+
const transformedTexteDir = path_1.default.join(transformedTextesDir, `${texteMetadata.session ?? datautil_1.UNDEFINED_SESSION}`, texteMetadata.name);
|
|
140
|
+
fs_extra_1.default.ensureDirSync(transformedTexteDir);
|
|
141
|
+
fs_extra_1.default.writeJSONSync(path_1.default.join(transformedTexteDir, `${texteMetadata.name}.json`), parsedTexte, { spaces: 2 });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if ((0, util_1.isOptionEmptyOrHasValue)(options["formats"], "html")) {
|
|
145
|
+
const textePath = path_1.default.join(texteDir, `${texteMetadata.name}.html`);
|
|
146
|
+
if (!options["force"] && fs_extra_1.default.existsSync(textePath)) {
|
|
147
|
+
if (!options["silent"]) {
|
|
148
|
+
console.info(`Already retrieved texte ${textePath}…`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
const texteBuffer = await retrieveDocument(texteMetadata.url_html.toString());
|
|
153
|
+
if (!texteBuffer) {
|
|
154
|
+
texteUrlsNotFoundOrError.push(texteMetadata.url_html);
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
fs_extra_1.default.writeFileSync(textePath, Buffer.from(texteBuffer));
|
|
158
|
+
retrievedTextesCount++;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if ((0, util_1.isOptionEmptyOrHasValue)(options["formats"], "pdf")) {
|
|
162
|
+
const textePath = path_1.default.join(texteDir, `${texteMetadata.name}.pdf`);
|
|
163
|
+
if (!options["force"] && fs_extra_1.default.existsSync(textePath)) {
|
|
164
|
+
if (!options["silent"]) {
|
|
165
|
+
console.info(`Already retrieved texte ${textePath}…`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
const texteBuffer = await retrieveDocument(texteMetadata.url_pdf.toString());
|
|
170
|
+
if (!texteBuffer) {
|
|
171
|
+
texteUrlsNotFoundOrError.push(texteMetadata.url_pdf);
|
|
172
|
+
continue;
|
|
173
|
+
}
|
|
174
|
+
fs_extra_1.default.writeFileSync(textePath, Buffer.from(texteBuffer));
|
|
175
|
+
retrievedTextesCount++;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (options["verbose"]) {
|
|
181
|
+
console.log(`${retrievedTextesCount} textes retrieved`);
|
|
182
|
+
console.log(`${texteUrlsNotFoundOrError.length} textes failed to be retrieved with URLs ${texteUrlsNotFoundOrError.join(", ")}`);
|
|
183
|
+
if (options["parseDocuments"]) {
|
|
184
|
+
console.log(`${texteUrlsParseError.length} textes failed to be parsed with URLs ${texteUrlsParseError.join(", ")}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
477
187
|
}
|
|
478
|
-
function
|
|
479
|
-
|
|
188
|
+
async function retrieveRapports(dataDir) {
|
|
189
|
+
const rapportsDir = path_1.default.join(dataDir, loaders_1.RAPPORT_FOLDER);
|
|
190
|
+
fs_extra_1.default.ensureDirSync(rapportsDir);
|
|
191
|
+
let retrievedRapportsCount = 0;
|
|
192
|
+
const rapportUrlsNotFoundOrError = [];
|
|
193
|
+
for (const session of options["sessions"]) {
|
|
194
|
+
for (const { item: rapportMetadata, } of (0, loaders_1.iterLoadSenatDossiersLegislatifsRapportUrls)(dataDir, session)) {
|
|
195
|
+
const rapportDir = path_1.default.join(rapportsDir, `${rapportMetadata.session ?? datautil_1.UNDEFINED_SESSION}`, rapportMetadata.name);
|
|
196
|
+
fs_extra_1.default.ensureDirSync(rapportDir);
|
|
197
|
+
if ((0, util_1.isOptionEmptyOrHasValue)(options["formats"], "html")) {
|
|
198
|
+
const rapportPath = path_1.default.join(rapportDir, `${rapportMetadata.name}.html`);
|
|
199
|
+
if (!options["force"] && fs_extra_1.default.existsSync(rapportPath)) {
|
|
200
|
+
if (!options["silent"]) {
|
|
201
|
+
console.info(`Already retrieved rapport ${rapportPath}…`);
|
|
202
|
+
}
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
const rapportBuffer = await retrieveDocument(rapportMetadata.url_html.toString());
|
|
206
|
+
if (!rapportBuffer) {
|
|
207
|
+
rapportUrlsNotFoundOrError.push(rapportMetadata.url_html);
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
fs_extra_1.default.writeFileSync(rapportPath, Buffer.from(rapportBuffer));
|
|
211
|
+
retrievedRapportsCount++;
|
|
212
|
+
}
|
|
213
|
+
if ((0, util_1.isOptionEmptyOrHasValue)(options["formats"], "pdf")) {
|
|
214
|
+
const rapportPath = path_1.default.join(rapportDir, `${rapportMetadata.name}.pdf`);
|
|
215
|
+
if (!options["force"] && fs_extra_1.default.existsSync(rapportPath)) {
|
|
216
|
+
if (!options["silent"]) {
|
|
217
|
+
console.info(`Already retrieved rapport ${rapportPath}…`);
|
|
218
|
+
}
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
const rapportBuffer = await retrieveDocument(rapportMetadata.url_pdf.toString());
|
|
222
|
+
if (!rapportBuffer) {
|
|
223
|
+
rapportUrlsNotFoundOrError.push(rapportMetadata.url_pdf);
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
fs_extra_1.default.writeFileSync(rapportPath, Buffer.from(rapportBuffer));
|
|
227
|
+
retrievedRapportsCount++;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (options["verbose"]) {
|
|
232
|
+
console.log(`${retrievedRapportsCount} rapports retrieved`);
|
|
233
|
+
console.log(`${rapportUrlsNotFoundOrError.length} rapports failed with URLs ${rapportUrlsNotFoundOrError.join(", ")}`);
|
|
234
|
+
}
|
|
480
235
|
}
|
|
481
|
-
function
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
_context4.next = 6;
|
|
495
|
-
return retrieveTextes(dataDir);
|
|
496
|
-
case 6:
|
|
497
|
-
if (!(0, _util.isOptionEmptyOrHasValue)(options.types, "rapports")) {
|
|
498
|
-
_context4.next = 9;
|
|
499
|
-
break;
|
|
500
|
-
}
|
|
501
|
-
_context4.next = 9;
|
|
502
|
-
return retrieveRapports(dataDir);
|
|
503
|
-
case 9:
|
|
504
|
-
if (!options.silent) {
|
|
505
|
-
console.timeEnd("documents processing time");
|
|
506
|
-
}
|
|
507
|
-
case 10:
|
|
508
|
-
case "end":
|
|
509
|
-
return _context4.stop();
|
|
510
|
-
}
|
|
511
|
-
}, _callee4);
|
|
512
|
-
}));
|
|
513
|
-
return _main.apply(this, arguments);
|
|
236
|
+
async function main() {
|
|
237
|
+
const dataDir = options["dataDir"];
|
|
238
|
+
(0, assert_1.default)(dataDir, "Missing argument: data directory");
|
|
239
|
+
console.time("documents processing time");
|
|
240
|
+
if ((0, util_1.isOptionEmptyOrHasValue)(options["types"], "textes")) {
|
|
241
|
+
await retrieveTextes(dataDir);
|
|
242
|
+
}
|
|
243
|
+
if ((0, util_1.isOptionEmptyOrHasValue)(options["types"], "rapports")) {
|
|
244
|
+
await retrieveRapports(dataDir);
|
|
245
|
+
}
|
|
246
|
+
if (!options["silent"]) {
|
|
247
|
+
console.timeEnd("documents processing time");
|
|
248
|
+
}
|
|
514
249
|
}
|
|
515
|
-
main()
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
250
|
+
main()
|
|
251
|
+
.then(() => process.exit(0))
|
|
252
|
+
.catch((error) => {
|
|
253
|
+
console.log(error);
|
|
254
|
+
process.exit(1);
|
|
520
255
|
});
|
|
521
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVBcmdzIiwiX2ZzRXh0cmEiLCJfcGF0aCIsIl9sb2FkZXJzIiwiX3RleHRlIiwiX2RhdGF1dGlsIiwiX2NsaV9oZWxwZXJzIiwiX3V0aWwiLCJlIiwiX19lc01vZHVsZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiaSIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZyIsImMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsImgiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJFcnJvciIsIm1ldGhvZCIsImFyZyIsImRlbGVnYXRlIiwiZCIsInNlbnQiLCJfc2VudCIsImRpc3BhdGNoRXhjZXB0aW9uIiwiYWJydXB0IiwidHlwZSIsIkNvbnRleHQiLCJ3cmFwIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImwiLCJwIiwiZ2V0UHJvdG90eXBlT2YiLCJ5IiwieCIsInYiLCJnIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsInciLCJ0cnlFbnRyaWVzIiwicHVzaCIsIm0iLCJyZXNldCIsImlzTmFOIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwidW5zaGlmdCIsInBvcCIsInZhbHVlcyIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJmcm9tIiwidGVzdCIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImNvbmNhdCIsImNvbW1vbk9wdGlvbnMiLCJoZWxwIiwibXVsdGlwbGUiLCJTdHJpbmciLCJCb29sZWFuIiwiYWxpYXMiLCJvcHRpb25zIiwiY29tbWFuZExpbmVBcmdzIiwidGV4dERlY29kZXIiLCJUZXh0RGVjb2RlciIsInJldHJpZXZlRG9jdW1lbnQiLCJfeCIsIl9yZXRyaWV2ZURvY3VtZW50IiwiX2NhbGxlZSIsImRvY3VtZW50VXJsIiwicmVzcG9uc2UiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsImZldGNoV2l0aFJldHJ5Iiwib2siLCJzdGF0dXMiLCJ3YXJuIiwiZXJyb3IiLCJhcnJheUJ1ZmZlciIsInQwIiwibWVzc2FnZSIsInJldHJpZXZlVGV4dGVzIiwiX3gyIiwiX3JldHJpZXZlVGV4dGVzIiwiX2NhbGxlZTIiLCJkYXRhRGlyIiwidGV4dGVzRGlyIiwib3JpZ2luYWxUZXh0ZXNEaXIiLCJ0cmFuc2Zvcm1lZFRleHRlc0RpciIsInJldHJpZXZlZFRleHRlc0NvdW50IiwidGV4dGVVcmxzTm90Rm91bmRPckVycm9yIiwidGV4dGVVcmxzUGFyc2VFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwic2Vzc2lvbiIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfdGV4dGVNZXRhZGF0YSRzZXNzaW8iLCJ0ZXh0ZU1ldGFkYXRhIiwidGV4dGVEaXIiLCJleHBvc2VEZXNNb3RpZnNDb250ZW50IiwiZXhwb3NlRGVzTW90aWZzUGF0aCIsInRleHRlUGF0aCIsInRleHRlQnVmZmVyIiwiX3RleHRlTWV0YWRhdGEkc2Vzc2lvMiIsInBhcnNlZFRleHRlIiwidGV4dGVYbWwiLCJleHBvc2VEZXNNb3RpZnNIdG1sIiwidHJhbnNmb3JtZWRUZXh0ZURpciIsIl90ZXh0ZVBhdGgiLCJfdGV4dGVCdWZmZXIiLCJfdGV4dGVQYXRoMiIsIl90ZXh0ZUJ1ZmZlcjIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJwYXRoIiwiam9pbiIsIlRFWFRFX0ZPTERFUiIsImZzIiwiZW5zdXJlRGlyU3luYyIsIlRFWFRFX09SSUdJTkFMX0ZPTERFUiIsIlRFWFRFX1RSQU5TRk9STUVEX0ZPTERFUiIsInBhcnNlRG9jdW1lbnRzIiwiZW5zdXJlQW5kQ2xlYXJEaXIiLCJzZXNzaW9ucyIsIml0ZXJMb2FkU2VuYXREb3NzaWVyc0xlZ2lzbGF0aWZzVGV4dGVVcmxzIiwiaXRlbSIsIlVOREVGSU5FRF9TRVNTSU9OIiwidXJsX2V4cG9zZV9kZXNfbW90aWZzIiwid3JpdGVGaWxlU3luYyIsIkJ1ZmZlciIsImlzT3B0aW9uRW1wdHlPckhhc1ZhbHVlIiwiZm9ybWF0cyIsImZvcmNlIiwiZXhpc3RzU3luYyIsImluZm8iLCJ1cmxfeG1sIiwiZGVjb2RlIiwicGFyc2VUZXh0ZSIsInBhcnNlVGV4dGVGcm9tRmlsZSIsImV4cG9zZURlc01vdGlmcyIsInBhcnNlRXhwb3NlRGVzTW90aWZzIiwid3JpdGVKU09OU3luYyIsInNwYWNlcyIsInVybF9odG1sIiwidXJsX3BkZiIsInQxIiwidmVyYm9zZSIsInJldHJpZXZlUmFwcG9ydHMiLCJfeDMiLCJfcmV0cmlldmVSYXBwb3J0cyIsIl9jYWxsZWUzIiwicmFwcG9ydHNEaXIiLCJyZXRyaWV2ZWRSYXBwb3J0c0NvdW50IiwicmFwcG9ydFVybHNOb3RGb3VuZE9yRXJyb3IiLCJfaXRlcmF0b3IzIiwiX3N0ZXAzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsIl9yYXBwb3J0TWV0YWRhdGEkc2VzcyIsInJhcHBvcnRNZXRhZGF0YSIsInJhcHBvcnREaXIiLCJyYXBwb3J0UGF0aCIsInJhcHBvcnRCdWZmZXIiLCJfcmFwcG9ydFBhdGgiLCJfcmFwcG9ydEJ1ZmZlciIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlJBUFBPUlRfRk9MREVSIiwiaXRlckxvYWRTZW5hdERvc3NpZXJzTGVnaXNsYXRpZnNSYXBwb3J0VXJscyIsIm1haW4iLCJfbWFpbiIsIl9jYWxsZWU0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiYXNzZXJ0IiwidGltZSIsInR5cGVzIiwidGltZUVuZCIsInByb2Nlc3MiLCJleGl0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvcmV0cmlldmVfZG9jdW1lbnRzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgY29tbWFuZExpbmVBcmdzIGZyb20gXCJjb21tYW5kLWxpbmUtYXJnc1wiXG5pbXBvcnQgZnMgZnJvbSBcImZzLWV4dHJhXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHtcbiAgaXRlckxvYWRTZW5hdERvc3NpZXJzTGVnaXNsYXRpZnNSYXBwb3J0VXJscyxcbiAgaXRlckxvYWRTZW5hdERvc3NpZXJzTGVnaXNsYXRpZnNUZXh0ZVVybHMsXG4gIFJBUFBPUlRfRk9MREVSLFxuICBURVhURV9GT0xERVIsXG4gIFRFWFRFX09SSUdJTkFMX0ZPTERFUixcbiAgVEVYVEVfVFJBTlNGT1JNRURfRk9MREVSLFxufSBmcm9tIFwiLi4vbG9hZGVyc1wiXG5pbXBvcnQgeyBwYXJzZUV4cG9zZURlc01vdGlmcywgcGFyc2VUZXh0ZSwgcGFyc2VUZXh0ZUZyb21GaWxlIH0gZnJvbSBcIi4uL21vZGVsL3RleHRlXCJcbmltcG9ydCB7IFVOREVGSU5FRF9TRVNTSU9OIH0gZnJvbSBcIi4vZGF0YXV0aWxcIlxuaW1wb3J0IHsgY29tbW9uT3B0aW9ucyB9IGZyb20gXCIuL3NoYXJlZC9jbGlfaGVscGVyc1wiXG5pbXBvcnQgeyBlbnN1cmVBbmRDbGVhckRpciwgZmV0Y2hXaXRoUmV0cnksIGlzT3B0aW9uRW1wdHlPckhhc1ZhbHVlIH0gZnJvbSBcIi4vc2hhcmVkL3V0aWxcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIC4uLmNvbW1vbk9wdGlvbnMsXG4gIHtcbiAgICBoZWxwOiBcInNlc3Npb25zIG9mIHRleHRlcyB0byByZXRyaWV2ZTsgbGVhdmUgZW1wdHkgZm9yIGFsbFwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwic2Vzc2lvbnNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBoZWxwOiBcInBhcnNlIGFuZCBjb252ZXJ0IGRvY3VtZW50cyBpbnRvIEpTT04gKHRleHRlcyBvbmx5IGZvciBub3csIHJlcXVpcmVzIGZvcm1hdCB4bWwpXCIsXG4gICAgbmFtZTogXCJwYXJzZURvY3VtZW50c1wiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogXCJGXCIsXG4gICAgaGVscDogXCJmb3JtYXRzIG9mIGRvY3VtZW50cyB0byByZXRyaWV2ZSAoeG1sL2h0bWwvcGRmIGZvciB0ZXh0ZXMsIGh0bWwvcGRmIGZvciByYXBwb3J0cyk7IGxlYXZlIGVtcHR5IGZvciBhbGxcIixcbiAgICBtdWx0aXBsZTogdHJ1ZSxcbiAgICBuYW1lOiBcImZvcm1hdHNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBoZWxwOiBcInR5cGVzIG9mIGRvY3VtZW50cyB0byByZXRyaWV2ZSAodGV4dGVzL3JhcHBvcnRzKTsgbGVhdmUgZW1wdHkgZm9yIGFsbFwiLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG5hbWU6IFwidHlwZXNcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG4gIHtcbiAgICBoZWxwOiBcImZvcmNlIHJldHJpZXZlIGFsbCBkb2N1bWVudHMsIGV2ZW4gYWxyZWFkeSByZXRyaWV2ZWQgb25lc1wiLFxuICAgIG5hbWU6IFwiZm9yY2VcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG5cbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKFwidXRmOFwiKVxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZURvY3VtZW50IChkb2N1bWVudFVybDogc3RyaW5nKTogUHJvbWlzZTxBcnJheUJ1ZmZlciB8IG51bGw+IHtcbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIGNvbnNvbGUubG9nKGBSZXRyaWV2aW5nIGRvY3VtZW50ICR7ZG9jdW1lbnRVcmx94oCmYClcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeShkb2N1bWVudFVybClcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBUZXh0ZSAke2RvY3VtZW50VXJsfSBub3QgZm91bmRgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmV0cmlldmluZyB0ZXh0ZSAke2RvY3VtZW50VXJsfTogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpXG4gIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yLm1lc3NhZ2UpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXRyaWV2ZVRleHRlcyAoZGF0YURpcjogc3RyaW5nKSB7XG4gIGNvbnN0IHRleHRlc0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBURVhURV9GT0xERVIpXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVzRGlyKVxuXG4gIGNvbnN0IG9yaWdpbmFsVGV4dGVzRGlyID0gcGF0aC5qb2luKHRleHRlc0RpciwgVEVYVEVfT1JJR0lOQUxfRk9MREVSKVxuICBjb25zdCB0cmFuc2Zvcm1lZFRleHRlc0RpciA9IHBhdGguam9pbih0ZXh0ZXNEaXIsIFRFWFRFX1RSQU5TRk9STUVEX0ZPTERFUilcbiAgaWYgKG9wdGlvbnMucGFyc2VEb2N1bWVudHMpIHtcbiAgICBlbnN1cmVBbmRDbGVhckRpcih0cmFuc2Zvcm1lZFRleHRlc0RpcilcbiAgfVxuXG4gIGxldCByZXRyaWV2ZWRUZXh0ZXNDb3VudCA9IDBcbiAgY29uc3QgdGV4dGVVcmxzTm90Rm91bmRPckVycm9yID0gW11cbiAgY29uc3QgdGV4dGVVcmxzUGFyc2VFcnJvciA9IFtdXG5cbiAgZm9yIChjb25zdCBzZXNzaW9uIG9mIG9wdGlvbnMuc2Vzc2lvbnMpIHtcbiAgICBmb3IgKGNvbnN0IHsgaXRlbTogdGV4dGVNZXRhZGF0YSB9IG9mIGl0ZXJMb2FkU2VuYXREb3NzaWVyc0xlZ2lzbGF0aWZzVGV4dGVVcmxzKGRhdGFEaXIsIHNlc3Npb24pKSB7XG4gICAgICBjb25zdCB0ZXh0ZURpciA9IHBhdGguam9pbihvcmlnaW5hbFRleHRlc0RpciwgYCR7dGV4dGVNZXRhZGF0YS5zZXNzaW9uID8/IFVOREVGSU5FRF9TRVNTSU9OfWAsIHRleHRlTWV0YWRhdGEubmFtZSlcbiAgICAgIGZzLmVuc3VyZURpclN5bmModGV4dGVEaXIpXG5cbiAgICAgIGxldCBleHBvc2VEZXNNb3RpZnNDb250ZW50ID0gbnVsbFxuICAgICAgaWYgKHRleHRlTWV0YWRhdGEudXJsX2V4cG9zZV9kZXNfbW90aWZzKSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIlJldHJpZXZpbmcgZXhwb3PDqSBkZXMgbW90aWZz4oCmXCIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBvc2VEZXNNb3RpZnNQYXRoID0gcGF0aC5qb2luKHRleHRlRGlyLCBgJHt0ZXh0ZU1ldGFkYXRhLm5hbWV9LWV4cG9zZS5odG1sYClcblxuICAgICAgICBleHBvc2VEZXNNb3RpZnNDb250ZW50ID0gYXdhaXQgcmV0cmlldmVEb2N1bWVudCh0ZXh0ZU1ldGFkYXRhLnVybF9leHBvc2VfZGVzX21vdGlmcy50b1N0cmluZygpKVxuICAgICAgICBpZiAoIWV4cG9zZURlc01vdGlmc0NvbnRlbnQpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMoZXhwb3NlRGVzTW90aWZzUGF0aCwgQnVmZmVyLmZyb20oZXhwb3NlRGVzTW90aWZzQ29udGVudCkpXG4gICAgICB9XG5cbiAgICAgIGlmIChpc09wdGlvbkVtcHR5T3JIYXNWYWx1ZShvcHRpb25zLmZvcm1hdHMsIFwieG1sXCIpKSB7XG4gICAgICAgIGNvbnN0IHRleHRlUGF0aCA9IHBhdGguam9pbih0ZXh0ZURpciwgYCR7dGV4dGVNZXRhZGF0YS5uYW1lfS54bWxgKVxuICAgICAgICBsZXQgdGV4dGVCdWZmZXIgPSBudWxsXG5cbiAgICAgICAgaWYgKCFvcHRpb25zLmZvcmNlICYmIGZzLmV4aXN0c1N5bmModGV4dGVQYXRoKSkge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgQWxyZWFkeSByZXRyaWV2ZWQgdGV4dGUgJHt0ZXh0ZVBhdGh94oCmYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dGVCdWZmZXIgPSBhd2FpdCByZXRyaWV2ZURvY3VtZW50KHRleHRlTWV0YWRhdGEudXJsX3htbC50b1N0cmluZygpKVxuICAgICAgICAgIGlmICghdGV4dGVCdWZmZXIpIHtcbiAgICAgICAgICAgIHRleHRlVXJsc05vdEZvdW5kT3JFcnJvci5wdXNoKHRleHRlTWV0YWRhdGEudXJsX3htbClcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGV4dGVQYXRoLCBCdWZmZXIuZnJvbSh0ZXh0ZUJ1ZmZlcikpXG4gICAgICAgICAgcmV0cmlldmVkVGV4dGVzQ291bnQrK1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGFyc2VEb2N1bWVudHMpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgUGFyc2luZyB0ZXh0ZSAke3RleHRlTWV0YWRhdGEubmFtZX0ueG1s4oCmYClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgcGFyc2VkVGV4dGUgPSBudWxsXG4gICAgICAgICAgaWYgKHRleHRlQnVmZmVyKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ZVhtbCA9IHRleHREZWNvZGVyLmRlY29kZSh0ZXh0ZUJ1ZmZlcilcbiAgICAgICAgICAgIHBhcnNlZFRleHRlID0gcGFyc2VUZXh0ZSh0ZXh0ZVhtbClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyc2VkVGV4dGUgPSBhd2FpdCBwYXJzZVRleHRlRnJvbUZpbGUodGV4dGVQYXRoKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcGFyc2VkVGV4dGUpIHtcbiAgICAgICAgICAgIHRleHRlVXJsc1BhcnNlRXJyb3IucHVzaCh0ZXh0ZU1ldGFkYXRhLnVybF94bWwpXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChleHBvc2VEZXNNb3RpZnNDb250ZW50KSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUGFyc2luZyBleHBvc8OpIGRlcyBtb3RpZnPigKZcIilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZXhwb3NlRGVzTW90aWZzSHRtbCA9IHRleHREZWNvZGVyLmRlY29kZShleHBvc2VEZXNNb3RpZnNDb250ZW50KVxuICAgICAgICAgICAgcGFyc2VkVGV4dGUuZXhwb3NlRGVzTW90aWZzID0gcGFyc2VFeHBvc2VEZXNNb3RpZnMoZXhwb3NlRGVzTW90aWZzSHRtbClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZFRleHRlRGlyXG4gICAgICAgICAgICA9IHBhdGguam9pbih0cmFuc2Zvcm1lZFRleHRlc0RpciwgYCR7dGV4dGVNZXRhZGF0YS5zZXNzaW9uID8/IFVOREVGSU5FRF9TRVNTSU9OfWAsIHRleHRlTWV0YWRhdGEubmFtZSlcbiAgICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKHRyYW5zZm9ybWVkVGV4dGVEaXIpXG5cbiAgICAgICAgICBmcy53cml0ZUpTT05TeW5jKHBhdGguam9pbih0cmFuc2Zvcm1lZFRleHRlRGlyLCBgJHt0ZXh0ZU1ldGFkYXRhLm5hbWV9Lmpzb25gKSwgcGFyc2VkVGV4dGUsIHsgc3BhY2VzOiAyIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzT3B0aW9uRW1wdHlPckhhc1ZhbHVlKG9wdGlvbnMuZm9ybWF0cywgXCJodG1sXCIpKSB7XG4gICAgICAgIGNvbnN0IHRleHRlUGF0aCA9IHBhdGguam9pbih0ZXh0ZURpciwgYCR7dGV4dGVNZXRhZGF0YS5uYW1lfS5odG1sYClcblxuICAgICAgICBpZiAoIW9wdGlvbnMuZm9yY2UgJiYgZnMuZXhpc3RzU3luYyh0ZXh0ZVBhdGgpKSB7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBBbHJlYWR5IHJldHJpZXZlZCB0ZXh0ZSAke3RleHRlUGF0aH3igKZgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgIGNvbnN0IHRleHRlQnVmZmVyID0gYXdhaXQgcmV0cmlldmVEb2N1bWVudCh0ZXh0ZU1ldGFkYXRhLnVybF9odG1sLnRvU3RyaW5nKCkpXG4gICAgICAgICAgaWYgKCF0ZXh0ZUJ1ZmZlcikge1xuICAgICAgICAgICAgdGV4dGVVcmxzTm90Rm91bmRPckVycm9yLnB1c2godGV4dGVNZXRhZGF0YS51cmxfaHRtbClcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGV4dGVQYXRoLCBCdWZmZXIuZnJvbSh0ZXh0ZUJ1ZmZlcikpXG4gICAgICAgICAgcmV0cmlldmVkVGV4dGVzQ291bnQrK1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09wdGlvbkVtcHR5T3JIYXNWYWx1ZShvcHRpb25zLmZvcm1hdHMsIFwicGRmXCIpKSB7XG4gICAgICAgIGNvbnN0IHRleHRlUGF0aCA9IHBhdGguam9pbih0ZXh0ZURpciwgYCR7dGV4dGVNZXRhZGF0YS5uYW1lfS5wZGZgKVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JjZSAmJiBmcy5leGlzdHNTeW5jKHRleHRlUGF0aCkpIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYEFscmVhZHkgcmV0cmlldmVkIHRleHRlICR7dGV4dGVQYXRofeKApmApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgY29uc3QgdGV4dGVCdWZmZXIgPSBhd2FpdCByZXRyaWV2ZURvY3VtZW50KHRleHRlTWV0YWRhdGEudXJsX3BkZi50b1N0cmluZygpKVxuICAgICAgICAgIGlmICghdGV4dGVCdWZmZXIpIHtcbiAgICAgICAgICAgIHRleHRlVXJsc05vdEZvdW5kT3JFcnJvci5wdXNoKHRleHRlTWV0YWRhdGEudXJsX3BkZilcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModGV4dGVQYXRoLCBCdWZmZXIuZnJvbSh0ZXh0ZUJ1ZmZlcikpXG4gICAgICAgICAgcmV0cmlldmVkVGV4dGVzQ291bnQrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgIGNvbnNvbGUubG9nKGAke3JldHJpZXZlZFRleHRlc0NvdW50fSB0ZXh0ZXMgcmV0cmlldmVkYClcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAke3RleHRlVXJsc05vdEZvdW5kT3JFcnJvci5sZW5ndGh9IHRleHRlcyBmYWlsZWQgdG8gYmUgcmV0cmlldmVkIHdpdGggVVJMcyAke3RleHRlVXJsc05vdEZvdW5kT3JFcnJvci5qb2luKFwiLCBcIil9YFxuICAgIClcbiAgICBpZiAob3B0aW9ucy5wYXJzZURvY3VtZW50cykge1xuICAgICAgY29uc29sZS5sb2coYCR7dGV4dGVVcmxzUGFyc2VFcnJvci5sZW5ndGh9IHRleHRlcyBmYWlsZWQgdG8gYmUgcGFyc2VkIHdpdGggVVJMcyAke3RleHRlVXJsc1BhcnNlRXJyb3Iuam9pbihcIiwgXCIpfWApXG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlUmFwcG9ydHMgKGRhdGFEaXI6IHN0cmluZykge1xuICBjb25zdCByYXBwb3J0c0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBSQVBQT1JUX0ZPTERFUilcbiAgZnMuZW5zdXJlRGlyU3luYyhyYXBwb3J0c0RpcilcblxuICBsZXQgcmV0cmlldmVkUmFwcG9ydHNDb3VudCA9IDBcbiAgY29uc3QgcmFwcG9ydFVybHNOb3RGb3VuZE9yRXJyb3IgPSBbXVxuXG4gIGZvciAoY29uc3Qgc2Vzc2lvbiBvZiBvcHRpb25zLnNlc3Npb25zKSB7XG4gICAgZm9yIChjb25zdCB7IGl0ZW06IHJhcHBvcnRNZXRhZGF0YSB9IG9mIGl0ZXJMb2FkU2VuYXREb3NzaWVyc0xlZ2lzbGF0aWZzUmFwcG9ydFVybHMoZGF0YURpciwgc2Vzc2lvbikpIHtcbiAgICAgIGNvbnN0IHJhcHBvcnREaXIgPSBwYXRoLmpvaW4ocmFwcG9ydHNEaXIsIGAke3JhcHBvcnRNZXRhZGF0YS5zZXNzaW9uID8/IFVOREVGSU5FRF9TRVNTSU9OfWAsIHJhcHBvcnRNZXRhZGF0YS5uYW1lKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhyYXBwb3J0RGlyKVxuXG4gICAgICBpZiAoaXNPcHRpb25FbXB0eU9ySGFzVmFsdWUob3B0aW9ucy5mb3JtYXRzLCBcImh0bWxcIikpIHtcbiAgICAgICAgY29uc3QgcmFwcG9ydFBhdGggPSBwYXRoLmpvaW4ocmFwcG9ydERpciwgYCR7cmFwcG9ydE1ldGFkYXRhLm5hbWV9Lmh0bWxgKVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JjZSAmJiBmcy5leGlzdHNTeW5jKHJhcHBvcnRQYXRoKSkge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgQWxyZWFkeSByZXRyaWV2ZWQgcmFwcG9ydCAke3JhcHBvcnRQYXRofeKApmApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYXBwb3J0QnVmZmVyID0gYXdhaXQgcmV0cmlldmVEb2N1bWVudChyYXBwb3J0TWV0YWRhdGEudXJsX2h0bWwudG9TdHJpbmcoKSlcbiAgICAgICAgaWYgKCFyYXBwb3J0QnVmZmVyKSB7XG4gICAgICAgICAgcmFwcG9ydFVybHNOb3RGb3VuZE9yRXJyb3IucHVzaChyYXBwb3J0TWV0YWRhdGEudXJsX2h0bWwpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHJhcHBvcnRQYXRoLCBCdWZmZXIuZnJvbShyYXBwb3J0QnVmZmVyKSlcbiAgICAgICAgcmV0cmlldmVkUmFwcG9ydHNDb3VudCsrXG4gICAgICB9XG5cbiAgICAgIGlmIChpc09wdGlvbkVtcHR5T3JIYXNWYWx1ZShvcHRpb25zLmZvcm1hdHMsIFwicGRmXCIpKSB7XG4gICAgICAgIGNvbnN0IHJhcHBvcnRQYXRoID0gcGF0aC5qb2luKHJhcHBvcnREaXIsIGAke3JhcHBvcnRNZXRhZGF0YS5uYW1lfS5wZGZgKVxuXG4gICAgICAgIGlmICghb3B0aW9ucy5mb3JjZSAmJiBmcy5leGlzdHNTeW5jKHJhcHBvcnRQYXRoKSkge1xuICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgQWxyZWFkeSByZXRyaWV2ZWQgcmFwcG9ydCAke3JhcHBvcnRQYXRofeKApmApXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByYXBwb3J0QnVmZmVyID0gYXdhaXQgcmV0cmlldmVEb2N1bWVudChyYXBwb3J0TWV0YWRhdGEudXJsX3BkZi50b1N0cmluZygpKVxuICAgICAgICBpZiAoIXJhcHBvcnRCdWZmZXIpIHtcbiAgICAgICAgICByYXBwb3J0VXJsc05vdEZvdW5kT3JFcnJvci5wdXNoKHJhcHBvcnRNZXRhZGF0YS51cmxfcGRmKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgZnMud3JpdGVGaWxlU3luYyhyYXBwb3J0UGF0aCwgQnVmZmVyLmZyb20ocmFwcG9ydEJ1ZmZlcikpXG4gICAgICAgIHJldHJpZXZlZFJhcHBvcnRzQ291bnQrK1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICBjb25zb2xlLmxvZyhgJHtyZXRyaWV2ZWRSYXBwb3J0c0NvdW50fSByYXBwb3J0cyByZXRyaWV2ZWRgKVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYCR7cmFwcG9ydFVybHNOb3RGb3VuZE9yRXJyb3IubGVuZ3RofSByYXBwb3J0cyBmYWlsZWQgd2l0aCBVUkxzICR7cmFwcG9ydFVybHNOb3RGb3VuZE9yRXJyb3Iuam9pbihcIiwgXCIpfWBcbiAgICApXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgZGF0YURpciA9IG9wdGlvbnMuZGF0YURpclxuICBhc3NlcnQoZGF0YURpciwgXCJNaXNzaW5nIGFyZ3VtZW50OiBkYXRhIGRpcmVjdG9yeVwiKVxuXG4gIGNvbnNvbGUudGltZShcImRvY3VtZW50cyBwcm9jZXNzaW5nIHRpbWVcIilcblxuICBpZiAoaXNPcHRpb25FbXB0eU9ySGFzVmFsdWUob3B0aW9ucy50eXBlcywgXCJ0ZXh0ZXNcIikpIHtcbiAgICBhd2FpdCByZXRyaWV2ZVRleHRlcyhkYXRhRGlyKVxuICB9XG4gIGlmIChpc09wdGlvbkVtcHR5T3JIYXNWYWx1ZShvcHRpb25zLnR5cGVzLCBcInJhcHBvcnRzXCIpKSB7XG4gICAgYXdhaXQgcmV0cmlldmVSYXBwb3J0cyhkYXRhRGlyKVxuICB9XG5cbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS50aW1lRW5kKFwiZG9jdW1lbnRzIHByb2Nlc3NpbmcgdGltZVwiKVxuICB9XG59XG5cbm1haW4oKVxuICAudGhlbigoKSA9PiBwcm9jZXNzLmV4aXQoMCkpXG4gIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxnQkFBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBSixzQkFBQSxDQUFBQyxP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
|