@tricoteuses/senat 1.1.1 → 1.3.1

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 (259) hide show
  1. package/README.md +53 -15
  2. package/lib/aggregates.d.ts +4 -6
  3. package/lib/aggregates.mjs +908 -780
  4. package/lib/aggregates.ts +8 -122
  5. package/lib/data/legislatures.json +38 -0
  6. package/lib/databases.d.ts +9 -0
  7. package/lib/databases.js +41 -11
  8. package/lib/databases.mjs +32 -1
  9. package/lib/databases.ts +40 -1
  10. package/lib/fields.mjs +64 -18
  11. package/lib/index.d.ts +5 -6
  12. package/lib/index.js +8 -99
  13. package/lib/index.mjs +4 -6
  14. package/lib/index.ts +9 -26
  15. package/lib/inserters.d.ts +0 -4
  16. package/lib/inserters.mjs +461 -337
  17. package/lib/inserters.ts +0 -24
  18. package/lib/legislatures.json +38 -0
  19. package/lib/loaders.d.ts +64 -0
  20. package/lib/loaders.js +682 -0
  21. package/lib/loaders.mjs +158 -0
  22. package/lib/loaders.ts +271 -0
  23. package/lib/model/ameli.d.ts +105 -4
  24. package/lib/model/ameli.js +20 -160
  25. package/lib/model/ameli.mjs +84 -57
  26. package/lib/model/ameli.ts +94 -80
  27. package/lib/model/debats.d.ts +0 -4
  28. package/lib/model/debats.js +1 -122
  29. package/lib/model/debats.mjs +1 -43
  30. package/lib/model/debats.ts +0 -68
  31. package/lib/model/dosleg.d.ts +227 -29
  32. package/lib/model/dosleg.js +92 -832
  33. package/lib/model/dosleg.mjs +196 -337
  34. package/lib/model/dosleg.ts +213 -531
  35. package/lib/model/index.d.ts +4 -5
  36. package/lib/model/index.js +14 -15
  37. package/lib/model/index.mjs +4 -5
  38. package/lib/model/index.ts +8 -5
  39. package/lib/model/questions.d.ts +88 -2
  40. package/lib/model/questions.js +40 -45
  41. package/lib/model/questions.mjs +71 -8
  42. package/lib/model/questions.ts +90 -11
  43. package/lib/model/sens.d.ts +524 -2
  44. package/lib/model/sens.js +172 -49
  45. package/lib/model/sens.mjs +415 -9
  46. package/lib/model/sens.ts +514 -16
  47. package/lib/model/texte.d.ts +7 -0
  48. package/lib/model/texte.js +321 -0
  49. package/lib/model/texte.mjs +208 -0
  50. package/lib/model/texte.ts +229 -0
  51. package/lib/model/util.d.ts +7 -1
  52. package/lib/model/util.js +37 -53
  53. package/lib/model/util.mjs +19 -10
  54. package/lib/model/util.ts +30 -14
  55. package/lib/raw_types/ameli.d.ts +912 -538
  56. package/lib/raw_types/ameli.js +1 -39
  57. package/lib/raw_types/ameli.mjs +4 -1
  58. package/lib/raw_types/ameli.ts +947 -597
  59. package/lib/raw_types/debats.d.ts +204 -124
  60. package/lib/raw_types/debats.js +1 -18
  61. package/lib/raw_types/debats.mjs +4 -1
  62. package/lib/raw_types/debats.ts +218 -141
  63. package/lib/raw_types/dosleg.d.ts +3533 -2024
  64. package/lib/raw_types/dosleg.js +1 -92
  65. package/lib/raw_types/dosleg.mjs +4 -1
  66. package/lib/raw_types/dosleg.ts +3621 -2189
  67. package/lib/raw_types/questions.d.ts +404 -220
  68. package/lib/raw_types/questions.js +1 -18
  69. package/lib/raw_types/questions.mjs +4 -1
  70. package/lib/raw_types/questions.ts +404 -226
  71. package/lib/raw_types/sens.d.ts +4391 -2706
  72. package/lib/raw_types/sens.js +1 -108
  73. package/lib/raw_types/sens.mjs +4 -1
  74. package/lib/raw_types/sens.ts +4495 -2903
  75. package/lib/raw_types_kysely/ameli.d.ts +6 -0
  76. package/lib/raw_types_kysely/ameli.mjs +7 -0
  77. package/lib/raw_types_kysely/ameli.ts +6 -0
  78. package/lib/raw_types_kysely/debats.d.ts +6 -0
  79. package/lib/raw_types_kysely/debats.mjs +7 -0
  80. package/lib/raw_types_kysely/debats.ts +6 -0
  81. package/lib/raw_types_kysely/dosleg.d.ts +6 -0
  82. package/lib/raw_types_kysely/dosleg.mjs +7 -0
  83. package/lib/raw_types_kysely/dosleg.ts +6 -0
  84. package/lib/raw_types_kysely/questions.d.ts +6 -0
  85. package/lib/raw_types_kysely/questions.mjs +7 -0
  86. package/lib/raw_types_kysely/questions.ts +6 -0
  87. package/lib/raw_types_kysely/sens.d.ts +6 -0
  88. package/lib/raw_types_kysely/sens.mjs +7 -0
  89. package/lib/raw_types_kysely/sens.ts +6 -0
  90. package/lib/raw_types_kysely/texte.d.ts +45 -0
  91. package/lib/raw_types_kysely/texte.mjs +7 -0
  92. package/lib/raw_types_kysely/texte.ts +53 -0
  93. package/lib/raw_types_schemats/ameli.d.ts +541 -0
  94. package/lib/raw_types_schemats/ameli.js +45 -0
  95. package/lib/raw_types_schemats/ameli.mjs +2 -0
  96. package/lib/raw_types_schemats/ameli.ts +601 -0
  97. package/lib/raw_types_schemats/debats.d.ts +127 -0
  98. package/lib/raw_types_schemats/debats.js +24 -0
  99. package/lib/raw_types_schemats/debats.mjs +2 -0
  100. package/lib/raw_types_schemats/debats.ts +145 -0
  101. package/lib/raw_types_schemats/dosleg.d.ts +2029 -0
  102. package/lib/raw_types_schemats/dosleg.js +98 -0
  103. package/lib/raw_types_schemats/dosleg.mjs +2 -0
  104. package/lib/raw_types_schemats/dosleg.ts +2195 -0
  105. package/lib/raw_types_schemats/questions.d.ts +233 -0
  106. package/lib/raw_types_schemats/questions.js +24 -0
  107. package/lib/raw_types_schemats/questions.mjs +2 -0
  108. package/lib/raw_types_schemats/questions.ts +251 -0
  109. package/lib/raw_types_schemats/sens.d.ts +2709 -0
  110. package/lib/raw_types_schemats/sens.js +114 -0
  111. package/lib/raw_types_schemats/sens.mjs +2 -0
  112. package/lib/raw_types_schemats/sens.ts +2907 -0
  113. package/lib/scripts/convert_data.js +574 -215
  114. package/lib/scripts/convert_data.mjs +134 -99
  115. package/lib/scripts/convert_data.ts +173 -112
  116. package/lib/scripts/datautil.d.ts +5 -0
  117. package/lib/scripts/datautil.js +64 -0
  118. package/lib/scripts/datautil.mjs +16 -0
  119. package/lib/scripts/datautil.ts +19 -0
  120. package/lib/scripts/parse_textes.js +132 -0
  121. package/lib/scripts/parse_textes.mjs +46 -0
  122. package/lib/scripts/parse_textes.ts +65 -0
  123. package/lib/scripts/retrieve_documents.d.ts +1 -0
  124. package/lib/scripts/retrieve_documents.js +521 -0
  125. package/lib/scripts/retrieve_documents.mjs +249 -0
  126. package/lib/scripts/retrieve_documents.ts +298 -0
  127. package/lib/scripts/retrieve_open_data.js +77 -69
  128. package/lib/scripts/retrieve_open_data.mjs +48 -49
  129. package/lib/scripts/retrieve_open_data.ts +74 -58
  130. package/lib/scripts/retrieve_senateurs_photos.js +45 -63
  131. package/lib/scripts/retrieve_senateurs_photos.mjs +4 -21
  132. package/lib/scripts/retrieve_senateurs_photos.ts +6 -29
  133. package/lib/scripts/retrieve_textes.mjs +325 -74
  134. package/lib/scripts/retrieve_textes.ts +111 -63
  135. package/lib/scripts/shared/cli_helpers.d.ts +44 -0
  136. package/lib/scripts/shared/cli_helpers.js +35 -0
  137. package/lib/scripts/shared/cli_helpers.ts +36 -0
  138. package/lib/scripts/shared/util.d.ts +3 -0
  139. package/lib/scripts/shared/util.js +102 -0
  140. package/lib/scripts/shared/util.ts +33 -0
  141. package/lib/src/aggregates.d.ts +52 -0
  142. package/lib/src/aggregates.mjs +726 -0
  143. package/lib/src/config.d.ts +2 -0
  144. package/lib/src/config.mjs +16 -0
  145. package/lib/src/databases.d.ts +18 -0
  146. package/lib/src/databases.mjs +55 -0
  147. package/lib/src/datasets.d.ts +28 -0
  148. package/lib/src/datasets.mjs +78 -0
  149. package/lib/src/fields.d.ts +10 -0
  150. package/lib/src/fields.mjs +22 -0
  151. package/lib/src/index.d.ts +8 -0
  152. package/lib/src/index.mjs +7 -0
  153. package/lib/src/inserters.d.ts +98 -0
  154. package/lib/src/inserters.mjs +360 -0
  155. package/lib/src/loaders.d.ts +36 -0
  156. package/lib/src/loaders.mjs +107 -0
  157. package/lib/src/model/ameli.d.ts +4 -0
  158. package/lib/src/model/ameli.js +57 -0
  159. package/lib/src/model/debats.d.ts +4 -0
  160. package/lib/src/model/debats.js +43 -0
  161. package/lib/src/model/dosleg.d.ts +197 -0
  162. package/lib/src/model/dosleg.js +169 -0
  163. package/lib/src/model/index.d.ts +4 -0
  164. package/lib/src/model/index.js +4 -0
  165. package/lib/src/model/questions.d.ts +89 -0
  166. package/lib/src/model/questions.js +76 -0
  167. package/lib/src/model/sens.d.ts +390 -0
  168. package/lib/src/model/sens.js +339 -0
  169. package/lib/src/model/texte.d.ts +7 -0
  170. package/lib/src/model/texte.js +183 -0
  171. package/lib/src/raw_types_kysely/ameli.d.ts +915 -0
  172. package/lib/src/raw_types_kysely/ameli.js +5 -0
  173. package/lib/src/raw_types_kysely/debats.d.ts +207 -0
  174. package/lib/src/raw_types_kysely/debats.js +5 -0
  175. package/lib/src/raw_types_kysely/dosleg.d.ts +3532 -0
  176. package/lib/src/raw_types_kysely/dosleg.js +5 -0
  177. package/lib/src/raw_types_kysely/questions.d.ts +414 -0
  178. package/lib/src/raw_types_kysely/questions.js +5 -0
  179. package/lib/src/raw_types_kysely/sens.d.ts +4394 -0
  180. package/lib/src/raw_types_kysely/sens.js +5 -0
  181. package/lib/src/raw_types_schemats/ameli.d.ts +541 -0
  182. package/lib/src/raw_types_schemats/ameli.js +2 -0
  183. package/lib/src/raw_types_schemats/debats.d.ts +127 -0
  184. package/lib/src/raw_types_schemats/debats.js +2 -0
  185. package/lib/src/raw_types_schemats/dosleg.d.ts +2027 -0
  186. package/lib/src/raw_types_schemats/dosleg.js +2 -0
  187. package/lib/src/raw_types_schemats/questions.d.ts +231 -0
  188. package/lib/src/raw_types_schemats/questions.js +2 -0
  189. package/lib/src/raw_types_schemats/sens.d.ts +2709 -0
  190. package/lib/src/raw_types_schemats/sens.js +2 -0
  191. package/lib/src/scripts/convert_data.d.ts +1 -0
  192. package/lib/src/scripts/convert_data.js +95 -0
  193. package/lib/src/scripts/datautil.d.ts +5 -0
  194. package/lib/src/scripts/datautil.js +16 -0
  195. package/lib/src/scripts/parse_textes.d.ts +1 -0
  196. package/lib/src/scripts/parse_textes.js +47 -0
  197. package/lib/src/scripts/retrieve_documents.d.ts +1 -0
  198. package/lib/src/scripts/retrieve_documents.js +258 -0
  199. package/lib/src/scripts/retrieve_open_data.d.ts +1 -0
  200. package/lib/src/scripts/retrieve_open_data.js +214 -0
  201. package/lib/src/scripts/retrieve_senateurs_photos.d.ts +1 -0
  202. package/lib/src/scripts/retrieve_senateurs_photos.js +147 -0
  203. package/lib/src/scripts/shared/cli_helpers.d.ts +44 -0
  204. package/lib/src/scripts/shared/cli_helpers.js +32 -0
  205. package/lib/src/scripts/shared/util.d.ts +3 -0
  206. package/lib/src/scripts/shared/util.js +28 -0
  207. package/lib/src/strings.d.ts +1 -0
  208. package/lib/src/strings.mjs +18 -0
  209. package/lib/src/types/ameli.d.ts +10 -0
  210. package/lib/src/types/ameli.js +13 -0
  211. package/lib/src/types/debats.d.ts +4 -0
  212. package/lib/src/types/debats.js +2 -0
  213. package/lib/src/types/dosleg.d.ts +98 -0
  214. package/lib/src/types/dosleg.js +151 -0
  215. package/lib/src/types/questions.d.ts +2 -0
  216. package/lib/src/types/questions.js +1 -0
  217. package/lib/src/types/sens.d.ts +10 -0
  218. package/lib/src/types/sens.js +1 -0
  219. package/lib/src/types/sessions.d.ts +42 -0
  220. package/lib/src/types/sessions.js +43 -0
  221. package/lib/src/types/texte.d.ts +61 -0
  222. package/lib/src/types/texte.js +16 -0
  223. package/lib/src/validators/config.d.ts +1 -0
  224. package/lib/src/validators/config.js +54 -0
  225. package/lib/src/validators/senat.d.ts +0 -0
  226. package/lib/src/validators/senat.js +24 -0
  227. package/lib/types/ameli.d.ts +1 -1
  228. package/lib/types/ameli.js +2 -2
  229. package/lib/types/ameli.ts +1 -1
  230. package/lib/types/debats.d.ts +1 -1
  231. package/lib/types/debats.js +2 -2
  232. package/lib/types/debats.ts +1 -1
  233. package/lib/types/dosleg.d.ts +2 -2
  234. package/lib/types/dosleg.js +2 -2
  235. package/lib/types/dosleg.ts +2 -2
  236. package/lib/types/questions.d.ts +1 -1
  237. package/lib/types/questions.js +2 -2
  238. package/lib/types/questions.ts +1 -1
  239. package/lib/types/sens.d.ts +1 -3
  240. package/lib/types/sens.js +2 -5
  241. package/lib/types/sens.mjs +1 -23
  242. package/lib/types/sens.ts +1 -25
  243. package/lib/types/sessions.d.ts +42 -0
  244. package/lib/types/sessions.js +51 -0
  245. package/lib/types/sessions.mjs +43 -0
  246. package/lib/types/sessions.ts +42 -0
  247. package/lib/types/texte.d.ts +65 -0
  248. package/lib/types/texte.js +24 -0
  249. package/lib/types/texte.mjs +16 -0
  250. package/lib/types/texte.ts +76 -0
  251. package/package.json +35 -10
  252. package/lib/aggregates.js +0 -1122
  253. package/lib/fields.js +0 -68
  254. package/lib/inserters.js +0 -518
  255. package/lib/scripts/fix_db.js +0 -144
  256. package/lib/scripts/fix_db.mjs +0 -64
  257. package/lib/scripts/fix_db.ts +0 -75
  258. package/lib/scripts/retrieve_textes.js +0 -179
  259. /package/lib/scripts/{fix_db.d.ts → parse_textes.d.ts} +0 -0
@@ -1,77 +1,328 @@
1
- import assert from "assert";
2
- import commandLineArgs from "command-line-args";
3
- import fetch from "cross-fetch";
4
- import fs from "fs-extra";
5
- import path from "path";
6
- import { texteFieldsToParseInt, texteFieldsToTrim } from "../types/dosleg";
7
- import { checkDatabase } from "../databases";
8
- import { parseIntFields, trimFieldsRight } from "../fields";
9
- const optionsDefinitions = [
10
- {
11
- alias: "s",
12
- help: "don't log anything",
13
- name: "silent",
14
- type: Boolean,
15
- },
16
- {
17
- alias: "v",
18
- help: "verbose logs",
19
- name: "verbose",
20
- type: Boolean,
21
- },
22
- {
23
- defaultOption: true,
24
- help: "directory containing Sénat open data files",
25
- name: "dataDir",
26
- type: String,
27
- },
28
- ];
29
- const options = commandLineArgs(optionsDefinitions);
30
- async function main() {
31
- const dataDir = options.dataDir;
32
- assert(dataDir, "Missing argument: data directory");
33
- const db = await checkDatabase("dosleg");
34
- const legDir = path.join(dataDir, "leg");
35
- fs.ensureDirSync(legDir);
36
- const textes = (await db.any(`
37
- SELECT *
38
- FROM texte
39
- `)).map((texte) => parseIntFields(texteFieldsToParseInt, trimFieldsRight(texteFieldsToTrim, texte)));
40
- for (const texte of textes) {
41
- if (texte.texurl === null) {
42
- continue;
43
- }
44
- if (texte.typurl !== "I") {
45
- // This is not an "I"nternal URL.
46
- continue;
47
- }
48
- if (texte.texurl.endsWith(".pdf")) {
49
- continue;
50
- }
51
- const url = new URL(texte.texurl, "http://www.senat.fr/leg/").toString();
52
- if (!options.silent) {
53
- console.log(`Retrieving page ${url}…`);
54
- }
55
- const response = await fetch(url);
56
- const page = await response.text();
57
- if (!response.ok) {
58
- if (response.status === 404) {
59
- console.log(`Page ${url} not found`);
60
- }
61
- else {
62
- console.error(`An error occurred while retrieving page ${url}: ${response.status} ${response.statusText}\n${page}`);
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.to-string-tag.js");
5
+ require("core-js/modules/es.array.for-each.js");
6
+ require("core-js/modules/es.array.from.js");
7
+ require("core-js/modules/es.array.is-array.js");
8
+ require("core-js/modules/es.array.reverse.js");
9
+ require("core-js/modules/es.array.slice.js");
10
+ require("core-js/modules/es.json.to-string-tag.js");
11
+ require("core-js/modules/es.math.to-string-tag.js");
12
+ require("core-js/modules/es.object.create.js");
13
+ require("core-js/modules/es.object.define-property.js");
14
+ require("core-js/modules/es.object.get-prototype-of.js");
15
+ require("core-js/modules/es.object.set-prototype-of.js");
16
+ require("core-js/modules/es.regexp.exec.js");
17
+ require("core-js/modules/web.dom-collections.for-each.js");
18
+ require("core-js/modules/es.symbol.js");
19
+ require("core-js/modules/es.symbol.description.js");
20
+ require("core-js/modules/es.symbol.async-iterator.js");
21
+ require("core-js/modules/es.symbol.iterator.js");
22
+ require("core-js/modules/es.array.concat.js");
23
+ require("core-js/modules/es.array.iterator.js");
24
+ require("core-js/modules/es.array.join.js");
25
+ require("core-js/modules/es.date.to-string.js");
26
+ require("core-js/modules/es.function.name.js");
27
+ require("core-js/modules/es.object.to-string.js");
28
+ require("core-js/modules/es.promise.js");
29
+ require("core-js/modules/es.regexp.to-string.js");
30
+ require("core-js/modules/es.string.iterator.js");
31
+ require("core-js/modules/web.dom-collections.iterator.js");
32
+ require("core-js/modules/web.url.js");
33
+ require("core-js/modules/web.url.to-json.js");
34
+ require("core-js/modules/web.url-search-params.js");
35
+ var _assert = _interopRequireDefault(require("assert"));
36
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
37
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
38
+ var _path = _interopRequireDefault(require("path"));
39
+ var _dosleg = require("../model/dosleg");
40
+ var _datautil = require("./datautil");
41
+ var _cli_helpers = require("./shared/cli_helpers");
42
+ var _util = require("./shared/util");
43
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
44
+ 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; }
45
+ 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); }
46
+ 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); }); }; }
47
+ function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
48
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
49
+ 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; } }
50
+ function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
51
+ function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
52
+ 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; }
53
+ function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
54
+ function AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, "return": function _return(r) { var n = this.s["return"]; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, "throw": function _throw(r) { var n = this.s["return"]; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); }
55
+ var optionsDefinitions = [].concat(_toConsumableArray(_cli_helpers.commonOptions), [{
56
+ help: "sessions of texts to retrieve; leave empty for all",
57
+ multiple: true,
58
+ name: "sessions",
59
+ type: String
60
+ }, {
61
+ help: "parse and convert documents into JSON (textes only for now)",
62
+ name: "parseDocuments",
63
+ type: Boolean
64
+ }]);
65
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
66
+ var SENAT_TEXTE_BASE_URL = "https://www.senat.fr/akomantoso/";
67
+ var SENAT_RAPPORT_BASE_URL = "https://www.senat.fr/rap/";
68
+ function retrieveDocument(_x) {
69
+ return _retrieveDocument.apply(this, arguments);
70
+ }
71
+ function _retrieveDocument() {
72
+ _retrieveDocument = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(documentUrl) {
73
+ var response;
74
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
75
+ while (1) switch (_context.prev = _context.next) {
76
+ case 0:
77
+ if (!options.silent) {
78
+ console.log("Retrieving document ".concat(documentUrl, "\u2026"));
79
+ }
80
+ _context.prev = 1;
81
+ _context.next = 4;
82
+ return (0, _util.fetchWithRetry)(documentUrl);
83
+ case 4:
84
+ response = _context.sent;
85
+ if (response.ok) {
86
+ _context.next = 8;
87
+ break;
88
+ }
89
+ if (response.status === 404) {
90
+ console.warn("Texte ".concat(documentUrl, " not found"));
91
+ } else {
92
+ console.error("An error occurred while retrieving texte ".concat(documentUrl, ": ").concat(response.status));
93
+ }
94
+ return _context.abrupt("return", null);
95
+ case 8:
96
+ _context.next = 10;
97
+ return response.text();
98
+ case 10:
99
+ return _context.abrupt("return", _context.sent);
100
+ case 13:
101
+ _context.prev = 13;
102
+ _context.t0 = _context["catch"](1);
103
+ console.error(_context.t0.message);
104
+ return _context.abrupt("return", null);
105
+ case 17:
106
+ case "end":
107
+ return _context.stop();
108
+ }
109
+ }, _callee, null, [[1, 13]]);
110
+ }));
111
+ return _retrieveDocument.apply(this, arguments);
112
+ }
113
+ function retrieveTextes(_x2) {
114
+ return _retrieveTextes.apply(this, arguments);
115
+ }
116
+ function _retrieveTextes() {
117
+ _retrieveTextes = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2(dataDir) {
118
+ var textesDir, retrievedTextesCount, texteUrlsNotFoundOrError, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, texte, texteName, texteXmlUrl, texteXmlAbsoluteUrl, texteXml, _texte$session, texteDir;
119
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
120
+ while (1) switch (_context2.prev = _context2.next) {
121
+ case 0:
122
+ textesDir = _path["default"].join(dataDir, "leg");
123
+ _fsExtra["default"].ensureDirSync(textesDir);
124
+ retrievedTextesCount = 0;
125
+ texteUrlsNotFoundOrError = [];
126
+ _iteratorAbruptCompletion = false;
127
+ _didIteratorError = false;
128
+ _context2.prev = 6;
129
+ _iterator = _asyncIterator((0, _dosleg.findSenatTexteUrls)(options.sessions));
130
+ case 8:
131
+ _context2.next = 10;
132
+ return _iterator.next();
133
+ case 10:
134
+ if (!(_iteratorAbruptCompletion = !(_step = _context2.sent).done)) {
135
+ _context2.next = 22;
136
+ break;
137
+ }
138
+ texte = _step.value;
139
+ texteName = _path["default"].parse(texte.url).name;
140
+ texteXmlUrl = "".concat(texteName, ".akn.xml");
141
+ texteXmlAbsoluteUrl = new URL(texteXmlUrl, SENAT_TEXTE_BASE_URL).toString();
142
+ _context2.next = 17;
143
+ return retrieveDocument(texteXmlAbsoluteUrl);
144
+ case 17:
145
+ texteXml = _context2.sent;
146
+ if (texteXml) {
147
+ if (options.parseDocuments) {
148
+ //const parsedTexte = await parseTexte(texteXml)
63
149
  }
64
- continue;
65
- }
66
- const pathParsed = path.parse(path.join(legDir, ...texte.texurl.split("/").filter(Boolean)));
67
- const pageDir = path.join(pathParsed.dir, pathParsed.name);
68
- fs.ensureDirSync(pageDir);
69
- fs.writeFileSync(path.join(pageDir, "index" + pathParsed.ext), page);
70
- }
150
+ texteDir = _path["default"].join(textesDir, "".concat((_texte$session = texte.session) !== null && _texte$session !== void 0 ? _texte$session : _datautil.UNDEFINED_SESSION), texteName);
151
+ (0, _util.ensureAndClearDir)(texteDir);
152
+ _fsExtra["default"].writeFileSync(_path["default"].join(texteDir, texteXmlUrl), texteXml);
153
+ retrievedTextesCount++;
154
+ } else {
155
+ texteUrlsNotFoundOrError.push(texteXmlAbsoluteUrl);
156
+ }
157
+ case 19:
158
+ _iteratorAbruptCompletion = false;
159
+ _context2.next = 8;
160
+ break;
161
+ case 22:
162
+ _context2.next = 28;
163
+ break;
164
+ case 24:
165
+ _context2.prev = 24;
166
+ _context2.t0 = _context2["catch"](6);
167
+ _didIteratorError = true;
168
+ _iteratorError = _context2.t0;
169
+ case 28:
170
+ _context2.prev = 28;
171
+ _context2.prev = 29;
172
+ if (!(_iteratorAbruptCompletion && _iterator["return"] != null)) {
173
+ _context2.next = 33;
174
+ break;
175
+ }
176
+ _context2.next = 33;
177
+ return _iterator["return"]();
178
+ case 33:
179
+ _context2.prev = 33;
180
+ if (!_didIteratorError) {
181
+ _context2.next = 36;
182
+ break;
183
+ }
184
+ throw _iteratorError;
185
+ case 36:
186
+ return _context2.finish(33);
187
+ case 37:
188
+ return _context2.finish(28);
189
+ case 38:
190
+ if (options.verbose) {
191
+ console.log("".concat(retrievedTextesCount, " textes retrieved"));
192
+ console.log("".concat(texteUrlsNotFoundOrError.length, " textes failed with URLs ").concat(texteUrlsNotFoundOrError.join(", ")));
193
+ }
194
+ // TODO retrieve other formats (html/pdf) ?
195
+ case 39:
196
+ case "end":
197
+ return _context2.stop();
198
+ }
199
+ }, _callee2, null, [[6, 24, 28, 38], [29,, 33, 37]]);
200
+ }));
201
+ return _retrieveTextes.apply(this, arguments);
202
+ }
203
+ function retrieveRapports(_x3) {
204
+ return _retrieveRapports.apply(this, arguments);
205
+ }
206
+ function _retrieveRapports() {
207
+ _retrieveRapports = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3(dataDir) {
208
+ var rapportsDir, retrievedRapportsCount, rapportUrlsNotFoundOrError, _iteratorAbruptCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, rapport, rapportUrl, parsedRapportUrl, rapportUrlBase, rapportName, rapportAbsoluteUrl, rapportContent, _rapport$session, rapportDir;
209
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
210
+ while (1) switch (_context3.prev = _context3.next) {
211
+ case 0:
212
+ rapportsDir = _path["default"].join(dataDir, "rap");
213
+ _fsExtra["default"].ensureDirSync(rapportsDir);
214
+ retrievedRapportsCount = 0;
215
+ rapportUrlsNotFoundOrError = [];
216
+ _iteratorAbruptCompletion2 = false;
217
+ _didIteratorError2 = false;
218
+ _context3.prev = 6;
219
+ _iterator2 = _asyncIterator((0, _dosleg.findSenatRapportUrls)(options.sessions));
220
+ case 8:
221
+ _context3.next = 10;
222
+ return _iterator2.next();
223
+ case 10:
224
+ if (!(_iteratorAbruptCompletion2 = !(_step2 = _context3.sent).done)) {
225
+ _context3.next = 25;
226
+ break;
227
+ }
228
+ rapport = _step2.value;
229
+ rapportUrl = rapport.url;
230
+ parsedRapportUrl = _path["default"].parse(rapport.url);
231
+ rapportUrlBase = parsedRapportUrl.base;
232
+ rapportName = parsedRapportUrl.name;
233
+ if (parsedRapportUrl.ext === ".html") {
234
+ rapportUrlBase = "".concat(rapportName, "_mono.html");
235
+ rapportUrl = _path["default"].format({
236
+ dir: parsedRapportUrl.dir,
237
+ base: rapportUrlBase
238
+ });
239
+ }
240
+ rapportAbsoluteUrl = new URL(rapportUrl, SENAT_RAPPORT_BASE_URL).toString();
241
+ _context3.next = 20;
242
+ return retrieveDocument(rapportAbsoluteUrl);
243
+ case 20:
244
+ rapportContent = _context3.sent;
245
+ if (rapportContent) {
246
+ rapportDir = _path["default"].join(rapportsDir, "".concat((_rapport$session = rapport.session) !== null && _rapport$session !== void 0 ? _rapport$session : _datautil.UNDEFINED_SESSION), rapportName);
247
+ (0, _util.ensureAndClearDir)(rapportDir);
248
+ _fsExtra["default"].writeFileSync(_path["default"].join(rapportDir, rapportUrlBase), rapportContent);
249
+ retrievedRapportsCount++;
250
+ } else {
251
+ rapportUrlsNotFoundOrError.push(rapportAbsoluteUrl);
252
+ }
253
+ case 22:
254
+ _iteratorAbruptCompletion2 = false;
255
+ _context3.next = 8;
256
+ break;
257
+ case 25:
258
+ _context3.next = 31;
259
+ break;
260
+ case 27:
261
+ _context3.prev = 27;
262
+ _context3.t0 = _context3["catch"](6);
263
+ _didIteratorError2 = true;
264
+ _iteratorError2 = _context3.t0;
265
+ case 31:
266
+ _context3.prev = 31;
267
+ _context3.prev = 32;
268
+ if (!(_iteratorAbruptCompletion2 && _iterator2["return"] != null)) {
269
+ _context3.next = 36;
270
+ break;
271
+ }
272
+ _context3.next = 36;
273
+ return _iterator2["return"]();
274
+ case 36:
275
+ _context3.prev = 36;
276
+ if (!_didIteratorError2) {
277
+ _context3.next = 39;
278
+ break;
279
+ }
280
+ throw _iteratorError2;
281
+ case 39:
282
+ return _context3.finish(36);
283
+ case 40:
284
+ return _context3.finish(31);
285
+ case 41:
286
+ if (options.verbose) {
287
+ console.log("".concat(retrievedRapportsCount, " rapports retrieved"));
288
+ console.log("".concat(rapportUrlsNotFoundOrError.length, " rapports failed with URLs ").concat(rapportUrlsNotFoundOrError.join(", ")));
289
+ }
290
+ case 42:
291
+ case "end":
292
+ return _context3.stop();
293
+ }
294
+ }, _callee3, null, [[6, 27, 31, 41], [32,, 36, 40]]);
295
+ }));
296
+ return _retrieveRapports.apply(this, arguments);
297
+ }
298
+ function main() {
299
+ return _main.apply(this, arguments);
300
+ }
301
+ function _main() {
302
+ _main = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
303
+ var dataDir;
304
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
305
+ while (1) switch (_context4.prev = _context4.next) {
306
+ case 0:
307
+ dataDir = options.dataDir;
308
+ (0, _assert["default"])(dataDir, "Missing argument: data directory");
309
+ _context4.next = 4;
310
+ return retrieveTextes(dataDir);
311
+ case 4:
312
+ _context4.next = 6;
313
+ return retrieveRapports(dataDir);
314
+ case 6:
315
+ case "end":
316
+ return _context4.stop();
317
+ }
318
+ }, _callee4);
319
+ }));
320
+ return _main.apply(this, arguments);
71
321
  }
72
- main()
73
- .then(() => process.exit(0))
74
- .catch((error) => {
75
- console.log(error);
76
- process.exit(1);
322
+ main().then(function () {
323
+ return process.exit(0);
324
+ })["catch"](function (error) {
325
+ console.log(error);
326
+ process.exit(1);
77
327
  });
328
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29tbWFuZExpbmVBcmdzIiwiX2ZzRXh0cmEiLCJfcGF0aCIsIl9kb3NsZWciLCJfZGF0YXV0aWwiLCJfY2xpX2hlbHBlcnMiLCJfdXRpbCIsImUiLCJfX2VzTW9kdWxlIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiYXN5bmNHZW5lcmF0b3JTdGVwIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJhcmd1bWVudHMiLCJhcHBseSIsIl9uZXh0IiwiX3Rocm93IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiX2FycmF5V2l0aG91dEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwiaXNBcnJheSIsIl9hc3luY0l0ZXJhdG9yIiwiQXN5bmNGcm9tU3luY0l0ZXJhdG9yIiwiQXN5bmNGcm9tU3luY0l0ZXJhdG9yQ29udGludWF0aW9uIiwicmVqZWN0IiwiX3JldHVybiIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImNvbmNhdCIsImNvbW1vbk9wdGlvbnMiLCJoZWxwIiwibXVsdGlwbGUiLCJTdHJpbmciLCJCb29sZWFuIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsIlNFTkFUX1RFWFRFX0JBU0VfVVJMIiwiU0VOQVRfUkFQUE9SVF9CQVNFX1VSTCIsInJldHJpZXZlRG9jdW1lbnQiLCJfeCIsIl9yZXRyaWV2ZURvY3VtZW50IiwiX2NhbGxlZSIsImRvY3VtZW50VXJsIiwicmVzcG9uc2UiLCJfY2FsbGVlJCIsIl9jb250ZXh0Iiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsImZldGNoV2l0aFJldHJ5Iiwib2siLCJzdGF0dXMiLCJ3YXJuIiwiZXJyb3IiLCJ0ZXh0IiwidDAiLCJtZXNzYWdlIiwicmV0cmlldmVUZXh0ZXMiLCJfeDIiLCJfcmV0cmlldmVUZXh0ZXMiLCJfY2FsbGVlMiIsImRhdGFEaXIiLCJ0ZXh0ZXNEaXIiLCJyZXRyaWV2ZWRUZXh0ZXNDb3VudCIsInRleHRlVXJsc05vdEZvdW5kT3JFcnJvciIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJ0ZXh0ZSIsInRleHRlTmFtZSIsInRleHRlWG1sVXJsIiwidGV4dGVYbWxBYnNvbHV0ZVVybCIsInRleHRlWG1sIiwiX3RleHRlJHNlc3Npb24iLCJ0ZXh0ZURpciIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsInBhdGgiLCJqb2luIiwiZnMiLCJlbnN1cmVEaXJTeW5jIiwiZmluZFNlbmF0VGV4dGVVcmxzIiwic2Vzc2lvbnMiLCJwYXJzZSIsInVybCIsIlVSTCIsInBhcnNlRG9jdW1lbnRzIiwic2Vzc2lvbiIsIlVOREVGSU5FRF9TRVNTSU9OIiwiZW5zdXJlQW5kQ2xlYXJEaXIiLCJ3cml0ZUZpbGVTeW5jIiwidmVyYm9zZSIsInJldHJpZXZlUmFwcG9ydHMiLCJfeDMiLCJfcmV0cmlldmVSYXBwb3J0cyIsIl9jYWxsZWUzIiwicmFwcG9ydHNEaXIiLCJyZXRyaWV2ZWRSYXBwb3J0c0NvdW50IiwicmFwcG9ydFVybHNOb3RGb3VuZE9yRXJyb3IiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uMiIsIl9kaWRJdGVyYXRvckVycm9yMiIsIl9pdGVyYXRvckVycm9yMiIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJyYXBwb3J0IiwicmFwcG9ydFVybCIsInBhcnNlZFJhcHBvcnRVcmwiLCJyYXBwb3J0VXJsQmFzZSIsInJhcHBvcnROYW1lIiwicmFwcG9ydEFic29sdXRlVXJsIiwicmFwcG9ydENvbnRlbnQiLCJfcmFwcG9ydCRzZXNzaW9uIiwicmFwcG9ydERpciIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImZpbmRTZW5hdFJhcHBvcnRVcmxzIiwiYmFzZSIsImV4dCIsImZvcm1hdCIsImRpciIsIm1haW4iLCJfbWFpbiIsIl9jYWxsZWU0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiYXNzZXJ0IiwicHJvY2VzcyIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZXRyaWV2ZV90ZXh0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIlxuXG5pbXBvcnQgeyBmaW5kU2VuYXRSYXBwb3J0VXJscywgZmluZFNlbmF0VGV4dGVVcmxzIH0gZnJvbSBcIi4uL21vZGVsL2Rvc2xlZ1wiXG5pbXBvcnQgeyBVTkRFRklORURfU0VTU0lPTiB9IGZyb20gXCIuL2RhdGF1dGlsXCJcbmltcG9ydCB7IGNvbW1vbk9wdGlvbnMgfSBmcm9tIFwiLi9zaGFyZWQvY2xpX2hlbHBlcnNcIlxuaW1wb3J0IHsgZW5zdXJlQW5kQ2xlYXJEaXIsIGZldGNoV2l0aFJldHJ5IH0gZnJvbSBcIi4vc2hhcmVkL3V0aWxcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIC4uLmNvbW1vbk9wdGlvbnMsXG4gIHtcbiAgICBoZWxwOiBcInNlc3Npb25zIG9mIHRleHRzIHRvIHJldHJpZXZlOyBsZWF2ZSBlbXB0eSBmb3IgYWxsXCIsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogXCJzZXNzaW9uc1wiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGhlbHA6IFwicGFyc2UgYW5kIGNvbnZlcnQgZG9jdW1lbnRzIGludG8gSlNPTiAodGV4dGVzIG9ubHkgZm9yIG5vdylcIixcbiAgICBuYW1lOiBcInBhcnNlRG9jdW1lbnRzXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG5jb25zdCBTRU5BVF9URVhURV9CQVNFX1VSTCA9IFwiaHR0cHM6Ly93d3cuc2VuYXQuZnIvYWtvbWFudG9zby9cIlxuY29uc3QgU0VOQVRfUkFQUE9SVF9CQVNFX1VSTCA9IFwiaHR0cHM6Ly93d3cuc2VuYXQuZnIvcmFwL1wiXG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlRG9jdW1lbnQgKGRvY3VtZW50VXJsOiBzdHJpbmcpIHtcbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIGNvbnNvbGUubG9nKGBSZXRyaWV2aW5nIGRvY3VtZW50ICR7ZG9jdW1lbnRVcmx94oCmYClcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaFdpdGhSZXRyeShkb2N1bWVudFVybClcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBUZXh0ZSAke2RvY3VtZW50VXJsfSBub3QgZm91bmRgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmV0cmlldmluZyB0ZXh0ZSAke2RvY3VtZW50VXJsfTogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IubWVzc2FnZSlcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlVGV4dGVzIChkYXRhRGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgdGV4dGVzRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIFwibGVnXCIpXG4gIGZzLmVuc3VyZURpclN5bmModGV4dGVzRGlyKVxuXG4gIGxldCByZXRyaWV2ZWRUZXh0ZXNDb3VudCA9IDBcbiAgY29uc3QgdGV4dGVVcmxzTm90Rm91bmRPckVycm9yID0gW11cblxuICBmb3IgYXdhaXQgKGNvbnN0IHRleHRlIG9mIGZpbmRTZW5hdFRleHRlVXJscyhvcHRpb25zLnNlc3Npb25zKSkge1xuICAgIGNvbnN0IHRleHRlTmFtZSA9IHBhdGgucGFyc2UodGV4dGUudXJsKS5uYW1lXG4gICAgY29uc3QgdGV4dGVYbWxVcmwgPSBgJHt0ZXh0ZU5hbWV9LmFrbi54bWxgXG4gICAgY29uc3QgdGV4dGVYbWxBYnNvbHV0ZVVybCA9IG5ldyBVUkwodGV4dGVYbWxVcmwsIFNFTkFUX1RFWFRFX0JBU0VfVVJMKS50b1N0cmluZygpXG5cbiAgICBjb25zdCB0ZXh0ZVhtbCA9IGF3YWl0IHJldHJpZXZlRG9jdW1lbnQodGV4dGVYbWxBYnNvbHV0ZVVybClcblxuICAgIGlmICh0ZXh0ZVhtbCkge1xuICAgICAgaWYgKG9wdGlvbnMucGFyc2VEb2N1bWVudHMpIHtcbiAgICAgICAgLy9jb25zdCBwYXJzZWRUZXh0ZSA9IGF3YWl0IHBhcnNlVGV4dGUodGV4dGVYbWwpXG4gICAgICB9XG4gICAgICBcbiAgICAgIGNvbnN0IHRleHRlRGlyID0gcGF0aC5qb2luKHRleHRlc0RpciwgYCR7dGV4dGUuc2Vzc2lvbiA/PyBVTkRFRklORURfU0VTU0lPTn1gLCB0ZXh0ZU5hbWUpXG4gICAgICBlbnN1cmVBbmRDbGVhckRpcih0ZXh0ZURpcilcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHRleHRlRGlyLCB0ZXh0ZVhtbFVybCksIHRleHRlWG1sKVxuICAgICAgcmV0cmlldmVkVGV4dGVzQ291bnQrK1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXh0ZVVybHNOb3RGb3VuZE9yRXJyb3IucHVzaCh0ZXh0ZVhtbEFic29sdXRlVXJsKVxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICBjb25zb2xlLmxvZyhgJHtyZXRyaWV2ZWRUZXh0ZXNDb3VudH0gdGV4dGVzIHJldHJpZXZlZGApXG4gICAgY29uc29sZS5sb2coXG4gICAgICBgJHt0ZXh0ZVVybHNOb3RGb3VuZE9yRXJyb3IubGVuZ3RofSB0ZXh0ZXMgZmFpbGVkIHdpdGggVVJMcyAke3RleHRlVXJsc05vdEZvdW5kT3JFcnJvci5qb2luKFwiLCBcIil9YFxuICAgIClcbiAgfVxuICAvLyBUT0RPIHJldHJpZXZlIG90aGVyIGZvcm1hdHMgKGh0bWwvcGRmKSA/XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlUmFwcG9ydHMgKGRhdGFEaXI6IHN0cmluZykge1xuICBjb25zdCByYXBwb3J0c0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBcInJhcFwiKVxuICBmcy5lbnN1cmVEaXJTeW5jKHJhcHBvcnRzRGlyKVxuXG4gIGxldCByZXRyaWV2ZWRSYXBwb3J0c0NvdW50ID0gMFxuICBjb25zdCByYXBwb3J0VXJsc05vdEZvdW5kT3JFcnJvciA9IFtdXG5cbiAgZm9yIGF3YWl0IChjb25zdCByYXBwb3J0IG9mIGZpbmRTZW5hdFJhcHBvcnRVcmxzKG9wdGlvbnMuc2Vzc2lvbnMpKSB7XG4gICAgbGV0IHJhcHBvcnRVcmwgPSByYXBwb3J0LnVybFxuICAgIGNvbnN0IHBhcnNlZFJhcHBvcnRVcmwgPSBwYXRoLnBhcnNlKHJhcHBvcnQudXJsKVxuICAgIGxldCByYXBwb3J0VXJsQmFzZSA9IHBhcnNlZFJhcHBvcnRVcmwuYmFzZVxuICAgIGNvbnN0IHJhcHBvcnROYW1lID0gcGFyc2VkUmFwcG9ydFVybC5uYW1lXG4gICAgaWYgKHBhcnNlZFJhcHBvcnRVcmwuZXh0ID09PSBcIi5odG1sXCIpIHtcbiAgICAgIHJhcHBvcnRVcmxCYXNlID0gYCR7cmFwcG9ydE5hbWV9X21vbm8uaHRtbGBcbiAgICAgIHJhcHBvcnRVcmwgPSBwYXRoLmZvcm1hdCh7XG4gICAgICAgIGRpcjogcGFyc2VkUmFwcG9ydFVybC5kaXIsXG4gICAgICAgIGJhc2U6IHJhcHBvcnRVcmxCYXNlLFxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgcmFwcG9ydEFic29sdXRlVXJsID0gbmV3IFVSTChyYXBwb3J0VXJsLCBTRU5BVF9SQVBQT1JUX0JBU0VfVVJMKS50b1N0cmluZygpXG5cbiAgICBjb25zdCByYXBwb3J0Q29udGVudCA9IGF3YWl0IHJldHJpZXZlRG9jdW1lbnQocmFwcG9ydEFic29sdXRlVXJsKVxuXG4gICAgaWYgKHJhcHBvcnRDb250ZW50KSB7XG4gICAgICBjb25zdCByYXBwb3J0RGlyID0gcGF0aC5qb2luKHJhcHBvcnRzRGlyLCBgJHtyYXBwb3J0LnNlc3Npb24gPz8gVU5ERUZJTkVEX1NFU1NJT059YCwgcmFwcG9ydE5hbWUpXG4gICAgICBlbnN1cmVBbmRDbGVhckRpcihyYXBwb3J0RGlyKVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4ocmFwcG9ydERpciwgcmFwcG9ydFVybEJhc2UpLCByYXBwb3J0Q29udGVudClcbiAgICAgIHJldHJpZXZlZFJhcHBvcnRzQ291bnQrK1xuICAgIH0gZWxzZSB7XG4gICAgICByYXBwb3J0VXJsc05vdEZvdW5kT3JFcnJvci5wdXNoKHJhcHBvcnRBYnNvbHV0ZVVybClcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgY29uc29sZS5sb2coYCR7cmV0cmlldmVkUmFwcG9ydHNDb3VudH0gcmFwcG9ydHMgcmV0cmlldmVkYClcbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGAke3JhcHBvcnRVcmxzTm90Rm91bmRPckVycm9yLmxlbmd0aH0gcmFwcG9ydHMgZmFpbGVkIHdpdGggVVJMcyAke3JhcHBvcnRVcmxzTm90Rm91bmRPckVycm9yLmpvaW4oXCIsIFwiKX1gXG4gICAgKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgYXNzZXJ0KGRhdGFEaXIsIFwiTWlzc2luZyBhcmd1bWVudDogZGF0YSBkaXJlY3RvcnlcIilcblxuICBhd2FpdCByZXRyaWV2ZVRleHRlcyhkYXRhRGlyKVxuICBhd2FpdCByZXRyaWV2ZVJhcHBvcnRzKGRhdGFEaXIpXG59XG5cbm1haW4oKVxuICAudGhlbigoKSA9PiBwcm9jZXNzLmV4aXQoMCkpXG4gIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLGdCQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBSSxPQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxTQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxLQUFBLEdBQUFQLE9BQUE7QUFBaUUsU0FBQUQsdUJBQUFTLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUFBLFNBQUFFLG9CQUFBLGtCQVBqRSxxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUYsQ0FBQSxTQUFBRyxDQUFBLEVBQUFILENBQUEsT0FBQUksQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEs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