@tricoteuses/senat 1.0.1 → 1.1.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 (68) hide show
  1. package/README.md +4 -1
  2. package/lib/aggregates.d.ts +54 -0
  3. package/lib/aggregates.js +1122 -0
  4. package/lib/aggregates.mjs +802 -0
  5. package/lib/aggregates.ts +947 -0
  6. package/lib/datasets.d.ts +1 -0
  7. package/lib/datasets.js +9 -1
  8. package/lib/datasets.mjs +10 -0
  9. package/lib/datasets.ts +11 -0
  10. package/lib/index.d.ts +1 -0
  11. package/lib/index.js +14 -1
  12. package/lib/index.mjs +1 -0
  13. package/lib/index.ts +4 -0
  14. package/lib/inserters.d.ts +5 -1
  15. package/lib/inserters.js +22 -3
  16. package/lib/inserters.mjs +19 -3
  17. package/lib/inserters.ts +27 -2
  18. package/lib/model/ameli.d.ts +4 -0
  19. package/lib/model/ameli.js +167 -0
  20. package/lib/model/ameli.mjs +57 -0
  21. package/lib/model/ameli.ts +86 -0
  22. package/lib/model/debats.d.ts +4 -0
  23. package/lib/model/debats.js +123 -0
  24. package/lib/model/debats.mjs +43 -0
  25. package/lib/model/debats.ts +68 -0
  26. package/lib/model/dosleg.d.ts +29 -0
  27. package/lib/model/dosleg.js +840 -0
  28. package/lib/model/dosleg.mjs +337 -0
  29. package/lib/model/dosleg.ts +558 -0
  30. package/lib/model/index.d.ts +5 -0
  31. package/lib/model/index.js +48 -0
  32. package/lib/model/index.mjs +5 -0
  33. package/lib/model/index.ts +11 -0
  34. package/lib/model/questions.d.ts +2 -0
  35. package/lib/model/questions.js +52 -0
  36. package/lib/model/questions.mjs +8 -0
  37. package/lib/model/questions.ts +14 -0
  38. package/lib/model/sens.d.ts +2 -0
  39. package/lib/model/sens.js +57 -0
  40. package/lib/model/sens.mjs +9 -0
  41. package/lib/model/sens.ts +18 -0
  42. package/lib/model/util.d.ts +1 -0
  43. package/lib/model/util.js +60 -0
  44. package/lib/model/util.mjs +10 -0
  45. package/lib/model/util.ts +16 -0
  46. package/lib/raw_types/questions.d.ts +226 -2
  47. package/lib/raw_types/questions.js +18 -5
  48. package/lib/raw_types/questions.mjs +1 -8
  49. package/lib/raw_types/questions.ts +242 -2
  50. package/lib/scripts/convert_data.d.ts +1 -0
  51. package/lib/scripts/convert_data.js +284 -0
  52. package/lib/scripts/convert_data.mjs +146 -0
  53. package/lib/scripts/convert_data.ts +182 -0
  54. package/lib/scripts/fix_db.d.ts +1 -0
  55. package/lib/scripts/fix_db.js +144 -0
  56. package/lib/scripts/fix_db.mjs +64 -0
  57. package/lib/scripts/fix_db.ts +75 -0
  58. package/lib/scripts/retrieve_open_data.js +20 -15
  59. package/lib/scripts/retrieve_open_data.mjs +20 -17
  60. package/lib/scripts/retrieve_open_data.ts +26 -22
  61. package/lib/scripts/retrieve_textes.js +4 -2
  62. package/lib/scripts/retrieve_textes.mjs +3 -1
  63. package/lib/scripts/retrieve_textes.ts +6 -4
  64. package/lib/types/questions.d.ts +2 -0
  65. package/lib/types/questions.js +13 -1
  66. package/lib/types/questions.mjs +1 -1
  67. package/lib/types/questions.ts +3 -0
  68. package/package.json +1 -1
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ require("core-js/modules/es.symbol.js");
5
+ require("core-js/modules/es.symbol.description.js");
6
+ require("core-js/modules/es.symbol.async-iterator.js");
7
+ require("core-js/modules/es.symbol.iterator.js");
8
+ require("core-js/modules/es.symbol.replace.js");
9
+ require("core-js/modules/es.symbol.to-string-tag.js");
10
+ require("core-js/modules/es.array.for-each.js");
11
+ require("core-js/modules/es.array.from.js");
12
+ require("core-js/modules/es.array.is-array.js");
13
+ require("core-js/modules/es.array.reduce.js");
14
+ require("core-js/modules/es.array.reverse.js");
15
+ require("core-js/modules/es.array.slice.js");
16
+ require("core-js/modules/es.date.to-string.js");
17
+ require("core-js/modules/es.function.name.js");
18
+ require("core-js/modules/es.json.to-string-tag.js");
19
+ require("core-js/modules/es.math.to-string-tag.js");
20
+ require("core-js/modules/es.object.create.js");
21
+ require("core-js/modules/es.object.define-property.js");
22
+ require("core-js/modules/es.object.get-prototype-of.js");
23
+ require("core-js/modules/es.object.keys.js");
24
+ require("core-js/modules/es.promise.js");
25
+ require("core-js/modules/es.regexp.constructor.js");
26
+ require("core-js/modules/es.regexp.to-string.js");
27
+ require("core-js/modules/es.string.replace.js");
28
+ require("core-js/modules/es.weak-map.js");
29
+ require("core-js/modules/web.dom-collections.for-each.js");
30
+ require("core-js/modules/es.array.iterator.js");
31
+ require("core-js/modules/es.array.join.js");
32
+ require("core-js/modules/es.function.bind.js");
33
+ require("core-js/modules/es.object.set-prototype-of.js");
34
+ require("core-js/modules/es.object.to-string.js");
35
+ require("core-js/modules/es.regexp.exec.js");
36
+ require("core-js/modules/es.set.js");
37
+ require("core-js/modules/es.string.iterator.js");
38
+ require("core-js/modules/web.dom-collections.iterator.js");
39
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
40
+ var _path = _interopRequireDefault(require("path"));
41
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
42
+ var _datasets = require("../datasets");
43
+ var _model = require("../model");
44
+ var _inserters = require("../inserters");
45
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
46
+ 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; }
47
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
48
+ 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; } }
49
+ 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; }
50
+ 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); }
51
+ 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); }); }; }
52
+ function _wrapRegExp() { _wrapRegExp = function _wrapRegExp(e, r) { return new BabelRegExp(e, void 0, r); }; var e = RegExp.prototype, r = new WeakMap(); function BabelRegExp(e, t, p) { var o = RegExp(e, t); return r.set(o, p || r.get(e)), _setPrototypeOf(o, BabelRegExp.prototype); } function buildGroups(e, t) { var p = r.get(t); return Object.keys(p).reduce(function (r, t) { var o = p[t]; if ("number" == typeof o) r[t] = e[o];else { for (var i = 0; void 0 === e[o[i]] && i + 1 < o.length;) i++; r[t] = e[o[i]]; } return r; }, Object.create(null)); } return _inherits(BabelRegExp, RegExp), BabelRegExp.prototype.exec = function (r) { var t = e.exec.call(this, r); if (t) { t.groups = buildGroups(t, this); var p = t.indices; p && (p.groups = buildGroups(p, this)); } return t; }, BabelRegExp.prototype[Symbol.replace] = function (t, p) { if ("string" == typeof p) { var o = r.get(this); return e[Symbol.replace].call(this, t, p.replace(/\$<([^>]+)>/g, function (e, r) { var t = o[r]; return "$" + (Array.isArray(t) ? t.join("$") : t); })); } if ("function" == typeof p) { var i = this; return e[Symbol.replace].call(this, t, function () { var e = arguments; return "object" != _typeof(e[e.length - 1]) && (e = [].slice.call(e)).push(buildGroups(e, i)), p.apply(this, e); }); } return e[Symbol.replace].call(this, t, p); }, _wrapRegExp.apply(this, arguments); }
53
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
54
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
55
+ var optionsDefinitions = [{
56
+ alias: 'k',
57
+ defaultValue: ['All'],
58
+ help: 'categories of datasets to reorganize',
59
+ multiple: true,
60
+ name: 'categories',
61
+ type: String
62
+ }, {
63
+ alias: 's',
64
+ help: 'don\'t log anything',
65
+ name: 'silent',
66
+ type: Boolean
67
+ }, {
68
+ alias: "v",
69
+ help: "verbose logs",
70
+ name: "verbose",
71
+ type: Boolean
72
+ }, {
73
+ defaultOption: true,
74
+ help: 'directory containing Sénat open data files',
75
+ name: 'dataDir',
76
+ type: String
77
+ }];
78
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
79
+ var SIGNET_STRUCTURE_REGEXP = /*#__PURE__*/_wrapRegExp(/^([a-z]+)(\d{2,4})-?(\d+)?/, {
80
+ type: 1,
81
+ session: 2,
82
+ numTexte: 3
83
+ });
84
+ function ensureAndClearDir(path) {
85
+ if (!_fsExtra["default"].existsSync(path)) {
86
+ _fsExtra["default"].mkdirSync(path);
87
+ } else {
88
+ _fsExtra["default"].emptyDirSync(path);
89
+ }
90
+ }
91
+ function convertData() {
92
+ return _convertData.apply(this, arguments);
93
+ }
94
+ function _convertData() {
95
+ _convertData = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
96
+ var enabledDatasets, dataDir, dataset, lois, aggregator, _iterator, _step, loi, allData, loiReorganizedRootDir, _iterator2, _step2, _loi, loiFileName, loiReorganizedDir, _SIGNET_STRUCTURE_REG, signetParts, session, _dataset, questions, _aggregator, _iterator3, _step3, question, _allData, questionReorganizedRootDir, _iterator4, _step4, _question, legislature, questionReorganizedDir, questionFileName, _dataset2, sens, _aggregator2, _iterator5, _step5, sen, _allData2, senReorganizedRootDir, _iterator6, _step6, _sen, senFileName;
97
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
98
+ while (1) switch (_context.prev = _context.next) {
99
+ case 0:
100
+ enabledDatasets = (0, _datasets.getEnabledDatasets)(options.categories);
101
+ dataDir = options.dataDir;
102
+ if (!(enabledDatasets & _datasets.EnabledDatasets.DosLeg)) {
103
+ _context.next = 20;
104
+ break;
105
+ }
106
+ dataset = _datasets.datasets.dosleg;
107
+ if (!options.silent) {
108
+ console.log("Converting database ".concat(dataset.database, " data into files\u2026"));
109
+ }
110
+ _context.next = 7;
111
+ return (0, _model.getAllLois)();
112
+ case 7:
113
+ lois = _context.sent;
114
+ aggregator = new _model.Aggregator(new Set(_model.allFollows));
115
+ _iterator = _createForOfIteratorHelper(lois);
116
+ try {
117
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
118
+ loi = _step.value;
119
+ aggregator.addLoi(loi);
120
+ }
121
+ } catch (err) {
122
+ _iterator.e(err);
123
+ } finally {
124
+ _iterator.f();
125
+ }
126
+ if (options.verbose) {
127
+ console.log("Starting getting all the data…");
128
+ console.time("get all data");
129
+ }
130
+ _context.next = 14;
131
+ return aggregator.getAll();
132
+ case 14:
133
+ if (options.verbose) {
134
+ console.timeEnd("get all data");
135
+ }
136
+ allData = aggregator.toJson();
137
+ loiReorganizedRootDir = _path["default"].join(dataDir, dataset.database);
138
+ ensureAndClearDir(loiReorganizedRootDir);
139
+ _iterator2 = _createForOfIteratorHelper(lois);
140
+ try {
141
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
142
+ _loi = _step2.value;
143
+ if (options.verbose) {
144
+ console.log("Converting ".concat(_loi.signet, " file\u2026"));
145
+ }
146
+ (0, _inserters.insertLoiReferences)(_loi, allData, {});
147
+ loiFileName = "".concat(_loi.loicod, ".json");
148
+ loiReorganizedDir = _path["default"].join(loiReorganizedRootDir, _loi.typloicod);
149
+ if (_loi.signet) {
150
+ loiFileName = "".concat(_loi.signet, ".json");
151
+ signetParts = (_SIGNET_STRUCTURE_REG = SIGNET_STRUCTURE_REGEXP.exec(_loi.signet)) === null || _SIGNET_STRUCTURE_REG === void 0 ? void 0 : _SIGNET_STRUCTURE_REG.groups;
152
+ if (signetParts) {
153
+ session = signetParts.session;
154
+ loiReorganizedDir = _path["default"].join(loiReorganizedDir, session);
155
+ } else {
156
+ loiReorganizedDir = _path["default"].join(loiReorganizedDir, "non defini");
157
+ }
158
+ _fsExtra["default"].ensureDirSync(loiReorganizedDir);
159
+ }
160
+ _fsExtra["default"].writeJSONSync(_path["default"].join(loiReorganizedDir, loiFileName), _loi, {
161
+ spaces: 2
162
+ });
163
+ }
164
+ } catch (err) {
165
+ _iterator2.e(err);
166
+ } finally {
167
+ _iterator2.f();
168
+ }
169
+ case 20:
170
+ if (!(enabledDatasets & _datasets.EnabledDatasets.Questions)) {
171
+ _context.next = 36;
172
+ break;
173
+ }
174
+ _dataset = _datasets.datasets.questions;
175
+ if (!options.silent) {
176
+ console.log("Converting database ".concat(_dataset.database, " data into files\u2026"));
177
+ }
178
+ _context.next = 25;
179
+ return (0, _model.getAllQuestions)();
180
+ case 25:
181
+ questions = _context.sent;
182
+ _aggregator = new _model.Aggregator(new Set(_model.allFollows));
183
+ _iterator3 = _createForOfIteratorHelper(questions);
184
+ try {
185
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
186
+ question = _step3.value;
187
+ _aggregator.addQuestion(question);
188
+ }
189
+ } catch (err) {
190
+ _iterator3.e(err);
191
+ } finally {
192
+ _iterator3.f();
193
+ }
194
+ _context.next = 31;
195
+ return _aggregator.getAll();
196
+ case 31:
197
+ _allData = _aggregator.toJson();
198
+ questionReorganizedRootDir = _path["default"].join(dataDir, _dataset.database);
199
+ ensureAndClearDir(questionReorganizedRootDir);
200
+ _iterator4 = _createForOfIteratorHelper(questions);
201
+ try {
202
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
203
+ _question = _step4.value;
204
+ if (options.verbose) {
205
+ console.log("Converting ".concat(_question.id, " file\u2026"));
206
+ }
207
+ (0, _inserters.insertQuestionReferences)(_question, _allData, {});
208
+ legislature = _question.legislature ? _question.legislature : 0;
209
+ questionReorganizedDir = _path["default"].join(questionReorganizedRootDir, String(legislature));
210
+ _fsExtra["default"].ensureDirSync(questionReorganizedDir);
211
+ questionFileName = "".concat(_question.reference, ".json");
212
+ _fsExtra["default"].writeJSONSync(_path["default"].join(questionReorganizedDir, questionFileName), _question, {
213
+ spaces: 2
214
+ });
215
+ }
216
+ } catch (err) {
217
+ _iterator4.e(err);
218
+ } finally {
219
+ _iterator4.f();
220
+ }
221
+ case 36:
222
+ if (!(enabledDatasets & _datasets.EnabledDatasets.Sens)) {
223
+ _context.next = 52;
224
+ break;
225
+ }
226
+ _dataset2 = _datasets.datasets.sens;
227
+ if (!options.silent) {
228
+ console.log("Converting database ".concat(_dataset2.database, " data into files\u2026"));
229
+ }
230
+ _context.next = 41;
231
+ return (0, _model.getAllSens)();
232
+ case 41:
233
+ sens = _context.sent;
234
+ _aggregator2 = new _model.Aggregator(new Set(_model.allFollows));
235
+ _iterator5 = _createForOfIteratorHelper(sens);
236
+ try {
237
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
238
+ sen = _step5.value;
239
+ _aggregator2.addSen(sen);
240
+ }
241
+ } catch (err) {
242
+ _iterator5.e(err);
243
+ } finally {
244
+ _iterator5.f();
245
+ }
246
+ _context.next = 47;
247
+ return _aggregator2.getAll();
248
+ case 47:
249
+ _allData2 = _aggregator2.toJson();
250
+ senReorganizedRootDir = _path["default"].join(dataDir, _dataset2.database);
251
+ ensureAndClearDir(senReorganizedRootDir);
252
+ _iterator6 = _createForOfIteratorHelper(sens);
253
+ try {
254
+ for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
255
+ _sen = _step6.value;
256
+ if (options.verbose) {
257
+ console.log("Converting ".concat(_sen.senmat, " file\u2026"));
258
+ }
259
+ (0, _inserters.insertSenReferences)(_sen, _allData2, {});
260
+ senFileName = "".concat(_sen.senmat, ".json");
261
+ _fsExtra["default"].writeJSONSync(_path["default"].join(senReorganizedRootDir, senFileName), _sen, {
262
+ spaces: 2
263
+ });
264
+ }
265
+ } catch (err) {
266
+ _iterator6.e(err);
267
+ } finally {
268
+ _iterator6.f();
269
+ }
270
+ case 52:
271
+ case "end":
272
+ return _context.stop();
273
+ }
274
+ }, _callee);
275
+ }));
276
+ return _convertData.apply(this, arguments);
277
+ }
278
+ convertData().then(function () {
279
+ return process.exit(0);
280
+ })["catch"](function (error) {
281
+ console.log(error);
282
+ process.exit(1);
283
+ });
284
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnNFeHRyYSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3BhdGgiLCJfY29tbWFuZExpbmVBcmdzIiwiX2RhdGFzZXRzIiwiX21vZGVsIiwiX2luc2VydGVycyIsImUiLCJfX2VzTW9kdWxlIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsInQiLCJyIiwiT2JqZWN0IiwicHJvdG90eXBlIiwibiIsImhhc093blByb3BlcnR5IiwibyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJpIiwiU3ltYm9sIiwiYSIsIml0ZXJhdG9yIiwiYyIsImFzeW5jSXRlcmF0b3IiLCJ1IiwidG9TdHJpbmdUYWciLCJkZWZpbmUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ3cmFwIiwiR2VuZXJhdG9yIiwiY3JlYXRlIiwiQ29udGV4dCIsIm1ha2VJbnZva2VNZXRob2QiLCJ0cnlDYXRjaCIsInR5cGUiLCJhcmciLCJjYWxsIiwiaCIsImwiLCJmIiwicyIsInkiLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwicCIsImQiLCJnZXRQcm90b3R5cGVPZiIsInYiLCJ2YWx1ZXMiLCJnIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiZm9yRWFjaCIsIl9pbnZva2UiLCJBc3luY0l0ZXJhdG9yIiwiaW52b2tlIiwiX3R5cGVvZiIsInJlc29sdmUiLCJfX2F3YWl0IiwidGhlbiIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiRXJyb3IiLCJkb25lIiwibWV0aG9kIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJUeXBlRXJyb3IiLCJyZXN1bHROYW1lIiwibmV4dCIsIm5leHRMb2MiLCJwdXNoVHJ5RW50cnkiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJwdXNoIiwicmVzZXRUcnlFbnRyeSIsImNvbXBsZXRpb24iLCJyZXNldCIsImlzTmFOIiwibGVuZ3RoIiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiY29uc3RydWN0b3IiLCJuYW1lIiwibWFyayIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiYXdyYXAiLCJhc3luYyIsIlByb21pc2UiLCJrZXlzIiwicmV2ZXJzZSIsInBvcCIsInByZXYiLCJjaGFyQXQiLCJzbGljZSIsInN0b3AiLCJydmFsIiwiaGFuZGxlIiwiY29tcGxldGUiLCJmaW5pc2giLCJfY2F0Y2giLCJkZWxlZ2F0ZVlpZWxkIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJfbiIsIkYiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwiZnJvbSIsInRlc3QiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3VtZW50cyIsImFwcGx5IiwiX25leHQiLCJfdGhyb3ciLCJfd3JhcFJlZ0V4cCIsIkJhYmVsUmVnRXhwIiwiUmVnRXhwIiwiV2Vha01hcCIsInNldCIsImdldCIsIl9zZXRQcm90b3R5cGVPZiIsImJ1aWxkR3JvdXBzIiwicmVkdWNlIiwiX2luaGVyaXRzIiwiZXhlYyIsImdyb3VwcyIsImluZGljZXMiLCJyZXBsYWNlIiwiam9pbiIsImJpbmQiLCJvcHRpb25zRGVmaW5pdGlvbnMiLCJhbGlhcyIsImRlZmF1bHRWYWx1ZSIsImhlbHAiLCJtdWx0aXBsZSIsIlN0cmluZyIsIkJvb2xlYW4iLCJkZWZhdWx0T3B0aW9uIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsIlNJR05FVF9TVFJVQ1RVUkVfUkVHRVhQIiwic2Vzc2lvbiIsIm51bVRleHRlIiwiZW5zdXJlQW5kQ2xlYXJEaXIiLCJwYXRoIiwiZnMiLCJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwiZW1wdHlEaXJTeW5jIiwiY29udmVydERhdGEiLCJfY29udmVydERhdGEiLCJfY2FsbGVlIiwiZW5hYmxlZERhdGFzZXRzIiwiZGF0YURpciIsImRhdGFzZXQiLCJsb2lzIiwiYWdncmVnYXRvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwibG9pIiwiYWxsRGF0YSIsImxvaVJlb3JnYW5pemVkUm9vdERpciIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfbG9pIiwibG9pRmlsZU5hbWUiLCJsb2lSZW9yZ2FuaXplZERpciIsIl9TSUdORVRfU1RSVUNUVVJFX1JFRyIsInNpZ25ldFBhcnRzIiwiX2RhdGFzZXQiLCJxdWVzdGlvbnMiLCJfYWdncmVnYXRvciIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJxdWVzdGlvbiIsIl9hbGxEYXRhIiwicXVlc3Rpb25SZW9yZ2FuaXplZFJvb3REaXIiLCJfaXRlcmF0b3I0IiwiX3N0ZXA0IiwiX3F1ZXN0aW9uIiwibGVnaXNsYXR1cmUiLCJxdWVzdGlvblJlb3JnYW5pemVkRGlyIiwicXVlc3Rpb25GaWxlTmFtZSIsIl9kYXRhc2V0MiIsInNlbnMiLCJfYWdncmVnYXRvcjIiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1Iiwic2VuIiwiX2FsbERhdGEyIiwic2VuUmVvcmdhbml6ZWRSb290RGlyIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIl9zZW4iLCJzZW5GaWxlTmFtZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJnZXRFbmFibGVkRGF0YXNldHMiLCJjYXRlZ29yaWVzIiwiRW5hYmxlZERhdGFzZXRzIiwiRG9zTGVnIiwiZGF0YXNldHMiLCJkb3NsZWciLCJzaWxlbnQiLCJjb25zb2xlIiwibG9nIiwiY29uY2F0IiwiZGF0YWJhc2UiLCJnZXRBbGxMb2lzIiwiQWdncmVnYXRvciIsIlNldCIsImFsbEZvbGxvd3MiLCJhZGRMb2kiLCJlcnIiLCJ2ZXJib3NlIiwidGltZSIsImdldEFsbCIsInRpbWVFbmQiLCJ0b0pzb24iLCJzaWduZXQiLCJpbnNlcnRMb2lSZWZlcmVuY2VzIiwibG9pY29kIiwidHlwbG9pY29kIiwiZW5zdXJlRGlyU3luYyIsIndyaXRlSlNPTlN5bmMiLCJzcGFjZXMiLCJRdWVzdGlvbnMiLCJnZXRBbGxRdWVzdGlvbnMiLCJhZGRRdWVzdGlvbiIsImlkIiwiaW5zZXJ0UXVlc3Rpb25SZWZlcmVuY2VzIiwicmVmZXJlbmNlIiwiU2VucyIsImdldEFsbFNlbnMiLCJhZGRTZW4iLCJzZW5tYXQiLCJpbnNlcnRTZW5SZWZlcmVuY2VzIiwicHJvY2VzcyIsImV4aXQiLCJlcnJvciJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL2NvbnZlcnRfZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tICdjb21tYW5kLWxpbmUtYXJncydcblxuaW1wb3J0IHsgZGF0YXNldHMsIEVuYWJsZWREYXRhc2V0cywgZ2V0RW5hYmxlZERhdGFzZXRzLCB9IGZyb20gJy4uL2RhdGFzZXRzJ1xuaW1wb3J0IHtcbiAgQWdncmVnYXRvcixcbiAgYWxsRm9sbG93cyxcbiAgZ2V0QWxsTG9pcyxcbiAgZ2V0QWxsUXVlc3Rpb25zLFxuICBnZXRBbGxTZW5zXG59IGZyb20gJy4uL21vZGVsJ1xuaW1wb3J0IHtcbiAgaW5zZXJ0TG9pUmVmZXJlbmNlcyxcbiAgaW5zZXJ0UXVlc3Rpb25SZWZlcmVuY2VzLFxuICBpbnNlcnRTZW5SZWZlcmVuY2VzXG59IGZyb20gJy4uL2luc2VydGVycydcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgYWxpYXM6ICdrJyxcbiAgICBkZWZhdWx0VmFsdWU6IFsnQWxsJ10sXG4gICAgaGVscDogJ2NhdGVnb3JpZXMgb2YgZGF0YXNldHMgdG8gcmVvcmdhbml6ZScsXG4gICAgbXVsdGlwbGU6IHRydWUsXG4gICAgbmFtZTogJ2NhdGVnb3JpZXMnLFxuICAgIHR5cGU6IFN0cmluZyxcbiAgfSxcbiAge1xuICAgIGFsaWFzOiAncycsXG4gICAgaGVscDogJ2RvblxcJ3QgbG9nIGFueXRoaW5nJyxcbiAgICBuYW1lOiAnc2lsZW50JyxcbiAgICB0eXBlOiBCb29sZWFuLFxuICB9LFxuICB7XG4gICAgYWxpYXM6IFwidlwiLFxuICAgIGhlbHA6IFwidmVyYm9zZSBsb2dzXCIsXG4gICAgbmFtZTogXCJ2ZXJib3NlXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogJ2RpcmVjdG9yeSBjb250YWluaW5nIFPDqW5hdCBvcGVuIGRhdGEgZmlsZXMnLFxuICAgIG5hbWU6ICdkYXRhRGlyJyxcbiAgICB0eXBlOiBTdHJpbmcsXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuY29uc3QgU0lHTkVUX1NUUlVDVFVSRV9SRUdFWFAgPSAvXig/PHR5cGU+W2Etel0rKSg/PHNlc3Npb24+XFxkezIsNH0pLT8oPzxudW1UZXh0ZT5cXGQrKT8vXG5cbmZ1bmN0aW9uIGVuc3VyZUFuZENsZWFyRGlyKHBhdGg6IHN0cmluZykge1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aCkpIHtcbiAgICBmcy5ta2RpclN5bmMocGF0aClcbiAgfSBlbHNlIHtcbiAgICBmcy5lbXB0eURpclN5bmMocGF0aClcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0RGF0YSgpIHtcbiAgY29uc3QgZW5hYmxlZERhdGFzZXRzID0gZ2V0RW5hYmxlZERhdGFzZXRzKG9wdGlvbnMuY2F0ZWdvcmllcylcbiAgY29uc3QgZGF0YURpcjogc3RyaW5nID0gb3B0aW9ucy5kYXRhRGlyXG5cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NMZWcpIHtcbiAgICBjb25zdCBkYXRhc2V0ID0gZGF0YXNldHMuZG9zbGVnXG5cbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29udmVydGluZyBkYXRhYmFzZSAke2RhdGFzZXQuZGF0YWJhc2V9IGRhdGEgaW50byBmaWxlc+KApmApXG4gICAgfVxuXG4gICAgY29uc3QgbG9pcyA9IGF3YWl0IGdldEFsbExvaXMoKVxuICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSBuZXcgQWdncmVnYXRvcihuZXcgU2V0KGFsbEZvbGxvd3MpKVxuICAgIGZvciAoY29uc3QgbG9pIG9mIGxvaXMpIHtcbiAgICAgIGFnZ3JlZ2F0b3IuYWRkTG9pKGxvaSlcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coXCJTdGFydGluZyBnZXR0aW5nIGFsbCB0aGUgZGF0YeKAplwiKVxuICAgICAgY29uc29sZS50aW1lKFwiZ2V0IGFsbCBkYXRhXCIpXG4gICAgfVxuICAgIGF3YWl0IGFnZ3JlZ2F0b3IuZ2V0QWxsKClcbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLnRpbWVFbmQoXCJnZXQgYWxsIGRhdGFcIilcbiAgICB9XG4gICAgY29uc3QgYWxsRGF0YSA9IGFnZ3JlZ2F0b3IudG9Kc29uKClcblxuICAgIGNvbnN0IGxvaVJlb3JnYW5pemVkUm9vdERpciA9IHBhdGguam9pbihkYXRhRGlyLCBkYXRhc2V0LmRhdGFiYXNlKVxuICAgIGVuc3VyZUFuZENsZWFyRGlyKGxvaVJlb3JnYW5pemVkUm9vdERpcilcblxuICAgIGZvciAoY29uc3QgbG9pIG9mIGxvaXMpIHtcbiAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgY29uc29sZS5sb2coYENvbnZlcnRpbmcgJHtsb2kuc2lnbmV0fSBmaWxl4oCmYClcbiAgICAgIH1cblxuICAgICAgaW5zZXJ0TG9pUmVmZXJlbmNlcyhsb2ksIGFsbERhdGEsIHt9KVxuXG4gICAgICBsZXQgbG9pRmlsZU5hbWUgPSBgJHtsb2kubG9pY29kfS5qc29uYFxuICAgICAgbGV0IGxvaVJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGxvaVJlb3JnYW5pemVkUm9vdERpciwgbG9pLnR5cGxvaWNvZClcbiAgICAgIGlmIChsb2kuc2lnbmV0KSB7XG4gICAgICAgIGxvaUZpbGVOYW1lID0gYCR7bG9pLnNpZ25ldH0uanNvbmBcbiAgICAgICAgbGV0IHNpZ25ldFBhcnRzID0gU0lHTkVUX1NUUlVDVFVSRV9SRUdFWFAuZXhlYyhsb2kuc2lnbmV0KT8uZ3JvdXBzXG4gICAgICAgIGlmIChzaWduZXRQYXJ0cykge1xuICAgICAgICAgIGNvbnN0IHsgc2Vzc2lvbn0gPSBzaWduZXRQYXJ0c1xuICAgICAgICAgIGxvaVJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGxvaVJlb3JnYW5pemVkRGlyLCBzZXNzaW9uKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvaVJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKGxvaVJlb3JnYW5pemVkRGlyLCBcIm5vbiBkZWZpbmlcIilcbiAgICAgICAgfVxuICAgICAgICBmcy5lbnN1cmVEaXJTeW5jKGxvaVJlb3JnYW5pemVkRGlyKVxuICAgICAgfVxuXG4gICAgICBmcy53cml0ZUpTT05TeW5jKHBhdGguam9pbihsb2lSZW9yZ2FuaXplZERpciwgbG9pRmlsZU5hbWUpLCBsb2ksIHtzcGFjZXM6IDJ9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUXVlc3Rpb25zKSB7XG4gICAgY29uc3QgZGF0YXNldCA9IGRhdGFzZXRzLnF1ZXN0aW9uc1xuXG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coYENvbnZlcnRpbmcgZGF0YWJhc2UgJHtkYXRhc2V0LmRhdGFiYXNlfSBkYXRhIGludG8gZmlsZXPigKZgKVxuICAgIH1cblxuICAgIGNvbnN0IHF1ZXN0aW9ucyA9IGF3YWl0IGdldEFsbFF1ZXN0aW9ucygpXG4gICAgY29uc3QgYWdncmVnYXRvciA9IG5ldyBBZ2dyZWdhdG9yKG5ldyBTZXQoYWxsRm9sbG93cykpXG4gICAgZm9yIChjb25zdCBxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAgICAgIGFnZ3JlZ2F0b3IuYWRkUXVlc3Rpb24ocXVlc3Rpb24pXG4gICAgfVxuICAgIGF3YWl0IGFnZ3JlZ2F0b3IuZ2V0QWxsKClcbiAgICBjb25zdCBhbGxEYXRhID0gYWdncmVnYXRvci50b0pzb24oKVxuXG4gICAgY29uc3QgcXVlc3Rpb25SZW9yZ2FuaXplZFJvb3REaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5kYXRhYmFzZSlcbiAgICBlbnN1cmVBbmRDbGVhckRpcihxdWVzdGlvblJlb3JnYW5pemVkUm9vdERpcilcblxuICAgIGZvciAoY29uc3QgcXVlc3Rpb24gb2YgcXVlc3Rpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDb252ZXJ0aW5nICR7cXVlc3Rpb24uaWR9IGZpbGXigKZgKVxuICAgICAgfVxuXG4gICAgICBpbnNlcnRRdWVzdGlvblJlZmVyZW5jZXMocXVlc3Rpb24sIGFsbERhdGEsIHt9KVxuXG4gICAgICBjb25zdCBsZWdpc2xhdHVyZSA9IHF1ZXN0aW9uLmxlZ2lzbGF0dXJlID8gcXVlc3Rpb24ubGVnaXNsYXR1cmUgOiAwXG4gICAgICBjb25zdCBxdWVzdGlvblJlb3JnYW5pemVkRGlyID0gcGF0aC5qb2luKHF1ZXN0aW9uUmVvcmdhbml6ZWRSb290RGlyLCBTdHJpbmcobGVnaXNsYXR1cmUpKVxuICAgICAgZnMuZW5zdXJlRGlyU3luYyhxdWVzdGlvblJlb3JnYW5pemVkRGlyKVxuICAgICAgbGV0IHF1ZXN0aW9uRmlsZU5hbWUgPSBgJHtxdWVzdGlvbi5yZWZlcmVuY2V9Lmpzb25gXG4gICAgICBmcy53cml0ZUpTT05TeW5jKHBhdGguam9pbihxdWVzdGlvblJlb3JnYW5pemVkRGlyLCBxdWVzdGlvbkZpbGVOYW1lKSwgcXVlc3Rpb24sIHtzcGFjZXM6IDJ9KVxuICAgIH1cbiAgfVxuXG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2Vucykge1xuICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0cy5zZW5zXG5cbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29udmVydGluZyBkYXRhYmFzZSAke2RhdGFzZXQuZGF0YWJhc2V9IGRhdGEgaW50byBmaWxlc+KApmApXG4gICAgfVxuXG4gICAgY29uc3Qgc2VucyA9IGF3YWl0IGdldEFsbFNlbnMoKVxuICAgIGNvbnN0IGFnZ3JlZ2F0b3IgPSBuZXcgQWdncmVnYXRvcihuZXcgU2V0KGFsbEZvbGxvd3MpKVxuICAgIGZvciAoY29uc3Qgc2VuIG9mIHNlbnMpIHtcbiAgICAgIGFnZ3JlZ2F0b3IuYWRkU2VuKHNlbilcbiAgICB9XG4gICAgYXdhaXQgYWdncmVnYXRvci5nZXRBbGwoKVxuICAgIGNvbnN0IGFsbERhdGEgPSBhZ2dyZWdhdG9yLnRvSnNvbigpXG5cbiAgICBjb25zdCBzZW5SZW9yZ2FuaXplZFJvb3REaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgZGF0YXNldC5kYXRhYmFzZSlcbiAgICBlbnN1cmVBbmRDbGVhckRpcihzZW5SZW9yZ2FuaXplZFJvb3REaXIpXG5cbiAgICBmb3IgKGNvbnN0IHNlbiBvZiBzZW5zKSB7XG4gICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBDb252ZXJ0aW5nICR7c2VuLnNlbm1hdH0gZmlsZeKApmApXG4gICAgICB9XG5cbiAgICAgIGluc2VydFNlblJlZmVyZW5jZXMoc2VuLCBhbGxEYXRhLCB7fSlcblxuICAgICAgbGV0IHNlbkZpbGVOYW1lID0gYCR7c2VuLnNlbm1hdH0uanNvbmBcbiAgICAgIGZzLndyaXRlSlNPTlN5bmMocGF0aC5qb2luKHNlblJlb3JnYW5pemVkUm9vdERpciwgc2VuRmlsZU5hbWUpLCBzZW4sIHtzcGFjZXM6IDJ9KVxuICAgIH1cbiAgfVxufVxuXG5jb252ZXJ0RGF0YSgpXG4gIC50aGVuKCgpID0+IHByb2Nlc3MuZXhpdCgwKSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEtBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLGdCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxNQUFBLEdBQUFKLE9BQUE7QUFPQSxJQUFBSyxVQUFBLEdBQUFMLE9BQUE7QUFJcUIsU0FBQUQsdUJBQUFPLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUFBLFNBQUFFLG9CQUFBLGtCQWZyQixxSkFBQUEsbUJBQUEsWUFBQUEsb0JBQUEsV0FBQUYsQ0FBQSxTQUFBRyxDQUFBLEVBQUFILENBQUEsT0FBQUksQ0FBQSxHQUFBQyxNQUFBLENBQUFDLFNBQUEsRUFBQUMsQ0FBQSxHQUFBSCxDQUFBLENBQUFJLGNBQUEsRUFBQUMsQ0FBQSxHQUFBSixNQUFBLENBQUFLLGNBQUEsY0FBQVAsQ0FBQSxFQUFBSCxDQUFBLEVBQUFJLENBQUEsSUFBQUQsQ0FBQSxDQUFBSCxDQUFBLElBQUFJLENBQUEsQ0FBQU8sS0FBQSxLQUFBQyxDQUFBLHdCQUFBQyxNQUFBLEdBQUFBLE1BQUEsT0FBQUMsQ0FBQSxHQUFBRixDQUFBLENBQUFHLFFBQUEsa0JBQUFDLENBQUEsR0FBQUosQ0FBQSxDQUFBSyxhQUFBLHVCQUFBQyxDQUFBLEdBQUFOLENBQUEsQ0FBQU8sV0FBQSw4QkFBQUMsT0FBQWpCLENBQUEsRUFBQUgsQ0FBQSxFQUFBSSxDQUFBLFdBQUFD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
@@ -0,0 +1,146 @@
1
+ import fs from 'fs-extra';
2
+ import path from 'path';
3
+ import commandLineArgs from 'command-line-args';
4
+ import { datasets, EnabledDatasets, getEnabledDatasets, } from '../datasets';
5
+ import { Aggregator, allFollows, getAllLois, getAllQuestions, getAllSens } from '../model';
6
+ import { insertLoiReferences, insertQuestionReferences, insertSenReferences } from '../inserters';
7
+ const optionsDefinitions = [
8
+ {
9
+ alias: 'k',
10
+ defaultValue: ['All'],
11
+ help: 'categories of datasets to reorganize',
12
+ multiple: true,
13
+ name: 'categories',
14
+ type: String,
15
+ },
16
+ {
17
+ alias: 's',
18
+ help: 'don\'t log anything',
19
+ name: 'silent',
20
+ type: Boolean,
21
+ },
22
+ {
23
+ alias: "v",
24
+ help: "verbose logs",
25
+ name: "verbose",
26
+ type: Boolean,
27
+ },
28
+ {
29
+ defaultOption: true,
30
+ help: 'directory containing Sénat open data files',
31
+ name: 'dataDir',
32
+ type: String,
33
+ },
34
+ ];
35
+ const options = commandLineArgs(optionsDefinitions);
36
+ const SIGNET_STRUCTURE_REGEXP = /^(?<type>[a-z]+)(?<session>\d{2,4})-?(?<numTexte>\d+)?/;
37
+ function ensureAndClearDir(path) {
38
+ if (!fs.existsSync(path)) {
39
+ fs.mkdirSync(path);
40
+ }
41
+ else {
42
+ fs.emptyDirSync(path);
43
+ }
44
+ }
45
+ async function convertData() {
46
+ const enabledDatasets = getEnabledDatasets(options.categories);
47
+ const dataDir = options.dataDir;
48
+ if (enabledDatasets & EnabledDatasets.DosLeg) {
49
+ const dataset = datasets.dosleg;
50
+ if (!options.silent) {
51
+ console.log(`Converting database ${dataset.database} data into files…`);
52
+ }
53
+ const lois = await getAllLois();
54
+ const aggregator = new Aggregator(new Set(allFollows));
55
+ for (const loi of lois) {
56
+ aggregator.addLoi(loi);
57
+ }
58
+ if (options.verbose) {
59
+ console.log("Starting getting all the data…");
60
+ console.time("get all data");
61
+ }
62
+ await aggregator.getAll();
63
+ if (options.verbose) {
64
+ console.timeEnd("get all data");
65
+ }
66
+ const allData = aggregator.toJson();
67
+ const loiReorganizedRootDir = path.join(dataDir, dataset.database);
68
+ ensureAndClearDir(loiReorganizedRootDir);
69
+ for (const loi of lois) {
70
+ if (options.verbose) {
71
+ console.log(`Converting ${loi.signet} file…`);
72
+ }
73
+ insertLoiReferences(loi, allData, {});
74
+ let loiFileName = `${loi.loicod}.json`;
75
+ let loiReorganizedDir = path.join(loiReorganizedRootDir, loi.typloicod);
76
+ if (loi.signet) {
77
+ loiFileName = `${loi.signet}.json`;
78
+ let signetParts = SIGNET_STRUCTURE_REGEXP.exec(loi.signet)?.groups;
79
+ if (signetParts) {
80
+ const { session } = signetParts;
81
+ loiReorganizedDir = path.join(loiReorganizedDir, session);
82
+ }
83
+ else {
84
+ loiReorganizedDir = path.join(loiReorganizedDir, "non defini");
85
+ }
86
+ fs.ensureDirSync(loiReorganizedDir);
87
+ }
88
+ fs.writeJSONSync(path.join(loiReorganizedDir, loiFileName), loi, { spaces: 2 });
89
+ }
90
+ }
91
+ if (enabledDatasets & EnabledDatasets.Questions) {
92
+ const dataset = datasets.questions;
93
+ if (!options.silent) {
94
+ console.log(`Converting database ${dataset.database} data into files…`);
95
+ }
96
+ const questions = await getAllQuestions();
97
+ const aggregator = new Aggregator(new Set(allFollows));
98
+ for (const question of questions) {
99
+ aggregator.addQuestion(question);
100
+ }
101
+ await aggregator.getAll();
102
+ const allData = aggregator.toJson();
103
+ const questionReorganizedRootDir = path.join(dataDir, dataset.database);
104
+ ensureAndClearDir(questionReorganizedRootDir);
105
+ for (const question of questions) {
106
+ if (options.verbose) {
107
+ console.log(`Converting ${question.id} file…`);
108
+ }
109
+ insertQuestionReferences(question, allData, {});
110
+ const legislature = question.legislature ? question.legislature : 0;
111
+ const questionReorganizedDir = path.join(questionReorganizedRootDir, String(legislature));
112
+ fs.ensureDirSync(questionReorganizedDir);
113
+ let questionFileName = `${question.reference}.json`;
114
+ fs.writeJSONSync(path.join(questionReorganizedDir, questionFileName), question, { spaces: 2 });
115
+ }
116
+ }
117
+ if (enabledDatasets & EnabledDatasets.Sens) {
118
+ const dataset = datasets.sens;
119
+ if (!options.silent) {
120
+ console.log(`Converting database ${dataset.database} data into files…`);
121
+ }
122
+ const sens = await getAllSens();
123
+ const aggregator = new Aggregator(new Set(allFollows));
124
+ for (const sen of sens) {
125
+ aggregator.addSen(sen);
126
+ }
127
+ await aggregator.getAll();
128
+ const allData = aggregator.toJson();
129
+ const senReorganizedRootDir = path.join(dataDir, dataset.database);
130
+ ensureAndClearDir(senReorganizedRootDir);
131
+ for (const sen of sens) {
132
+ if (options.verbose) {
133
+ console.log(`Converting ${sen.senmat} file…`);
134
+ }
135
+ insertSenReferences(sen, allData, {});
136
+ let senFileName = `${sen.senmat}.json`;
137
+ fs.writeJSONSync(path.join(senReorganizedRootDir, senFileName), sen, { spaces: 2 });
138
+ }
139
+ }
140
+ }
141
+ convertData()
142
+ .then(() => process.exit(0))
143
+ .catch((error) => {
144
+ console.log(error);
145
+ process.exit(1);
146
+ });