@tricoteuses/assemblee 1.0.0-next.2 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/README.md +2 -0
  2. package/lib/api.js +23 -7
  3. package/lib/api.mjs +41 -0
  4. package/lib/bugs/acteur-00010/plugin.test.js +139 -33
  5. package/lib/bugs/acteur-00010/plugin.test.mjs +33 -0
  6. package/lib/bugs/acteur-00010.js +166 -24
  7. package/lib/bugs/acteur-00010.mjs +31 -0
  8. package/lib/bugs/agenda-00002/plugin.test.js +178 -52
  9. package/lib/bugs/agenda-00002/plugin.test.mjs +52 -0
  10. package/lib/bugs/agenda-00002.js +507 -143
  11. package/lib/bugs/agenda-00002.mjs +197 -0
  12. package/lib/bugs/agenda-00008/plugin.test.js +143 -31
  13. package/lib/bugs/agenda-00008/plugin.test.mjs +31 -0
  14. package/lib/bugs/agenda-00008.js +180 -25
  15. package/lib/bugs/agenda-00008.mjs +30 -0
  16. package/lib/bugs/agenda-00011/plugin.test.js +371 -156
  17. package/lib/bugs/agenda-00011/plugin.test.mjs +156 -0
  18. package/lib/bugs/agenda-00011.js +416 -117
  19. package/lib/bugs/agenda-00011.mjs +150 -0
  20. package/lib/bugs.js +591 -54
  21. package/lib/bugs.mjs +93 -0
  22. package/lib/cleaners/actes_legislatifs.js +149 -61
  23. package/lib/cleaners/actes_legislatifs.mjs +311 -0
  24. package/lib/cleaners/acteurs.js +255 -123
  25. package/lib/cleaners/acteurs.mjs +211 -0
  26. package/lib/cleaners/amendements.js +242 -117
  27. package/lib/cleaners/amendements.mjs +292 -0
  28. package/lib/cleaners/documents.js +147 -62
  29. package/lib/cleaners/documents.mjs +162 -0
  30. package/lib/cleaners/dossiers_legislatifs.js +132 -45
  31. package/lib/cleaners/dossiers_legislatifs.mjs +123 -0
  32. package/lib/cleaners/index.js +64 -8
  33. package/lib/cleaners/index.mjs +8 -0
  34. package/lib/cleaners/organes.js +54 -21
  35. package/lib/cleaners/organes.mjs +64 -0
  36. package/lib/cleaners/reunions.js +237 -127
  37. package/lib/cleaners/reunions.mjs +318 -0
  38. package/lib/cleaners/scrutins.js +261 -99
  39. package/lib/cleaners/scrutins.mjs +254 -0
  40. package/lib/cleaners/xml.js +81 -16
  41. package/lib/cleaners/xml.mjs +42 -0
  42. package/lib/datasets.js +284 -153
  43. package/lib/datasets.mjs +596 -0
  44. package/lib/dates.js +93 -34
  45. package/lib/dates.mjs +98 -0
  46. package/lib/dossiers_legislatifs.js +107 -33
  47. package/lib/dossiers_legislatifs.mjs +215 -0
  48. package/lib/file_systems.js +203 -35
  49. package/lib/file_systems.mjs +64 -0
  50. package/lib/git.js +139 -41
  51. package/lib/git.mjs +114 -0
  52. package/lib/index.js +310 -16
  53. package/lib/index.mjs +16 -0
  54. package/lib/inserters.js +355 -131
  55. package/lib/inserters.mjs +413 -0
  56. package/lib/loaders.js +900 -440
  57. package/lib/loaders.mjs +678 -0
  58. package/lib/organes.js +15 -5
  59. package/lib/organes.mjs +18 -0
  60. package/lib/parsers/documents.js +241 -89
  61. package/lib/parsers/documents.mjs +433 -0
  62. package/lib/parsers/index.js +36 -3
  63. package/lib/parsers/index.mjs +3 -0
  64. package/lib/parsers/recherche_amendements.js +616 -173
  65. package/lib/parsers/recherche_amendements.mjs +189 -0
  66. package/lib/raw_types/acteurs_et_organes.d.ts +36 -148
  67. package/lib/raw_types/acteurs_et_organes.js +228 -506
  68. package/lib/raw_types/acteurs_et_organes.mjs +1240 -0
  69. package/lib/raw_types/agendas.js +165 -75
  70. package/lib/raw_types/agendas.mjs +944 -0
  71. package/lib/raw_types/amendements.js +165 -77
  72. package/lib/raw_types/amendements.mjs +1040 -0
  73. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -43
  74. package/lib/raw_types/dossiers_legislatifs.js +181 -143
  75. package/lib/raw_types/dossiers_legislatifs.mjs +1792 -0
  76. package/lib/raw_types/scrutins.js +144 -61
  77. package/lib/raw_types/scrutins.mjs +645 -0
  78. package/lib/scripts/bugs_helper.js +657 -155
  79. package/lib/scripts/bugs_helper.mjs +286 -0
  80. package/lib/scripts/clean_data.js +380 -145
  81. package/lib/scripts/clean_data.mjs +190 -0
  82. package/lib/scripts/clean_reorganized_data.js +627 -331
  83. package/lib/scripts/clean_reorganized_data.mjs +520 -0
  84. package/lib/scripts/diff_amendements.js +159 -73
  85. package/lib/scripts/diff_amendements.mjs +234 -0
  86. package/lib/scripts/document_dossiers_legislatifs.js +570 -288
  87. package/lib/scripts/document_dossiers_legislatifs.mjs +494 -0
  88. package/lib/scripts/get_today_reunions.js +37 -20
  89. package/lib/scripts/get_today_reunions.mjs +41 -0
  90. package/lib/scripts/merge_scrutins.js +121 -39
  91. package/lib/scripts/merge_scrutins.mjs +69 -0
  92. package/lib/scripts/parse_textes_lois.js +179 -125
  93. package/lib/scripts/parse_textes_lois.mjs +215 -0
  94. package/lib/scripts/raw_types_from_amendements.js +276 -77
  95. package/lib/scripts/raw_types_from_amendements.mjs +118 -0
  96. package/lib/scripts/reorganize_data.js +867 -446
  97. package/lib/scripts/reorganize_data.mjs +712 -0
  98. package/lib/scripts/retrieve_deputes_photos.js +378 -157
  99. package/lib/scripts/retrieve_deputes_photos.mjs +230 -0
  100. package/lib/scripts/retrieve_documents.js +648 -172
  101. package/lib/scripts/retrieve_documents.mjs +292 -0
  102. package/lib/scripts/retrieve_open_data.js +286 -85
  103. package/lib/scripts/retrieve_open_data.mjs +125 -0
  104. package/lib/scripts/retrieve_pending_amendments.js +302 -69
  105. package/lib/scripts/retrieve_pending_amendments.mjs +130 -0
  106. package/lib/scripts/retrieve_senateurs_photos.js +374 -198
  107. package/lib/scripts/retrieve_senateurs_photos.mjs +277 -0
  108. package/lib/scripts/retrieve_textes_lois.js +343 -89
  109. package/lib/scripts/retrieve_textes_lois.mjs +168 -0
  110. package/lib/scripts/test_load.js +30 -11
  111. package/lib/scripts/test_load.mjs +26 -0
  112. package/lib/scripts/test_load_big_files.js +30 -11
  113. package/lib/scripts/test_load_big_files.mjs +26 -0
  114. package/lib/scripts/validate_json.js +370 -120
  115. package/lib/scripts/validate_json.mjs +216 -0
  116. package/lib/shared_types/codes_actes.js +50 -15
  117. package/lib/shared_types/codes_actes.mjs +228 -0
  118. package/lib/strings.js +16 -3
  119. package/lib/strings.mjs +7 -0
  120. package/lib/types/acteurs_et_organes.js +156 -71
  121. package/lib/types/acteurs_et_organes.mjs +918 -0
  122. package/lib/types/agendas.js +154 -67
  123. package/lib/types/agendas.mjs +623 -0
  124. package/lib/types/amendements.js +166 -77
  125. package/lib/types/amendements.mjs +885 -0
  126. package/lib/types/dossiers_legislatifs.d.ts +1 -42
  127. package/lib/types/dossiers_legislatifs.js +182 -143
  128. package/lib/types/dossiers_legislatifs.mjs +1120 -0
  129. package/lib/types/legislatures.js +12 -3
  130. package/lib/types/legislatures.mjs +9 -0
  131. package/lib/types/scrutins.js +144 -61
  132. package/lib/types/scrutins.mjs +528 -0
  133. package/lib/urls.js +44 -25
  134. package/lib/urls.mjs +201 -0
  135. package/package.json +33 -12
@@ -1,30 +1,47 @@
1
- import commandLineArgs from "command-line-args";
2
- import { EnabledDatasets } from "../datasets.js";
3
- import { loadAssembleeData } from "../loaders.js";
4
- import { EtatCycleDeVie } from "../types/agendas.js";
5
- import { Legislature } from "../types/legislatures.js";
6
- const optionsDefinitions = [{
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.date.to-string.js");
4
+
5
+ require("core-js/modules/es.object.values.js");
6
+
7
+ require("core-js/modules/es.array.includes.js");
8
+
9
+ require("core-js/modules/es.string.includes.js");
10
+
11
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
12
+
13
+ var _datasets = require("../datasets");
14
+
15
+ var _loaders = require("../loaders");
16
+
17
+ var _agendas = require("../types/agendas");
18
+
19
+ var _legislatures = require("../types/legislatures");
20
+
21
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
22
+
23
+ var optionsDefinitions = [{
7
24
  defaultOption: true,
8
25
  help: "directory containing Assemblée open data files",
9
26
  name: "dataDir",
10
27
  type: String
11
28
  }];
12
- const options = commandLineArgs(optionsDefinitions);
13
- const now = new Date();
14
- const {
15
- reunionByUid
16
- } = loadAssembleeData(options.dataDir, EnabledDatasets.Agendas, Legislature.Seize);
17
-
18
- for (const reunion of Object.values(reunionByUid)) {
19
- if (![EtatCycleDeVie.Confirmé, EtatCycleDeVie.Eventuel].includes(reunion.cycleDeVie.etat)) {
29
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
30
+ var now = new Date();
31
+
32
+ var _loadAssembleeData = (0, _loaders.loadAssembleeData)(options.dataDir, _datasets.EnabledDatasets.Agendas, _legislatures.Legislature.Seize),
33
+ reunionByUid = _loadAssembleeData.reunionByUid;
34
+
35
+ for (var _i = 0, _Object$values = Object.values(reunionByUid); _i < _Object$values.length; _i++) {
36
+ var reunion = _Object$values[_i];
37
+
38
+ if (![_agendas.EtatCycleDeVie.Confirmé, _agendas.EtatCycleDeVie.Eventuel].includes(reunion.cycleDeVie.etat)) {
20
39
  continue;
21
40
  }
22
41
 
23
- const {
24
- timestampDebut,
25
- typeReunion,
26
- uid
27
- } = reunion;
42
+ var timestampDebut = reunion.timestampDebut,
43
+ typeReunion = reunion.typeReunion,
44
+ uid = reunion.uid;
28
45
 
29
46
  if (typeReunion !== "GP") {
30
47
  continue;
@@ -38,4 +55,4 @@ for (const reunion of Object.values(reunionByUid)) {
38
55
  }
39
56
 
40
57
  console.log(now);
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJFbmFibGVkRGF0YXNldHMiLCJsb2FkQXNzZW1ibGVlRGF0YSIsIkV0YXRDeWNsZURlVmllIiwiTGVnaXNsYXR1cmUiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJkZWZhdWx0T3B0aW9uIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwib3B0aW9ucyIsIm5vdyIsIkRhdGUiLCJyZXVuaW9uQnlVaWQiLCJkYXRhRGlyIiwiQWdlbmRhcyIsIlNlaXplIiwicmV1bmlvbiIsIk9iamVjdCIsInZhbHVlcyIsIkNvbmZpcm3DqSIsIkV2ZW50dWVsIiwiaW5jbHVkZXMiLCJjeWNsZURlVmllIiwiZXRhdCIsInRpbWVzdGFtcERlYnV0IiwidHlwZVJldW5pb24iLCJ1aWQiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZ2V0X3RvZGF5X3JldW5pb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcblxuaW1wb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGxvYWRBc3NlbWJsZWVEYXRhIH0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgRXRhdEN5Y2xlRGVWaWUgfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBMZWdpc2xhdHVyZSB9IGZyb20gXCIuLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuY29uc3QgeyByZXVuaW9uQnlVaWQgfSA9IGxvYWRBc3NlbWJsZWVEYXRhKFxuICBvcHRpb25zLmRhdGFEaXIsXG4gIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzLFxuICBMZWdpc2xhdHVyZS5TZWl6ZSxcbilcbmZvciAoY29uc3QgcmV1bmlvbiBvZiBPYmplY3QudmFsdWVzKHJldW5pb25CeVVpZCkpIHtcbiAgaWYgKFxuICAgICFbRXRhdEN5Y2xlRGVWaWUuQ29uZmlybcOpLCBFdGF0Q3ljbGVEZVZpZS5FdmVudHVlbF0uaW5jbHVkZXMoXG4gICAgICByZXVuaW9uLmN5Y2xlRGVWaWUuZXRhdCxcbiAgICApXG4gICkge1xuICAgIGNvbnRpbnVlXG4gIH1cbiAgY29uc3QgeyB0aW1lc3RhbXBEZWJ1dCwgdHlwZVJldW5pb24sIHVpZCB9ID0gcmV1bmlvblxuICBpZiAodHlwZVJldW5pb24gIT09IFwiR1BcIikge1xuICAgIGNvbnRpbnVlXG4gIH1cbiAgaWYgKFxuICAgIHRpbWVzdGFtcERlYnV0LmdldEZ1bGxZZWFyKCkgIT09IG5vdy5nZXRGdWxsWWVhcigpIHx8XG4gICAgdGltZXN0YW1wRGVidXQuZ2V0TW9udGgoKSAhPT0gbm93LmdldE1vbnRoKCkgfHxcbiAgICB0aW1lc3RhbXBEZWJ1dC5nZXREYXRlKCkgIT09IG5vdy5nZXREYXRlKClcbiAgKSB7XG4gICAgY29udGludWVcbiAgfVxuICBjb25zb2xlLmxvZyh1aWQsIHRpbWVzdGFtcERlYnV0LCBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKSlcbn1cbmNvbnNvbGUubG9nKG5vdylcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsZUFBUCxNQUE0QixtQkFBNUI7U0FFU0MsZTtTQUNBQyxpQjtTQUNBQyxjO1NBQ0FDLFc7QUFFVCxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxhQUFhLEVBQUUsSUFEakI7RUFFRUMsSUFBSSxFQUFFLGdEQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUksRUFBRUM7QUFKUixDQUR5QixDQUEzQjtBQVFBLE1BQU1DLE9BQU8sR0FBR1gsZUFBZSxDQUFDSyxrQkFBRCxDQUEvQjtBQUVBLE1BQU1PLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7QUFDQSxNQUFNO0VBQUVDO0FBQUYsSUFBbUJaLGlCQUFpQixDQUN4Q1MsT0FBTyxDQUFDSSxPQURnQyxFQUV4Q2QsZUFBZSxDQUFDZSxPQUZ3QixFQUd4Q1osV0FBVyxDQUFDYSxLQUg0QixDQUExQzs7QUFLQSxLQUFLLE1BQU1DLE9BQVgsSUFBc0JDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjTixZQUFkLENBQXRCLEVBQW1EO0VBQ2pELElBQ0UsQ0FBQyxDQUFDWCxjQUFjLENBQUNrQixRQUFoQixFQUEwQmxCLGNBQWMsQ0FBQ21CLFFBQXpDLEVBQW1EQyxRQUFuRCxDQUNDTCxPQUFPLENBQUNNLFVBQVIsQ0FBbUJDLElBRHBCLENBREgsRUFJRTtJQUNBO0VBQ0Q7O0VBQ0QsTUFBTTtJQUFFQyxjQUFGO0lBQWtCQyxXQUFsQjtJQUErQkM7RUFBL0IsSUFBdUNWLE9BQTdDOztFQUNBLElBQUlTLFdBQVcsS0FBSyxJQUFwQixFQUEwQjtJQUN4QjtFQUNEOztFQUNELElBQ0VELGNBQWMsQ0FBQ0csV0FBZixPQUFpQ2pCLEdBQUcsQ0FBQ2lCLFdBQUosRUFBakMsSUFDQUgsY0FBYyxDQUFDSSxRQUFmLE9BQThCbEIsR0FBRyxDQUFDa0IsUUFBSixFQUQ5QixJQUVBSixjQUFjLENBQUNLLE9BQWYsT0FBNkJuQixHQUFHLENBQUNtQixPQUFKLEVBSC9CLEVBSUU7SUFDQTtFQUNEOztFQUNEQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUwsR0FBWixFQUFpQkYsY0FBakIsRUFBaUNRLElBQUksQ0FBQ0MsU0FBTCxDQUFlakIsT0FBZixFQUF3QixJQUF4QixFQUE4QixDQUE5QixDQUFqQztBQUNEOztBQUNEYyxPQUFPLENBQUNDLEdBQVIsQ0FBWXJCLEdBQVoifQ==
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJkZWZhdWx0T3B0aW9uIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsIm5vdyIsIkRhdGUiLCJsb2FkQXNzZW1ibGVlRGF0YSIsImRhdGFEaXIiLCJFbmFibGVkRGF0YXNldHMiLCJBZ2VuZGFzIiwiTGVnaXNsYXR1cmUiLCJTZWl6ZSIsInJldW5pb25CeVVpZCIsIk9iamVjdCIsInZhbHVlcyIsInJldW5pb24iLCJFdGF0Q3ljbGVEZVZpZSIsIkNvbmZpcm3DqSIsIkV2ZW50dWVsIiwiaW5jbHVkZXMiLCJjeWNsZURlVmllIiwiZXRhdCIsInRpbWVzdGFtcERlYnV0IiwidHlwZVJldW5pb24iLCJ1aWQiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZ2V0X3RvZGF5X3JldW5pb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcblxuaW1wb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGxvYWRBc3NlbWJsZWVEYXRhIH0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgRXRhdEN5Y2xlRGVWaWUgfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBMZWdpc2xhdHVyZSB9IGZyb20gXCIuLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuY29uc3QgeyByZXVuaW9uQnlVaWQgfSA9IGxvYWRBc3NlbWJsZWVEYXRhKFxuICBvcHRpb25zLmRhdGFEaXIsXG4gIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzLFxuICBMZWdpc2xhdHVyZS5TZWl6ZSxcbilcbmZvciAoY29uc3QgcmV1bmlvbiBvZiBPYmplY3QudmFsdWVzKHJldW5pb25CeVVpZCkpIHtcbiAgaWYgKFxuICAgICFbRXRhdEN5Y2xlRGVWaWUuQ29uZmlybcOpLCBFdGF0Q3ljbGVEZVZpZS5FdmVudHVlbF0uaW5jbHVkZXMoXG4gICAgICByZXVuaW9uLmN5Y2xlRGVWaWUuZXRhdCxcbiAgICApXG4gICkge1xuICAgIGNvbnRpbnVlXG4gIH1cbiAgY29uc3QgeyB0aW1lc3RhbXBEZWJ1dCwgdHlwZVJldW5pb24sIHVpZCB9ID0gcmV1bmlvblxuICBpZiAodHlwZVJldW5pb24gIT09IFwiR1BcIikge1xuICAgIGNvbnRpbnVlXG4gIH1cbiAgaWYgKFxuICAgIHRpbWVzdGFtcERlYnV0LmdldEZ1bGxZZWFyKCkgIT09IG5vdy5nZXRGdWxsWWVhcigpIHx8XG4gICAgdGltZXN0YW1wRGVidXQuZ2V0TW9udGgoKSAhPT0gbm93LmdldE1vbnRoKCkgfHxcbiAgICB0aW1lc3RhbXBEZWJ1dC5nZXREYXRlKCkgIT09IG5vdy5nZXREYXRlKClcbiAgKSB7XG4gICAgY29udGludWVcbiAgfVxuICBjb25zb2xlLmxvZyh1aWQsIHRpbWVzdGFtcERlYnV0LCBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKSlcbn1cbmNvbnNvbGUubG9nKG5vdylcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRUEsSUFBTUEsa0JBQWtCLEdBQUcsQ0FDekI7RUFDRUMsYUFBYSxFQUFFLElBRGpCO0VBRUVDLElBQUksRUFBRSxnREFGUjtFQUdFQyxJQUFJLEVBQUUsU0FIUjtFQUlFQyxJQUFJLEVBQUVDO0FBSlIsQ0FEeUIsQ0FBM0I7QUFRQSxJQUFNQyxPQUFPLEdBQUcsSUFBQUMsMkJBQUEsRUFBZ0JQLGtCQUFoQixDQUFoQjtBQUVBLElBQU1RLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7O0FBQ0EseUJBQXlCLElBQUFDLDBCQUFBLEVBQ3ZCSixPQUFPLENBQUNLLE9BRGUsRUFFdkJDLHlCQUFBLENBQWdCQyxPQUZPLEVBR3ZCQyx5QkFBQSxDQUFZQyxLQUhXLENBQXpCO0FBQUEsSUFBUUMsWUFBUixzQkFBUUEsWUFBUjs7QUFLQSxrQ0FBc0JDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjRixZQUFkLENBQXRCLG9DQUFtRDtFQUE5QyxJQUFNRyxPQUFPLHFCQUFiOztFQUNILElBQ0UsQ0FBQyxDQUFDQyx1QkFBQSxDQUFlQyxRQUFoQixFQUEwQkQsdUJBQUEsQ0FBZUUsUUFBekMsRUFBbURDLFFBQW5ELENBQ0NKLE9BQU8sQ0FBQ0ssVUFBUixDQUFtQkMsSUFEcEIsQ0FESCxFQUlFO0lBQ0E7RUFDRDs7RUFDRCxJQUFRQyxjQUFSLEdBQTZDUCxPQUE3QyxDQUFRTyxjQUFSO0VBQUEsSUFBd0JDLFdBQXhCLEdBQTZDUixPQUE3QyxDQUF3QlEsV0FBeEI7RUFBQSxJQUFxQ0MsR0FBckMsR0FBNkNULE9BQTdDLENBQXFDUyxHQUFyQzs7RUFDQSxJQUFJRCxXQUFXLEtBQUssSUFBcEIsRUFBMEI7SUFDeEI7RUFDRDs7RUFDRCxJQUNFRCxjQUFjLENBQUNHLFdBQWYsT0FBaUNyQixHQUFHLENBQUNxQixXQUFKLEVBQWpDLElBQ0FILGNBQWMsQ0FBQ0ksUUFBZixPQUE4QnRCLEdBQUcsQ0FBQ3NCLFFBQUosRUFEOUIsSUFFQUosY0FBYyxDQUFDSyxPQUFmLE9BQTZCdkIsR0FBRyxDQUFDdUIsT0FBSixFQUgvQixFQUlFO0lBQ0E7RUFDRDs7RUFDREMsT0FBTyxDQUFDQyxHQUFSLENBQVlMLEdBQVosRUFBaUJGLGNBQWpCLEVBQWlDUSxJQUFJLENBQUNDLFNBQUwsQ0FBZWhCLE9BQWYsRUFBd0IsSUFBeEIsRUFBOEIsQ0FBOUIsQ0FBakM7QUFDRDs7QUFDRGEsT0FBTyxDQUFDQyxHQUFSLENBQVl6QixHQUFaIn0=
@@ -0,0 +1,41 @@
1
+ import commandLineArgs from "command-line-args";
2
+ import { EnabledDatasets } from "../datasets.mjs";
3
+ import { loadAssembleeData } from "../loaders.mjs";
4
+ import { EtatCycleDeVie } from "../types/agendas.mjs";
5
+ import { Legislature } from "../types/legislatures.mjs";
6
+ const optionsDefinitions = [{
7
+ defaultOption: true,
8
+ help: "directory containing Assemblée open data files",
9
+ name: "dataDir",
10
+ type: String
11
+ }];
12
+ const options = commandLineArgs(optionsDefinitions);
13
+ const now = new Date();
14
+ const {
15
+ reunionByUid
16
+ } = loadAssembleeData(options.dataDir, EnabledDatasets.Agendas, Legislature.Seize);
17
+
18
+ for (const reunion of Object.values(reunionByUid)) {
19
+ if (![EtatCycleDeVie.Confirmé, EtatCycleDeVie.Eventuel].includes(reunion.cycleDeVie.etat)) {
20
+ continue;
21
+ }
22
+
23
+ const {
24
+ timestampDebut,
25
+ typeReunion,
26
+ uid
27
+ } = reunion;
28
+
29
+ if (typeReunion !== "GP") {
30
+ continue;
31
+ }
32
+
33
+ if (timestampDebut.getFullYear() !== now.getFullYear() || timestampDebut.getMonth() !== now.getMonth() || timestampDebut.getDate() !== now.getDate()) {
34
+ continue;
35
+ }
36
+
37
+ console.log(uid, timestampDebut, JSON.stringify(reunion, null, 2));
38
+ }
39
+
40
+ console.log(now);
41
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJFbmFibGVkRGF0YXNldHMiLCJsb2FkQXNzZW1ibGVlRGF0YSIsIkV0YXRDeWNsZURlVmllIiwiTGVnaXNsYXR1cmUiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJkZWZhdWx0T3B0aW9uIiwiaGVscCIsIm5hbWUiLCJ0eXBlIiwiU3RyaW5nIiwib3B0aW9ucyIsIm5vdyIsIkRhdGUiLCJyZXVuaW9uQnlVaWQiLCJkYXRhRGlyIiwiQWdlbmRhcyIsIlNlaXplIiwicmV1bmlvbiIsIk9iamVjdCIsInZhbHVlcyIsIkNvbmZpcm3DqSIsIkV2ZW50dWVsIiwiaW5jbHVkZXMiLCJjeWNsZURlVmllIiwiZXRhdCIsInRpbWVzdGFtcERlYnV0IiwidHlwZVJldW5pb24iLCJ1aWQiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImNvbnNvbGUiLCJsb2ciLCJKU09OIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvZ2V0X3RvZGF5X3JldW5pb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcblxuaW1wb3J0IHsgRW5hYmxlZERhdGFzZXRzIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IGxvYWRBc3NlbWJsZWVEYXRhIH0gZnJvbSBcIi4uL2xvYWRlcnNcIlxuaW1wb3J0IHsgRXRhdEN5Y2xlRGVWaWUgfSBmcm9tIFwiLi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBMZWdpc2xhdHVyZSB9IGZyb20gXCIuLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuXG5jb25zdCBvcHRpb25zRGVmaW5pdGlvbnMgPSBbXG4gIHtcbiAgICBkZWZhdWx0T3B0aW9uOiB0cnVlLFxuICAgIGhlbHA6IFwiZGlyZWN0b3J5IGNvbnRhaW5pbmcgQXNzZW1ibMOpZSBvcGVuIGRhdGEgZmlsZXNcIixcbiAgICBuYW1lOiBcImRhdGFEaXJcIixcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuY29uc3Qgbm93ID0gbmV3IERhdGUoKVxuY29uc3QgeyByZXVuaW9uQnlVaWQgfSA9IGxvYWRBc3NlbWJsZWVEYXRhKFxuICBvcHRpb25zLmRhdGFEaXIsXG4gIEVuYWJsZWREYXRhc2V0cy5BZ2VuZGFzLFxuICBMZWdpc2xhdHVyZS5TZWl6ZSxcbilcbmZvciAoY29uc3QgcmV1bmlvbiBvZiBPYmplY3QudmFsdWVzKHJldW5pb25CeVVpZCkpIHtcbiAgaWYgKFxuICAgICFbRXRhdEN5Y2xlRGVWaWUuQ29uZmlybcOpLCBFdGF0Q3ljbGVEZVZpZS5FdmVudHVlbF0uaW5jbHVkZXMoXG4gICAgICByZXVuaW9uLmN5Y2xlRGVWaWUuZXRhdCxcbiAgICApXG4gICkge1xuICAgIGNvbnRpbnVlXG4gIH1cbiAgY29uc3QgeyB0aW1lc3RhbXBEZWJ1dCwgdHlwZVJldW5pb24sIHVpZCB9ID0gcmV1bmlvblxuICBpZiAodHlwZVJldW5pb24gIT09IFwiR1BcIikge1xuICAgIGNvbnRpbnVlXG4gIH1cbiAgaWYgKFxuICAgIHRpbWVzdGFtcERlYnV0LmdldEZ1bGxZZWFyKCkgIT09IG5vdy5nZXRGdWxsWWVhcigpIHx8XG4gICAgdGltZXN0YW1wRGVidXQuZ2V0TW9udGgoKSAhPT0gbm93LmdldE1vbnRoKCkgfHxcbiAgICB0aW1lc3RhbXBEZWJ1dC5nZXREYXRlKCkgIT09IG5vdy5nZXREYXRlKClcbiAgKSB7XG4gICAgY29udGludWVcbiAgfVxuICBjb25zb2xlLmxvZyh1aWQsIHRpbWVzdGFtcERlYnV0LCBKU09OLnN0cmluZ2lmeShyZXVuaW9uLCBudWxsLCAyKSlcbn1cbmNvbnNvbGUubG9nKG5vdylcbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsZUFBUCxNQUE0QixtQkFBNUI7U0FFU0MsZTtTQUNBQyxpQjtTQUNBQyxjO1NBQ0FDLFc7QUFFVCxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxhQUFhLEVBQUUsSUFEakI7RUFFRUMsSUFBSSxFQUFFLGdEQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUksRUFBRUM7QUFKUixDQUR5QixDQUEzQjtBQVFBLE1BQU1DLE9BQU8sR0FBR1gsZUFBZSxDQUFDSyxrQkFBRCxDQUEvQjtBQUVBLE1BQU1PLEdBQUcsR0FBRyxJQUFJQyxJQUFKLEVBQVo7QUFDQSxNQUFNO0VBQUVDO0FBQUYsSUFBbUJaLGlCQUFpQixDQUN4Q1MsT0FBTyxDQUFDSSxPQURnQyxFQUV4Q2QsZUFBZSxDQUFDZSxPQUZ3QixFQUd4Q1osV0FBVyxDQUFDYSxLQUg0QixDQUExQzs7QUFLQSxLQUFLLE1BQU1DLE9BQVgsSUFBc0JDLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjTixZQUFkLENBQXRCLEVBQW1EO0VBQ2pELElBQ0UsQ0FBQyxDQUFDWCxjQUFjLENBQUNrQixRQUFoQixFQUEwQmxCLGNBQWMsQ0FBQ21CLFFBQXpDLEVBQW1EQyxRQUFuRCxDQUNDTCxPQUFPLENBQUNNLFVBQVIsQ0FBbUJDLElBRHBCLENBREgsRUFJRTtJQUNBO0VBQ0Q7O0VBQ0QsTUFBTTtJQUFFQyxjQUFGO0lBQWtCQyxXQUFsQjtJQUErQkM7RUFBL0IsSUFBdUNWLE9BQTdDOztFQUNBLElBQUlTLFdBQVcsS0FBSyxJQUFwQixFQUEwQjtJQUN4QjtFQUNEOztFQUNELElBQ0VELGNBQWMsQ0FBQ0csV0FBZixPQUFpQ2pCLEdBQUcsQ0FBQ2lCLFdBQUosRUFBakMsSUFDQUgsY0FBYyxDQUFDSSxRQUFmLE9BQThCbEIsR0FBRyxDQUFDa0IsUUFBSixFQUQ5QixJQUVBSixjQUFjLENBQUNLLE9BQWYsT0FBNkJuQixHQUFHLENBQUNtQixPQUFKLEVBSC9CLEVBSUU7SUFDQTtFQUNEOztFQUNEQyxPQUFPLENBQUNDLEdBQVIsQ0FBWUwsR0FBWixFQUFpQkYsY0FBakIsRUFBaUNRLElBQUksQ0FBQ0MsU0FBTCxDQUFlakIsT0FBZixFQUF3QixJQUF4QixFQUE4QixDQUE5QixDQUFqQztBQUNEOztBQUNEYyxPQUFPLENBQUNDLEdBQVIsQ0FBWXJCLEdBQVoifQ==
@@ -1,9 +1,64 @@
1
- import commandLineArgs from "command-line-args";
2
- import fs from "fs-extra";
3
- import path from "path";
4
- import { datasets, DatasetStructure } from "../datasets.js";
5
- import { walkDir } from "../file_systems.js";
6
- const optionsDefinitions = [{
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.array.slice.js");
4
+
5
+ require("core-js/modules/es.object.to-string.js");
6
+
7
+ require("core-js/modules/es.function.name.js");
8
+
9
+ require("core-js/modules/es.array.from.js");
10
+
11
+ require("core-js/modules/es.string.iterator.js");
12
+
13
+ require("core-js/modules/es.regexp.exec.js");
14
+
15
+ require("core-js/modules/es.symbol.js");
16
+
17
+ require("core-js/modules/es.symbol.description.js");
18
+
19
+ require("core-js/modules/es.symbol.iterator.js");
20
+
21
+ require("core-js/modules/es.array.iterator.js");
22
+
23
+ require("core-js/modules/web.dom-collections.iterator.js");
24
+
25
+ require("core-js/modules/es.array.is-array.js");
26
+
27
+ require("core-js/modules/es.array.join.js");
28
+
29
+ require("core-js/modules/es.array.sort.js");
30
+
31
+ require("core-js/modules/es.string.ends-with.js");
32
+
33
+ require("core-js/modules/es.array.concat.js");
34
+
35
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
36
+
37
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
38
+
39
+ var _path = _interopRequireDefault(require("path"));
40
+
41
+ var _datasets = require("../datasets");
42
+
43
+ var _file_systems = require("../file_systems");
44
+
45
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
46
+
47
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
48
+
49
+ 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."); }
50
+
51
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
52
+
53
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
54
+
55
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
56
+
57
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
58
+
59
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
60
+
61
+ var optionsDefinitions = [{
7
62
  alias: "s",
8
63
  help: "don't log anything",
9
64
  name: "silent",
@@ -19,51 +74,78 @@ const optionsDefinitions = [{
19
74
  name: "dataDir",
20
75
  type: String
21
76
  }];
22
- const options = commandLineArgs(optionsDefinitions);
77
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
23
78
 
24
79
  function mergeScrutins(dataDir) {
25
- for (const dataset of datasets.scrutins) {
26
- switch (dataset.structure) {
27
- case DatasetStructure.SegmentedFiles:
28
- {
29
- const originalJsonDir = path.join(dataDir, dataset.filename);
30
-
31
- if (!options.silent) {
32
- console.log(`Merging ${originalJsonDir}`);
33
- }
80
+ var _iterator = _createForOfIteratorHelper(_datasets.datasets.scrutins),
81
+ _step;
82
+
83
+ try {
84
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
85
+ var dataset = _step.value;
86
+
87
+ switch (dataset.structure) {
88
+ case _datasets.DatasetStructure.SegmentedFiles:
89
+ {
90
+ var originalJsonDir = _path["default"].join(dataDir, dataset.filename);
34
91
 
35
- const datasetMergedFilePath = path.join(dataDir, path.basename(originalJsonDir, ".json") + "_fusionne.json");
36
- const scrutins = [];
92
+ if (!options.silent) {
93
+ console.log("Merging ".concat(originalJsonDir));
94
+ }
95
+
96
+ var datasetMergedFilePath = _path["default"].join(dataDir, _path["default"].basename(originalJsonDir, ".json") + "_fusionne.json");
97
+
98
+ var scrutins = [];
99
+
100
+ var _iterator2 = _createForOfIteratorHelper((0, _file_systems.walkDir)(originalJsonDir)),
101
+ _step2;
102
+
103
+ try {
104
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
105
+ var scrutinSplitPath = _step2.value;
106
+ var scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
107
+
108
+ if (!scrutinFilename.endsWith(".json")) {
109
+ continue;
110
+ }
37
111
 
38
- for (const scrutinSplitPath of walkDir(originalJsonDir)) {
39
- const scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
112
+ var scrutinOriginalFilePath = _path["default"].join.apply(_path["default"], [originalJsonDir].concat(_toConsumableArray(scrutinSplitPath)));
40
113
 
41
- if (!scrutinFilename.endsWith(".json")) {
42
- continue;
114
+ var scrutinOriginalJson = _fsExtra["default"].readFileSync(scrutinOriginalFilePath, {
115
+ encoding: "utf8"
116
+ });
117
+
118
+ var scrutinOriginal = JSON.parse(scrutinOriginalJson);
119
+ var scrutin = scrutinOriginal.scrutin;
120
+ scrutins.push(scrutin);
121
+ }
122
+ } catch (err) {
123
+ _iterator2.e(err);
124
+ } finally {
125
+ _iterator2.f();
43
126
  }
44
127
 
45
- const scrutinOriginalFilePath = path.join(originalJsonDir, ...scrutinSplitPath);
46
- const scrutinOriginalJson = fs.readFileSync(scrutinOriginalFilePath, {
128
+ scrutins.sort(function (a, b) {
129
+ return a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length;
130
+ });
131
+
132
+ _fsExtra["default"].writeFileSync(datasetMergedFilePath, JSON.stringify({
133
+ scrutins: {
134
+ scrutin: scrutins
135
+ }
136
+ }, null, 2), {
47
137
  encoding: "utf8"
48
138
  });
49
- const scrutinOriginal = JSON.parse(scrutinOriginalJson);
50
- const scrutin = scrutinOriginal.scrutin;
51
- scrutins.push(scrutin);
52
139
  }
53
-
54
- scrutins.sort((a, b) => a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length);
55
- fs.writeFileSync(datasetMergedFilePath, JSON.stringify({
56
- scrutins: {
57
- scrutin: scrutins
58
- }
59
- }, null, 2), {
60
- encoding: "utf8"
61
- });
62
- }
63
- break;
140
+ break;
141
+ }
64
142
  }
143
+ } catch (err) {
144
+ _iterator.e(err);
145
+ } finally {
146
+ _iterator.f();
65
147
  }
66
148
  }
67
149
 
68
150
  mergeScrutins(options.dataDir);
69
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJkYXRhc2V0cyIsIkRhdGFzZXRTdHJ1Y3R1cmUiLCJ3YWxrRGlyIiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJCb29sZWFuIiwiZGVmYXVsdE9wdGlvbiIsIlN0cmluZyIsIm9wdGlvbnMiLCJtZXJnZVNjcnV0aW5zIiwiZGF0YURpciIsImRhdGFzZXQiLCJzY3J1dGlucyIsInN0cnVjdHVyZSIsIlNlZ21lbnRlZEZpbGVzIiwib3JpZ2luYWxKc29uRGlyIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsImRhdGFzZXRNZXJnZWRGaWxlUGF0aCIsImJhc2VuYW1lIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJzY3J1dGluT3JpZ2luYWwiLCJKU09OIiwicGFyc2UiLCJzY3J1dGluIiwicHVzaCIsInNvcnQiLCJhIiwiYiIsInVpZCIsImxvY2FsZUNvbXBhcmUiLCJ3cml0ZUZpbGVTeW5jIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvbWVyZ2Vfc2NydXRpbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG5mdW5jdGlvbiBtZXJnZVNjcnV0aW5zKGRhdGFEaXI6IHN0cmluZykge1xuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBNZXJnaW5nICR7b3JpZ2luYWxKc29uRGlyfWApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGF0YXNldE1lcmdlZEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgZGF0YURpcixcbiAgICAgICAgICAgIHBhdGguYmFzZW5hbWUob3JpZ2luYWxKc29uRGlyLCBcIi5qc29uXCIpICsgXCJfZnVzaW9ubmUuanNvblwiLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGNvbnN0IHNjcnV0aW5zID0gW11cbiAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihvcmlnaW5hbEpzb25EaXIpKSB7XG4gICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXIsXG4gICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICB9XG4gICAgICAgICAgc2NydXRpbnMuc29ydCgoYTogeyB1aWQ6IHN0cmluZyB9LCBiOiB7IHVpZDogc3RyaW5nIH0pID0+XG4gICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICBkYXRhc2V0TWVyZ2VkRmlsZVBhdGgsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHNjcnV0aW5zOiB7IHNjcnV0aW46IHNjcnV0aW5zIH0gfSwgbnVsbCwgMiksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG59XG5cbm1lcmdlU2NydXRpbnMob3B0aW9ucy5kYXRhRGlyKVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxlQUFQLE1BQTRCLG1CQUE1QjtBQUNBLE9BQU9DLEVBQVAsTUFBZSxVQUFmO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixNQUFqQjtTQUVTQyxRLEVBQVVDLGdCO1NBQ1ZDLE87QUFFVCxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsb0JBRlI7RUFHRUMsSUFBSSxFQUFFLFFBSFI7RUFJRUMsSUFBSSxFQUFFQztBQUpSLENBRHlCLEVBT3pCO0VBQ0VKLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSxjQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUksRUFBRUM7QUFKUixDQVB5QixFQWF6QjtFQUNFQyxhQUFhLEVBQUUsSUFEakI7RUFFRUosSUFBSSxFQUFFLGdEQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUksRUFBRUc7QUFKUixDQWJ5QixDQUEzQjtBQW9CQSxNQUFNQyxPQUFPLEdBQUdkLGVBQWUsQ0FBQ00sa0JBQUQsQ0FBL0I7O0FBRUEsU0FBU1MsYUFBVCxDQUF1QkMsT0FBdkIsRUFBd0M7RUFDdEMsS0FBSyxNQUFNQyxPQUFYLElBQXNCZCxRQUFRLENBQUNlLFFBQS9CLEVBQXlDO0lBQ3ZDLFFBQVFELE9BQU8sQ0FBQ0UsU0FBaEI7TUFDRSxLQUFLZixnQkFBZ0IsQ0FBQ2dCLGNBQXRCO1FBQ0U7VUFDRSxNQUFNQyxlQUF1QixHQUFHbkIsSUFBSSxDQUFDb0IsSUFBTCxDQUFVTixPQUFWLEVBQW1CQyxPQUFPLENBQUNNLFFBQTNCLENBQWhDOztVQUNBLElBQUksQ0FBQ1QsT0FBTyxDQUFDVSxNQUFiLEVBQXFCO1lBQ25CQyxPQUFPLENBQUNDLEdBQVIsQ0FBYSxXQUFVTCxlQUFnQixFQUF2QztVQUNEOztVQUVELE1BQU1NLHFCQUFxQixHQUFHekIsSUFBSSxDQUFDb0IsSUFBTCxDQUM1Qk4sT0FENEIsRUFFNUJkLElBQUksQ0FBQzBCLFFBQUwsQ0FBY1AsZUFBZCxFQUErQixPQUEvQixJQUEwQyxnQkFGZCxDQUE5QjtVQUtBLE1BQU1ILFFBQVEsR0FBRyxFQUFqQjs7VUFDQSxLQUFLLE1BQU1XLGdCQUFYLElBQStCeEIsT0FBTyxDQUFDZ0IsZUFBRCxDQUF0QyxFQUF5RDtZQUN2RCxNQUFNUyxlQUFlLEdBQ25CRCxnQkFBZ0IsQ0FBQ0EsZ0JBQWdCLENBQUNFLE1BQWpCLEdBQTBCLENBQTNCLENBRGxCOztZQUVBLElBQUksQ0FBQ0QsZUFBZSxDQUFDRSxRQUFoQixDQUF5QixPQUF6QixDQUFMLEVBQXdDO2NBQ3RDO1lBQ0Q7O1lBQ0QsTUFBTUMsdUJBQXVCLEdBQUcvQixJQUFJLENBQUNvQixJQUFMLENBQzlCRCxlQUQ4QixFQUU5QixHQUFHUSxnQkFGMkIsQ0FBaEM7WUFJQSxNQUFNSyxtQkFBMkIsR0FBR2pDLEVBQUUsQ0FBQ2tDLFlBQUgsQ0FDbENGLHVCQURrQyxFQUVsQztjQUNFRyxRQUFRLEVBQUU7WUFEWixDQUZrQyxDQUFwQztZQU1BLE1BQU1DLGVBQW9CLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFXTCxtQkFBWCxDQUE3QjtZQUNBLE1BQU1NLE9BQU8sR0FBR0gsZUFBZSxDQUFDRyxPQUFoQztZQUNBdEIsUUFBUSxDQUFDdUIsSUFBVCxDQUFjRCxPQUFkO1VBQ0Q7O1VBQ0R0QixRQUFRLENBQUN3QixJQUFULENBQWMsQ0FBQ0MsQ0FBRCxFQUFxQkMsQ0FBckIsS0FDWkQsQ0FBQyxDQUFDRSxHQUFGLENBQU1kLE1BQU4sS0FBaUJhLENBQUMsQ0FBQ0MsR0FBRixDQUFNZCxNQUF2QixHQUNJWSxDQUFDLENBQUNFLEdBQUYsQ0FBTUMsYUFBTixDQUFvQkYsQ0FBQyxDQUFDQyxHQUF0QixDQURKLEdBRUlGLENBQUMsQ0FBQ0UsR0FBRixDQUFNZCxNQUFOLEdBQWVhLENBQUMsQ0FBQ0MsR0FBRixDQUFNZCxNQUgzQjtVQU1BOUIsRUFBRSxDQUFDOEMsYUFBSCxDQUNFcEIscUJBREYsRUFFRVcsSUFBSSxDQUFDVSxTQUFMLENBQWU7WUFBRTlCLFFBQVEsRUFBRTtjQUFFc0IsT0FBTyxFQUFFdEI7WUFBWDtVQUFaLENBQWYsRUFBb0QsSUFBcEQsRUFBMEQsQ0FBMUQsQ0FGRixFQUdFO1lBQ0VrQixRQUFRLEVBQUU7VUFEWixDQUhGO1FBT0Q7UUFDRDtJQWhESjtFQWtERDtBQUNGOztBQUVEckIsYUFBYSxDQUFDRCxPQUFPLENBQUNFLE9BQVQsQ0FBYiJ9
151
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImhlbHAiLCJuYW1lIiwidHlwZSIsIkJvb2xlYW4iLCJkZWZhdWx0T3B0aW9uIiwiU3RyaW5nIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsIm1lcmdlU2NydXRpbnMiLCJkYXRhRGlyIiwiZGF0YXNldHMiLCJzY3J1dGlucyIsImRhdGFzZXQiLCJzdHJ1Y3R1cmUiLCJEYXRhc2V0U3RydWN0dXJlIiwiU2VnbWVudGVkRmlsZXMiLCJvcmlnaW5hbEpzb25EaXIiLCJwYXRoIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsImRhdGFzZXRNZXJnZWRGaWxlUGF0aCIsImJhc2VuYW1lIiwid2Fsa0RpciIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJsZW5ndGgiLCJlbmRzV2l0aCIsInNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoIiwic2NydXRpbk9yaWdpbmFsSnNvbiIsImZzIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJzY3J1dGluT3JpZ2luYWwiLCJKU09OIiwicGFyc2UiLCJzY3J1dGluIiwicHVzaCIsInNvcnQiLCJhIiwiYiIsInVpZCIsImxvY2FsZUNvbXBhcmUiLCJ3cml0ZUZpbGVTeW5jIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvbWVyZ2Vfc2NydXRpbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG5mdW5jdGlvbiBtZXJnZVNjcnV0aW5zKGRhdGFEaXI6IHN0cmluZykge1xuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBNZXJnaW5nICR7b3JpZ2luYWxKc29uRGlyfWApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGF0YXNldE1lcmdlZEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgZGF0YURpcixcbiAgICAgICAgICAgIHBhdGguYmFzZW5hbWUob3JpZ2luYWxKc29uRGlyLCBcIi5qc29uXCIpICsgXCJfZnVzaW9ubmUuanNvblwiLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGNvbnN0IHNjcnV0aW5zID0gW11cbiAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihvcmlnaW5hbEpzb25EaXIpKSB7XG4gICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXIsXG4gICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICB9XG4gICAgICAgICAgc2NydXRpbnMuc29ydCgoYTogeyB1aWQ6IHN0cmluZyB9LCBiOiB7IHVpZDogc3RyaW5nIH0pID0+XG4gICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICBkYXRhc2V0TWVyZ2VkRmlsZVBhdGgsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHNjcnV0aW5zOiB7IHNjcnV0aW46IHNjcnV0aW5zIH0gfSwgbnVsbCwgMiksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG59XG5cbm1lcmdlU2NydXRpbnMob3B0aW9ucy5kYXRhRGlyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLGtCQUFrQixHQUFHLENBQ3pCO0VBQ0VDLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSxvQkFGUjtFQUdFQyxJQUFJLEVBQUUsUUFIUjtFQUlFQyxJQUFJLEVBQUVDO0FBSlIsQ0FEeUIsRUFPekI7RUFDRUosS0FBSyxFQUFFLEdBRFQ7RUFFRUMsSUFBSSxFQUFFLGNBRlI7RUFHRUMsSUFBSSxFQUFFLFNBSFI7RUFJRUMsSUFBSSxFQUFFQztBQUpSLENBUHlCLEVBYXpCO0VBQ0VDLGFBQWEsRUFBRSxJQURqQjtFQUVFSixJQUFJLEVBQUUsZ0RBRlI7RUFHRUMsSUFBSSxFQUFFLFNBSFI7RUFJRUMsSUFBSSxFQUFFRztBQUpSLENBYnlCLENBQTNCO0FBb0JB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
@@ -0,0 +1,69 @@
1
+ import commandLineArgs from "command-line-args";
2
+ import fs from "fs-extra";
3
+ import path from "path";
4
+ import { datasets, DatasetStructure } from "../datasets.mjs";
5
+ import { walkDir } from "../file_systems.mjs";
6
+ const optionsDefinitions = [{
7
+ alias: "s",
8
+ help: "don't log anything",
9
+ name: "silent",
10
+ type: Boolean
11
+ }, {
12
+ alias: "v",
13
+ help: "verbose logs",
14
+ name: "verbose",
15
+ type: Boolean
16
+ }, {
17
+ defaultOption: true,
18
+ help: "directory containing Assemblée open data files",
19
+ name: "dataDir",
20
+ type: String
21
+ }];
22
+ const options = commandLineArgs(optionsDefinitions);
23
+
24
+ function mergeScrutins(dataDir) {
25
+ for (const dataset of datasets.scrutins) {
26
+ switch (dataset.structure) {
27
+ case DatasetStructure.SegmentedFiles:
28
+ {
29
+ const originalJsonDir = path.join(dataDir, dataset.filename);
30
+
31
+ if (!options.silent) {
32
+ console.log(`Merging ${originalJsonDir}`);
33
+ }
34
+
35
+ const datasetMergedFilePath = path.join(dataDir, path.basename(originalJsonDir, ".json") + "_fusionne.json");
36
+ const scrutins = [];
37
+
38
+ for (const scrutinSplitPath of walkDir(originalJsonDir)) {
39
+ const scrutinFilename = scrutinSplitPath[scrutinSplitPath.length - 1];
40
+
41
+ if (!scrutinFilename.endsWith(".json")) {
42
+ continue;
43
+ }
44
+
45
+ const scrutinOriginalFilePath = path.join(originalJsonDir, ...scrutinSplitPath);
46
+ const scrutinOriginalJson = fs.readFileSync(scrutinOriginalFilePath, {
47
+ encoding: "utf8"
48
+ });
49
+ const scrutinOriginal = JSON.parse(scrutinOriginalJson);
50
+ const scrutin = scrutinOriginal.scrutin;
51
+ scrutins.push(scrutin);
52
+ }
53
+
54
+ scrutins.sort((a, b) => a.uid.length === b.uid.length ? a.uid.localeCompare(b.uid) : a.uid.length - b.uid.length);
55
+ fs.writeFileSync(datasetMergedFilePath, JSON.stringify({
56
+ scrutins: {
57
+ scrutin: scrutins
58
+ }
59
+ }, null, 2), {
60
+ encoding: "utf8"
61
+ });
62
+ }
63
+ break;
64
+ }
65
+ }
66
+ }
67
+
68
+ mergeScrutins(options.dataDir);
69
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJjb21tYW5kTGluZUFyZ3MiLCJmcyIsInBhdGgiLCJkYXRhc2V0cyIsIkRhdGFzZXRTdHJ1Y3R1cmUiLCJ3YWxrRGlyIiwib3B0aW9uc0RlZmluaXRpb25zIiwiYWxpYXMiLCJoZWxwIiwibmFtZSIsInR5cGUiLCJCb29sZWFuIiwiZGVmYXVsdE9wdGlvbiIsIlN0cmluZyIsIm9wdGlvbnMiLCJtZXJnZVNjcnV0aW5zIiwiZGF0YURpciIsImRhdGFzZXQiLCJzY3J1dGlucyIsInN0cnVjdHVyZSIsIlNlZ21lbnRlZEZpbGVzIiwib3JpZ2luYWxKc29uRGlyIiwiam9pbiIsImZpbGVuYW1lIiwic2lsZW50IiwiY29uc29sZSIsImxvZyIsImRhdGFzZXRNZXJnZWRGaWxlUGF0aCIsImJhc2VuYW1lIiwic2NydXRpblNwbGl0UGF0aCIsInNjcnV0aW5GaWxlbmFtZSIsImxlbmd0aCIsImVuZHNXaXRoIiwic2NydXRpbk9yaWdpbmFsRmlsZVBhdGgiLCJzY3J1dGluT3JpZ2luYWxKc29uIiwicmVhZEZpbGVTeW5jIiwiZW5jb2RpbmciLCJzY3J1dGluT3JpZ2luYWwiLCJKU09OIiwicGFyc2UiLCJzY3J1dGluIiwicHVzaCIsInNvcnQiLCJhIiwiYiIsInVpZCIsImxvY2FsZUNvbXBhcmUiLCJ3cml0ZUZpbGVTeW5jIiwic3RyaW5naWZ5Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NjcmlwdHMvbWVyZ2Vfc2NydXRpbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tIFwiY29tbWFuZC1saW5lLWFyZ3NcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmltcG9ydCB7IGRhdGFzZXRzLCBEYXRhc2V0U3RydWN0dXJlIH0gZnJvbSBcIi4uL2RhdGFzZXRzXCJcbmltcG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi4vZmlsZV9zeXN0ZW1zXCJcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6IFwic1wiLFxuICAgIGhlbHA6IFwiZG9uJ3QgbG9nIGFueXRoaW5nXCIsXG4gICAgbmFtZTogXCJzaWxlbnRcIixcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBBc3NlbWJsw6llIG9wZW4gZGF0YSBmaWxlc1wiLFxuICAgIG5hbWU6IFwiZGF0YURpclwiLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbl1cbmNvbnN0IG9wdGlvbnMgPSBjb21tYW5kTGluZUFyZ3Mob3B0aW9uc0RlZmluaXRpb25zKVxuXG5mdW5jdGlvbiBtZXJnZVNjcnV0aW5zKGRhdGFEaXI6IHN0cmluZykge1xuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICBzd2l0Y2ggKGRhdGFzZXQuc3RydWN0dXJlKSB7XG4gICAgICBjYXNlIERhdGFzZXRTdHJ1Y3R1cmUuU2VnbWVudGVkRmlsZXM6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbEpzb25EaXI6IHN0cmluZyA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmZpbGVuYW1lKVxuICAgICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBNZXJnaW5nICR7b3JpZ2luYWxKc29uRGlyfWApXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZGF0YXNldE1lcmdlZEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgZGF0YURpcixcbiAgICAgICAgICAgIHBhdGguYmFzZW5hbWUob3JpZ2luYWxKc29uRGlyLCBcIi5qc29uXCIpICsgXCJfZnVzaW9ubmUuanNvblwiLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGNvbnN0IHNjcnV0aW5zID0gW11cbiAgICAgICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihvcmlnaW5hbEpzb25EaXIpKSB7XG4gICAgICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPVxuICAgICAgICAgICAgICBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgICAgIGlmICghc2NydXRpbkZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICAgICAgICBvcmlnaW5hbEpzb25EaXIsXG4gICAgICAgICAgICAgIC4uLnNjcnV0aW5TcGxpdFBhdGgsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBzY3J1dGluT3JpZ2luYWxKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICAgIHNjcnV0aW5PcmlnaW5hbEZpbGVQYXRoLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgc2NydXRpbk9yaWdpbmFsOiBhbnkgPSBKU09OLnBhcnNlKHNjcnV0aW5PcmlnaW5hbEpzb24pXG4gICAgICAgICAgICBjb25zdCBzY3J1dGluID0gc2NydXRpbk9yaWdpbmFsLnNjcnV0aW5cbiAgICAgICAgICAgIHNjcnV0aW5zLnB1c2goc2NydXRpbilcbiAgICAgICAgICB9XG4gICAgICAgICAgc2NydXRpbnMuc29ydCgoYTogeyB1aWQ6IHN0cmluZyB9LCBiOiB7IHVpZDogc3RyaW5nIH0pID0+XG4gICAgICAgICAgICBhLnVpZC5sZW5ndGggPT09IGIudWlkLmxlbmd0aFxuICAgICAgICAgICAgICA/IGEudWlkLmxvY2FsZUNvbXBhcmUoYi51aWQpXG4gICAgICAgICAgICAgIDogYS51aWQubGVuZ3RoIC0gYi51aWQubGVuZ3RoLFxuICAgICAgICAgIClcblxuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmMoXG4gICAgICAgICAgICBkYXRhc2V0TWVyZ2VkRmlsZVBhdGgsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh7IHNjcnV0aW5zOiB7IHNjcnV0aW46IHNjcnV0aW5zIH0gfSwgbnVsbCwgMiksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG59XG5cbm1lcmdlU2NydXRpbnMob3B0aW9ucy5kYXRhRGlyKVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxlQUFQLE1BQTRCLG1CQUE1QjtBQUNBLE9BQU9DLEVBQVAsTUFBZSxVQUFmO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixNQUFqQjtTQUVTQyxRLEVBQVVDLGdCO1NBQ1ZDLE87QUFFVCxNQUFNQyxrQkFBa0IsR0FBRyxDQUN6QjtFQUNFQyxLQUFLLEVBQUUsR0FEVDtFQUVFQyxJQUFJLEVBQUUsb0JBRlI7RUFHRUMsSUFBSSxFQUFFLFFBSFI7RUFJRUMsSUFBSSxFQUFFQztBQUpSLENBRHlCLEVBT3pCO0VBQ0VKLEtBQUssRUFBRSxHQURUO0VBRUVDLElBQUksRUFBRSxjQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUksRUFBRUM7QUFKUixDQVB5QixFQWF6QjtFQUNFQyxhQUFhLEVBQUUsSUFEakI7RUFFRUosSUFBSSxFQUFFLGdEQUZSO0VBR0VDLElBQUksRUFBRSxTQUhSO0VBSUVDLElBQUks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