@tricoteuses/senat 1.1.2 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (155) hide show
  1. package/README.md +53 -15
  2. package/lib/config.d.ts +1 -0
  3. package/lib/config.js +14 -45
  4. package/lib/databases.d.ts +9 -0
  5. package/lib/databases.js +90 -117
  6. package/lib/datasets.js +78 -83
  7. package/lib/index.d.ts +8 -7
  8. package/lib/index.js +42 -523
  9. package/lib/legislatures.json +38 -0
  10. package/lib/loaders.d.ts +64 -0
  11. package/lib/loaders.js +177 -0
  12. package/lib/model/ameli.d.ts +105 -4
  13. package/lib/model/ameli.js +88 -166
  14. package/lib/model/debats.d.ts +0 -4
  15. package/lib/model/debats.js +0 -122
  16. package/lib/model/dosleg.d.ts +227 -29
  17. package/lib/model/dosleg.js +205 -839
  18. package/lib/model/index.d.ts +4 -5
  19. package/lib/model/index.js +12 -47
  20. package/lib/model/questions.d.ts +88 -2
  21. package/lib/model/questions.js +75 -51
  22. package/lib/model/sens.d.ts +524 -2
  23. package/lib/model/sens.js +449 -56
  24. package/lib/model/texte.d.ts +7 -0
  25. package/lib/model/texte.js +251 -0
  26. package/lib/model/util.d.ts +7 -1
  27. package/lib/model/util.js +26 -59
  28. package/lib/raw_types/ameli.d.ts +912 -538
  29. package/lib/raw_types/ameli.js +3 -42
  30. package/lib/raw_types/debats.d.ts +204 -124
  31. package/lib/raw_types/debats.js +3 -21
  32. package/lib/raw_types/dosleg.d.ts +3533 -2024
  33. package/lib/raw_types/dosleg.js +3 -95
  34. package/lib/raw_types/questions.d.ts +404 -220
  35. package/lib/raw_types/questions.js +3 -21
  36. package/lib/raw_types/sens.d.ts +4391 -2706
  37. package/lib/raw_types/sens.js +3 -111
  38. package/lib/raw_types_schemats/ameli.d.ts +541 -0
  39. package/lib/raw_types_schemats/ameli.js +3 -0
  40. package/lib/raw_types_schemats/debats.d.ts +127 -0
  41. package/lib/raw_types_schemats/debats.js +3 -0
  42. package/lib/raw_types_schemats/dosleg.d.ts +2029 -0
  43. package/lib/raw_types_schemats/dosleg.js +3 -0
  44. package/lib/raw_types_schemats/questions.d.ts +233 -0
  45. package/lib/raw_types_schemats/questions.js +3 -0
  46. package/lib/raw_types_schemats/sens.d.ts +2709 -0
  47. package/lib/raw_types_schemats/sens.js +3 -0
  48. package/lib/scripts/convert_data.js +184 -275
  49. package/lib/scripts/datautil.d.ts +5 -0
  50. package/lib/scripts/datautil.js +21 -0
  51. package/lib/scripts/parse_textes.js +49 -0
  52. package/lib/scripts/retrieve_documents.js +255 -0
  53. package/lib/scripts/retrieve_open_data.js +211 -360
  54. package/lib/scripts/retrieve_senateurs_photos.js +144 -257
  55. package/lib/scripts/shared/cli_helpers.d.ts +44 -0
  56. package/lib/scripts/shared/cli_helpers.js +35 -0
  57. package/lib/scripts/shared/util.d.ts +3 -0
  58. package/lib/scripts/shared/util.js +36 -0
  59. package/lib/strings.js +20 -45
  60. package/lib/types/ameli.d.ts +2 -2
  61. package/lib/types/ameli.js +14 -25
  62. package/lib/types/debats.d.ts +2 -2
  63. package/lib/types/debats.js +3 -21
  64. package/lib/types/dosleg.d.ts +3 -3
  65. package/lib/types/dosleg.js +152 -119
  66. package/lib/types/questions.d.ts +2 -2
  67. package/lib/types/questions.js +1 -13
  68. package/lib/types/sens.d.ts +2 -4
  69. package/lib/types/sens.js +1 -16
  70. package/lib/types/sessions.d.ts +42 -0
  71. package/lib/types/sessions.js +46 -0
  72. package/lib/types/texte.d.ts +65 -0
  73. package/lib/types/texte.js +19 -0
  74. package/lib/validators/config.js +47 -111
  75. package/lib/validators/senat.js +1 -5
  76. package/package.json +35 -32
  77. package/lib/aggregates.d.ts +0 -54
  78. package/lib/aggregates.js +0 -1122
  79. package/lib/aggregates.mjs +0 -802
  80. package/lib/aggregates.ts +0 -947
  81. package/lib/config.mjs +0 -16
  82. package/lib/config.ts +0 -26
  83. package/lib/databases.mjs +0 -26
  84. package/lib/databases.ts +0 -32
  85. package/lib/datasets.mjs +0 -78
  86. package/lib/datasets.ts +0 -118
  87. package/lib/fields.d.ts +0 -10
  88. package/lib/fields.js +0 -68
  89. package/lib/fields.mjs +0 -22
  90. package/lib/fields.ts +0 -29
  91. package/lib/index.mjs +0 -7
  92. package/lib/index.ts +0 -63
  93. package/lib/inserters.d.ts +0 -102
  94. package/lib/inserters.js +0 -518
  95. package/lib/inserters.mjs +0 -376
  96. package/lib/inserters.ts +0 -545
  97. package/lib/model/ameli.mjs +0 -57
  98. package/lib/model/ameli.ts +0 -86
  99. package/lib/model/debats.mjs +0 -43
  100. package/lib/model/debats.ts +0 -68
  101. package/lib/model/dosleg.mjs +0 -337
  102. package/lib/model/dosleg.ts +0 -558
  103. package/lib/model/index.mjs +0 -5
  104. package/lib/model/index.ts +0 -11
  105. package/lib/model/questions.mjs +0 -8
  106. package/lib/model/questions.ts +0 -14
  107. package/lib/model/sens.mjs +0 -9
  108. package/lib/model/sens.ts +0 -18
  109. package/lib/model/util.mjs +0 -10
  110. package/lib/model/util.ts +0 -16
  111. package/lib/raw_types/ameli.mjs +0 -2
  112. package/lib/raw_types/ameli.ts +0 -601
  113. package/lib/raw_types/debats.mjs +0 -2
  114. package/lib/raw_types/debats.ts +0 -145
  115. package/lib/raw_types/dosleg.mjs +0 -2
  116. package/lib/raw_types/dosleg.ts +0 -2193
  117. package/lib/raw_types/questions.mjs +0 -2
  118. package/lib/raw_types/questions.ts +0 -249
  119. package/lib/raw_types/sens.mjs +0 -2
  120. package/lib/raw_types/sens.ts +0 -2907
  121. package/lib/scripts/convert_data.mjs +0 -146
  122. package/lib/scripts/convert_data.ts +0 -182
  123. package/lib/scripts/fix_db.js +0 -144
  124. package/lib/scripts/fix_db.mjs +0 -64
  125. package/lib/scripts/fix_db.ts +0 -75
  126. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  127. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  128. package/lib/scripts/retrieve_open_data.mjs +0 -218
  129. package/lib/scripts/retrieve_open_data.ts +0 -258
  130. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -164
  131. package/lib/scripts/retrieve_senateurs_photos.ts +0 -200
  132. package/lib/scripts/retrieve_textes.js +0 -179
  133. package/lib/scripts/retrieve_textes.mjs +0 -77
  134. package/lib/scripts/retrieve_textes.ts +0 -95
  135. package/lib/strings.mjs +0 -18
  136. package/lib/strings.ts +0 -26
  137. package/lib/types/ameli.mjs +0 -13
  138. package/lib/types/ameli.ts +0 -21
  139. package/lib/types/debats.mjs +0 -2
  140. package/lib/types/debats.ts +0 -6
  141. package/lib/types/dosleg.mjs +0 -151
  142. package/lib/types/dosleg.ts +0 -284
  143. package/lib/types/questions.mjs +0 -1
  144. package/lib/types/questions.ts +0 -3
  145. package/lib/types/sens.mjs +0 -23
  146. package/lib/types/sens.ts +0 -36
  147. package/lib/typings/windows-1252.d.js +0 -2
  148. package/lib/typings/windows-1252.d.mjs +0 -2
  149. package/lib/typings/windows-1252.d.ts +0 -11
  150. package/lib/validators/config.mjs +0 -54
  151. package/lib/validators/config.ts +0 -79
  152. package/lib/validators/senat.mjs +0 -24
  153. package/lib/validators/senat.ts +0 -26
  154. /package/lib/scripts/{fix_db.d.ts → parse_textes.d.ts} +0 -0
  155. /package/lib/scripts/{retrieve_textes.d.ts → retrieve_documents.d.ts} +0 -0
@@ -1,268 +1,155 @@
1
1
  "use strict";
2
-
3
- require("core-js/modules/es.symbol.js");
4
- require("core-js/modules/es.symbol.description.js");
5
- require("core-js/modules/es.symbol.async-iterator.js");
6
- require("core-js/modules/es.symbol.iterator.js");
7
- require("core-js/modules/es.symbol.to-string-tag.js");
8
- require("core-js/modules/es.array.for-each.js");
9
- require("core-js/modules/es.array.from.js");
10
- require("core-js/modules/es.array.is-array.js");
11
- require("core-js/modules/es.array.reverse.js");
12
- require("core-js/modules/es.date.to-string.js");
13
- require("core-js/modules/es.function.name.js");
14
- require("core-js/modules/es.json.to-string-tag.js");
15
- require("core-js/modules/es.math.to-string-tag.js");
16
- require("core-js/modules/es.object.create.js");
17
- require("core-js/modules/es.object.define-property.js");
18
- require("core-js/modules/es.object.get-prototype-of.js");
19
- require("core-js/modules/es.object.set-prototype-of.js");
20
- require("core-js/modules/es.regexp.exec.js");
21
- require("core-js/modules/es.regexp.to-string.js");
22
- require("core-js/modules/es.string.iterator.js");
23
- require("core-js/modules/web.dom-collections.for-each.js");
24
- require("core-js/modules/es.array.concat.js");
25
- require("core-js/modules/es.array.iterator.js");
26
- require("core-js/modules/es.array.join.js");
27
- require("core-js/modules/es.array.map.js");
28
- require("core-js/modules/es.array.slice.js");
29
- require("core-js/modules/es.date.to-json.js");
30
- require("core-js/modules/es.object.to-string.js");
31
- require("core-js/modules/es.promise.js");
32
- require("core-js/modules/web.dom-collections.iterator.js");
33
- var _assert = _interopRequireDefault(require("assert"));
34
- var _child_process = require("child_process");
35
- var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
36
- var _fsExtra = _interopRequireDefault(require("fs-extra"));
37
- var _path = _interopRequireDefault(require("path"));
38
- var _sens = require("../types/sens");
39
- var _databases = require("../databases");
40
- var _fields = require("../fields");
41
- var _strings = require("../strings");
42
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
43
- 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; }
44
- function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
45
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
46
- function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
47
- function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
48
- 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); }
49
- 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; } } }; }
50
- 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; } }
51
- 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; }
52
- 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); }
53
- 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); }); }; } // import fetch from "node-fetch"
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const child_process_1 = require("child_process");
8
+ const command_line_args_1 = __importDefault(require("command-line-args"));
9
+ const fs_extra_1 = __importDefault(require("fs-extra"));
10
+ // import fetch from "node-fetch"
11
+ const path_1 = __importDefault(require("path"));
54
12
  // import stream from "stream"
55
13
  // import util from "util"
56
- var optionsDefinitions = [{
57
- alias: "f",
58
- help: "fetch sénateurs' pictures instead of retrieving them from files",
59
- name: "fetch",
60
- type: Boolean
61
- }, {
62
- alias: "s",
63
- help: "don't log anything",
64
- name: "silent",
65
- type: Boolean
66
- }, {
67
- defaultOption: true,
68
- help: "directory containing Sénat open data files",
69
- name: "dataDir",
70
- type: String
71
- }];
72
- var options = (0, _commandLineArgs["default"])(optionsDefinitions);
14
+ const sens_1 = require("../model/sens");
15
+ const strings_1 = require("../strings");
16
+ const cli_helpers_1 = require("./shared/cli_helpers");
17
+ const optionsDefinitions = [
18
+ ...cli_helpers_1.commonOptions,
19
+ {
20
+ alias: "f",
21
+ help: "fetch sénateurs' pictures instead of retrieving them from files",
22
+ name: "fetch",
23
+ type: Boolean,
24
+ },
25
+ ];
26
+ const options = (0, command_line_args_1.default)(optionsDefinitions);
73
27
  // const pipeline = util.promisify(stream.pipeline)
74
- function retrievePhotosSenateurs() {
75
- return _retrievePhotosSenateurs.apply(this, arguments);
76
- }
77
- function _retrievePhotosSenateurs() {
78
- _retrievePhotosSenateurs = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
79
- var dataDir, db, sens, photosDir, missingPhotoFilePath, _iterator, _step, sen, photoStem, photoFilename, photoFilePath, photoTempFilename, photoTempFilePath, urlPhoto, _iterator2, _step2, _sen2, _photoStem2, _photoFilename2, _photoFilePath, photoBySenmat, rowsFilenames, senIndex, rowIndex, row, photosFilenames, _iterator3, _step3, _step3$value, columnIndex, _sen, _photoStem, _photoFilename, rowFilename, _i, _rowsFilenames, _rowFilename, jsonFilePath;
80
- return _regeneratorRuntime().wrap(function _callee$(_context) {
81
- while (1) switch (_context.prev = _context.next) {
82
- case 0:
83
- dataDir = options.dataDir;
84
- (0, _assert["default"])(dataDir, "Missing argument: data directory");
85
- _context.next = 4;
86
- return (0, _databases.checkDatabase)("sens");
87
- case 4:
88
- db = _context.sent;
89
- _context.next = 7;
90
- return db.any("\n SELECT *\n FROM sen\n WHERE etasencod = 'ACTIF'\n ");
91
- case 7:
92
- sens = _context.sent.map(function (sen) {
93
- return (0, _fields.parseIntFields)(_sens.senFieldsToParseInt, (0, _fields.trimFieldsRight)(_sens.senFieldsToTrim, sen));
94
- });
95
- photosDir = _path["default"].join(dataDir, "photos_senateurs");
96
- missingPhotoFilePath = _path["default"].resolve(__dirname, "images", "transparent_155x225.jpg"); // Download photos.
97
- _fsExtra["default"].ensureDirSync(photosDir);
98
- if (!options.fetch) {
99
- _context.next = 45;
100
- break;
101
- }
102
- _iterator = _createForOfIteratorHelper(sens);
103
- _context.prev = 13;
104
- _iterator.s();
105
- case 15:
106
- if ((_step = _iterator.n()).done) {
107
- _context.next = 37;
108
- break;
109
- }
110
- sen = _step.value;
111
- photoStem = "".concat((0, _strings.slugify)(sen.sennomuse, "_"), "_").concat((0, _strings.slugify)(sen.senprenomuse, "_")).concat((0, _strings.slugify)(sen.senmat, "_"));
112
- photoFilename = photoStem + ".jpg";
113
- photoFilePath = _path["default"].join(photosDir, photoFilename);
114
- photoTempFilename = photoStem + "_temp.jpg";
115
- photoTempFilePath = _path["default"].join(photosDir, photoTempFilename);
116
- urlPhoto = "https://www.senat.fr/senimg/".concat(photoFilename);
117
- if (!options.silent) {
118
- console.log("Loading photo ".concat(urlPhoto, " for ").concat(sen.senprenomuse, " ").concat(sen.sennomuse, "\u2026"));
119
- }
120
- // Fetch fails with OpenSSL error: dh key too small.
121
- // (so does "curl").
122
- // for (let retries = 0; retries < 3; retries++) {
123
- // const response = await fetch(urlPhoto)
124
- // if (response.ok) {
125
- // await pipeline(response.body, fs.createWriteStream(photoTempFilePath))
126
- // fs.renameSync(photoTempFilePath, photoFilePath)
127
- // break
128
- // }
129
- // if (retries >= 2) {
130
- // console.warn(`Fetch failed: ${urlPhoto} (${sen.senprenomuse} ${sen.sennomuse})`)
131
- // console.warn(response.status, response.statusText)
132
- // console.warn(await response.text())
133
- // if (fs.existsSync(photoFilePath)) {
134
- // console.warn(" => Reusing existing image")
135
- // } else {
136
- // console.warn(" => Using blank image")
137
- // fs.copyFileSync(missingPhotoFilePath, photoFilePath)
138
- // }
139
- // break
140
- // }
141
- // }
142
- _context.prev = 24;
143
- (0, _child_process.execSync)("wget --quiet -O ".concat(photoTempFilename, " ").concat(urlPhoto), {
144
- cwd: photosDir,
145
- env: process.env,
146
- encoding: "utf-8"
147
- // stdio: ["ignore", "ignore", "pipe"],
148
- });
149
- _fsExtra["default"].renameSync(photoTempFilePath, photoFilePath);
150
- _context.next = 35;
151
- break;
152
- case 29:
153
- _context.prev = 29;
154
- _context.t0 = _context["catch"](24);
155
- if (!(_typeof(_context.t0) === "object" && _context.t0 && "status" in _context.t0 && _context.t0.status === 8)) {
156
- _context.next = 34;
157
- break;
158
- }
159
- console.error("Unable to load photo for ".concat(sen.senprenomuse, " ").concat(sen.sennomuse));
160
- return _context.abrupt("continue", 35);
161
- case 34:
162
- throw _context.t0;
163
- case 35:
164
- _context.next = 15;
165
- break;
166
- case 37:
167
- _context.next = 42;
168
- break;
169
- case 39:
170
- _context.prev = 39;
171
- _context.t1 = _context["catch"](13);
172
- _iterator.e(_context.t1);
173
- case 42:
174
- _context.prev = 42;
175
- _iterator.f();
176
- return _context.finish(42);
177
- case 45:
178
- // Resize photos to 155x225, because some haven't exactly this size.
179
- _iterator2 = _createForOfIteratorHelper(sens);
180
- try {
181
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
182
- _sen2 = _step2.value;
183
- _photoStem2 = "".concat((0, _strings.slugify)(_sen2.sennomuse, "_"), "_").concat((0, _strings.slugify)(_sen2.senprenomuse, "_")).concat((0, _strings.slugify)(_sen2.senmat, "_"));
184
- _photoFilename2 = _photoStem2 + ".jpg";
185
- _photoFilePath = _path["default"].join(photosDir, _photoFilename2);
186
- if (_fsExtra["default"].existsSync(_photoFilePath)) {
187
- if (!options.silent) {
188
- console.log("Resizing photo ".concat(_photoStem2, " for ").concat(_sen2.senprenomuse, " ").concat(_sen2.sennomuse, "\u2026"));
189
- }
190
- (0, _child_process.execSync)("gm convert -resize 155x225! ".concat(_photoStem2, ".jpg ").concat(_photoStem2, "_155x225.jpg"), {
191
- cwd: photosDir
28
+ async function retrievePhotosSenateurs() {
29
+ const dataDir = options["dataDir"];
30
+ (0, assert_1.default)(dataDir, "Missing argument: data directory");
31
+ const photosDir = path_1.default.join(dataDir, "photos_senateurs");
32
+ const missingPhotoFilePath = path_1.default.resolve(__dirname, "images", "transparent_155x225.jpg");
33
+ const sens = await Array.fromAsync((0, sens_1.findActif)());
34
+ // Download photos.
35
+ fs_extra_1.default.ensureDirSync(photosDir);
36
+ if (options["fetch"]) {
37
+ for (const sen of sens) {
38
+ const photoStem = `${(0, strings_1.slugify)(sen.sennomuse, "_")}_${(0, strings_1.slugify)(sen.senprenomuse, "_")}${(0, strings_1.slugify)(sen.senmat, "_")}`;
39
+ const photoFilename = photoStem + ".jpg";
40
+ const photoFilePath = path_1.default.join(photosDir, photoFilename);
41
+ const photoTempFilename = photoStem + "_temp.jpg";
42
+ const photoTempFilePath = path_1.default.join(photosDir, photoTempFilename);
43
+ const urlPhoto = `https://www.senat.fr/senimg/${photoFilename}`;
44
+ if (!options["silent"]) {
45
+ console.log(`Loading photo ${urlPhoto} for ${sen.senprenomuse} ${sen.sennomuse}…`);
46
+ }
47
+ // Fetch fails with OpenSSL error: dh key too small.
48
+ // (so does "curl").
49
+ // for (let retries = 0; retries < 3; retries++) {
50
+ // const response = await fetch(urlPhoto)
51
+ // if (response.ok) {
52
+ // await pipeline(response.body, fs.createWriteStream(photoTempFilePath))
53
+ // fs.renameSync(photoTempFilePath, photoFilePath)
54
+ // break
55
+ // }
56
+ // if (retries >= 2) {
57
+ // console.warn(`Fetch failed: ${urlPhoto} (${sen.senprenomuse} ${sen.sennomuse})`)
58
+ // console.warn(response.status, response.statusText)
59
+ // console.warn(await response.text())
60
+ // if (fs.existsSync(photoFilePath)) {
61
+ // console.warn(" => Reusing existing image")
62
+ // } else {
63
+ // console.warn(" => Using blank image")
64
+ // fs.copyFileSync(missingPhotoFilePath, photoFilePath)
65
+ // }
66
+ // break
67
+ // }
68
+ // }
69
+ try {
70
+ (0, child_process_1.execSync)(`wget --quiet -O ${photoTempFilename} ${urlPhoto}`, {
71
+ cwd: photosDir,
72
+ env: process.env,
73
+ encoding: "utf-8",
74
+ // stdio: ["ignore", "ignore", "pipe"],
192
75
  });
193
- } else {
194
- if (!options.silent) {
195
- console.warn("Missing photo for ".concat(_sen2.senprenomuse, " ").concat(_sen2.sennomuse, ": using blank image"));
76
+ fs_extra_1.default.renameSync(photoTempFilePath, photoFilePath);
77
+ }
78
+ catch (error) {
79
+ if (typeof error === "object" &&
80
+ error &&
81
+ "status" in error &&
82
+ error.status === 8) {
83
+ console.error(`Unable to load photo for ${sen.senprenomuse} ${sen.sennomuse}`);
84
+ continue;
196
85
  }
197
- _fsExtra["default"].copyFileSync(missingPhotoFilePath, _path["default"].join(photosDir, "".concat(_photoStem2, "_155x225.jpg")));
198
- }
86
+ throw error;
199
87
  }
200
-
201
- // Create a mosaic of photos.
202
- } catch (err) {
203
- _iterator2.e(err);
204
- } finally {
205
- _iterator2.f();
206
- }
207
- if (!options.silent) {
208
- console.log("Creating mosaic of photos…");
209
- }
210
- photoBySenmat = {};
211
- rowsFilenames = [];
212
- for (senIndex = 0, rowIndex = 0; senIndex < sens.length; senIndex += 25, rowIndex++) {
213
- row = sens.slice(senIndex, senIndex + 25);
214
- photosFilenames = [];
215
- _iterator3 = _createForOfIteratorHelper(row.entries());
216
- try {
217
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
218
- _step3$value = _slicedToArray(_step3.value, 2), columnIndex = _step3$value[0], _sen = _step3$value[1];
219
- _photoStem = "".concat((0, _strings.slugify)(_sen.sennomuse, "_"), "_").concat((0, _strings.slugify)(_sen.senprenomuse, "_")).concat((0, _strings.slugify)(_sen.senmat, "_"));
220
- _photoFilename = "".concat(_photoStem, "_155x225.jpg");
221
- photosFilenames.push(_photoFilename);
222
- photoBySenmat[_sen.senmat] = {
223
- chemin: "photos_senateurs/".concat(_photoFilename),
224
- cheminMosaique: "photos_senateurs/senateurs.jpg",
225
- hauteur: 225,
226
- largeur: 155,
227
- xMosaique: columnIndex * 155,
228
- yMosaique: rowIndex * 225
229
- };
230
- }
231
- } catch (err) {
232
- _iterator3.e(err);
233
- } finally {
234
- _iterator3.f();
88
+ }
89
+ }
90
+ // Resize photos to 155x225, because some haven't exactly this size.
91
+ for (const sen of sens) {
92
+ const photoStem = `${(0, strings_1.slugify)(sen.sennomuse, "_")}_${(0, strings_1.slugify)(sen.senprenomuse, "_")}${(0, strings_1.slugify)(sen.senmat, "_")}`;
93
+ const photoFilename = photoStem + ".jpg";
94
+ const photoFilePath = path_1.default.join(photosDir, photoFilename);
95
+ if (fs_extra_1.default.existsSync(photoFilePath)) {
96
+ if (!options["silent"]) {
97
+ console.log(`Resizing photo ${photoStem} for ${sen.senprenomuse} ${sen.sennomuse}…`);
235
98
  }
236
- rowFilename = "row-".concat(rowIndex, ".jpg");
237
- (0, _child_process.execSync)("gm convert ".concat(photosFilenames.join(" "), " +append ").concat(rowFilename), {
238
- cwd: photosDir
99
+ (0, child_process_1.execSync)(`gm convert -resize 155x225! ${photoStem}.jpg ${photoStem}_155x225.jpg`, {
100
+ cwd: photosDir,
239
101
  });
240
- rowsFilenames.push(rowFilename);
241
- }
242
- (0, _child_process.execSync)("gm convert ".concat(rowsFilenames.join(" "), " -append senateurs.jpg"), {
243
- cwd: photosDir
244
- });
245
- for (_i = 0, _rowsFilenames = rowsFilenames; _i < _rowsFilenames.length; _i++) {
246
- _rowFilename = _rowsFilenames[_i];
247
- _fsExtra["default"].unlinkSync(_path["default"].join(photosDir, _rowFilename));
248
- }
249
- if (!options.silent) {
250
- console.log("Creating JSON file containing informations on all pictures…");
251
- }
252
- jsonFilePath = _path["default"].join(photosDir, "senateurs.json");
253
- _fsExtra["default"].writeFileSync(jsonFilePath, JSON.stringify(photoBySenmat, null, 2));
254
- case 56:
255
- case "end":
256
- return _context.stop();
257
- }
258
- }, _callee, null, [[13, 39, 42, 45], [24, 29]]);
259
- }));
260
- return _retrievePhotosSenateurs.apply(this, arguments);
102
+ }
103
+ else {
104
+ if (!options["silent"]) {
105
+ console.warn(`Missing photo for ${sen.senprenomuse} ${sen.sennomuse}: using blank image`);
106
+ }
107
+ fs_extra_1.default.copyFileSync(missingPhotoFilePath, path_1.default.join(photosDir, `${photoStem}_155x225.jpg`));
108
+ }
109
+ }
110
+ // Create a mosaic of photos.
111
+ if (!options["silent"]) {
112
+ console.log("Creating mosaic of photos…");
113
+ }
114
+ const photoBySenmat = {};
115
+ const rowsFilenames = [];
116
+ for (let senIndex = 0, rowIndex = 0; senIndex < sens.length; senIndex += 25, rowIndex++) {
117
+ const row = sens.slice(senIndex, senIndex + 25);
118
+ const photosFilenames = [];
119
+ for (const [columnIndex, sen] of row.entries()) {
120
+ const photoStem = `${(0, strings_1.slugify)(sen.sennomuse, "_")}_${(0, strings_1.slugify)(sen.senprenomuse, "_")}${(0, strings_1.slugify)(sen.senmat, "_")}`;
121
+ const photoFilename = `${photoStem}_155x225.jpg`;
122
+ photosFilenames.push(photoFilename);
123
+ photoBySenmat[sen.senmat] = {
124
+ chemin: `photos_senateurs/${photoFilename}`,
125
+ cheminMosaique: "photos_senateurs/senateurs.jpg",
126
+ hauteur: 225,
127
+ largeur: 155,
128
+ xMosaique: columnIndex * 155,
129
+ yMosaique: rowIndex * 225,
130
+ };
131
+ }
132
+ const rowFilename = `row-${rowIndex}.jpg`;
133
+ (0, child_process_1.execSync)(`gm convert ${photosFilenames.join(" ")} +append ${rowFilename}`, {
134
+ cwd: photosDir,
135
+ });
136
+ rowsFilenames.push(rowFilename);
137
+ }
138
+ (0, child_process_1.execSync)(`gm convert ${rowsFilenames.join(" ")} -append senateurs.jpg`, {
139
+ cwd: photosDir,
140
+ });
141
+ for (const rowFilename of rowsFilenames) {
142
+ fs_extra_1.default.unlinkSync(path_1.default.join(photosDir, rowFilename));
143
+ }
144
+ if (!options["silent"]) {
145
+ console.log("Creating JSON file containing informations on all pictures…");
146
+ }
147
+ const jsonFilePath = path_1.default.join(photosDir, "senateurs.json");
148
+ fs_extra_1.default.writeFileSync(jsonFilePath, JSON.stringify(photoBySenmat, null, 2));
261
149
  }
262
- retrievePhotosSenateurs().then(function () {
263
- return process.exit(0);
264
- })["catch"](function (error) {
265
- console.log(error);
266
- process.exit(1);
150
+ retrievePhotosSenateurs()
151
+ .then(() => process.exit(0))
152
+ .catch((error) => {
153
+ console.log(error);
154
+ process.exit(1);
267
155
  });
268
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9jb21tYW5kTGluZUFyZ3MiLCJfZnNFeHRyYSIsIl9wYXRoIiwiX3NlbnMiLCJfZGF0YWJhc2VzIiwiX2ZpZWxkcyIsIl9zdHJpbmdzIiwiZSIsIl9fZXNNb2R1bGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJBcnJheSIsImlzQXJyYXkiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9uIiwiRiIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJmcm9tIiwidGVzdCIsImFzeW5jR2VuZXJhdG9yU3RlcCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJfbmV4dCIsIl90aHJvdyIsIm9wdGlvbnNEZWZpbml0aW9ucyIsImFsaWFzIiwiaGVscCIsIkJvb2xlYW4iLCJkZWZhdWx0T3B0aW9uIiwiU3RyaW5nIiwib3B0aW9ucyIsImNvbW1hbmRMaW5lQXJncyIsInJldHJpZXZlUGhvdG9zU2VuYXRldXJzIiwiX3JldHJpZXZlUGhvdG9zU2VuYXRldXJzIiwiX2NhbGxlZSIsImRhdGFEaXIiLCJkYiIsInNlbnMiLCJwaG90b3NEaXIiLCJtaXNzaW5nUGhvdG9GaWxlUGF0aCIsIl9pdGVyYXRvciIsIl9zdGVwIiwic2VuIiwicGhvdG9TdGVtIiwicGhvdG9GaWxlbmFtZSIsInBob3RvRmlsZVBhdGgiLCJwaG90b1RlbXBGaWxlbmFtZSIsInBob3RvVGVtcEZpbGVQYXRoIiwidXJsUGhvdG8iLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX3NlbjIiLCJfcGhvdG9TdGVtMiIsIl9waG90b0ZpbGVuYW1lMiIsIl9waG90b0ZpbGVQYXRoIiwicGhvdG9CeVNlbm1hdCIsInJvd3NGaWxlbmFtZXMiLCJzZW5JbmRleCIsInJvd0luZGV4Iiwicm93IiwicGhvdG9zRmlsZW5hbWVzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9zdGVwMyR2YWx1ZSIsImNvbHVtbkluZGV4IiwiX3NlbiIsIl9waG90b1N0ZW0iLCJfcGhvdG9GaWxlbmFtZSIsInJvd0ZpbGVuYW1lIiwiX2kiLCJfcm93c0ZpbGVuYW1lcyIsIl9yb3dGaWxlbmFtZSIsImpzb25GaWxlUGF0aCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJhc3NlcnQiLCJjaGVja0RhdGFiYXNlIiwiYW55IiwibWFwIiwicGFyc2VJbnRGaWVsZHMiLCJzZW5GaWVsZHNUb1BhcnNlSW50IiwidHJpbUZpZWxkc1JpZ2h0Iiwic2VuRmllbGRzVG9UcmltIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJmcyIsImVuc3VyZURpclN5bmMiLCJmZXRjaCIsImNvbmNhdCIsInNsdWdpZnkiLCJzZW5ub211c2UiLCJzZW5wcmVub211c2UiLCJzZW5tYXQiLCJzaWxlbnQiLCJjb25zb2xlIiwibG9nIiwiZXhlY1N5bmMiLCJjd2QiLCJlbnYiLCJwcm9jZXNzIiwiZW5jb2RpbmciLCJyZW5hbWVTeW5jIiwidDAiLCJzdGF0dXMiLCJlcnJvciIsInQxIiwiZXhpc3RzU3luYyIsIndhcm4iLCJjb3B5RmlsZVN5bmMiLCJlcnIiLCJlbnRyaWVzIiwiY2hlbWluIiwiY2hlbWluTW9zYWlxdWUiLCJoYXV0ZXVyIiwibGFyZ2V1ciIsInhNb3NhaXF1ZSIsInlNb3NhaXF1ZSIsInVubGlua1N5bmMiLCJ3cml0ZUZpbGVTeW5jIiwiSlNPTiIsInN0cmluZ2lmeSIsImV4aXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9yZXRyaWV2ZV9zZW5hdGV1cnNfcGhvdG9zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCJcbmltcG9ydCBjb21tYW5kTGluZUFyZ3MgZnJvbSBcImNvbW1hbmQtbGluZS1hcmdzXCJcbmltcG9ydCBmcyBmcm9tIFwiZnMtZXh0cmFcIlxuLy8gaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbi8vIGltcG9ydCBzdHJlYW0gZnJvbSBcInN0cmVhbVwiXG4vLyBpbXBvcnQgdXRpbCBmcm9tIFwidXRpbFwiXG5cbmltcG9ydCB7IFBob3RvLCBTZW4sIHNlbkZpZWxkc1RvUGFyc2VJbnQsIHNlbkZpZWxkc1RvVHJpbSB9IGZyb20gXCIuLi90eXBlcy9zZW5zXCJcbmltcG9ydCB7IGNoZWNrRGF0YWJhc2UgfSBmcm9tIFwiLi4vZGF0YWJhc2VzXCJcbmltcG9ydCB7IHBhcnNlSW50RmllbGRzLCB0cmltRmllbGRzUmlnaHQgfSBmcm9tIFwiLi4vZmllbGRzXCJcbmltcG9ydCB7IHNsdWdpZnkgfSBmcm9tIFwiLi4vc3RyaW5nc1wiXG5cbmNvbnN0IG9wdGlvbnNEZWZpbml0aW9ucyA9IFtcbiAge1xuICAgIGFsaWFzOiBcImZcIixcbiAgICBoZWxwOiBcImZldGNoIHPDqW5hdGV1cnMnIHBpY3R1cmVzIGluc3RlYWQgb2YgcmV0cmlldmluZyB0aGVtIGZyb20gZmlsZXNcIixcbiAgICBuYW1lOiBcImZldGNoXCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInNcIixcbiAgICBoZWxwOiBcImRvbid0IGxvZyBhbnl0aGluZ1wiLFxuICAgIG5hbWU6IFwic2lsZW50XCIsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGRlZmF1bHRPcHRpb246IHRydWUsXG4gICAgaGVscDogXCJkaXJlY3RvcnkgY29udGFpbmluZyBTw6luYXQgb3BlbiBkYXRhIGZpbGVzXCIsXG4gICAgbmFtZTogXCJkYXRhRGlyXCIsXG4gICAgdHlwZTogU3RyaW5nLFxuICB9LFxuXVxuY29uc3Qgb3B0aW9ucyA9IGNvbW1hbmRMaW5lQXJncyhvcHRpb25zRGVmaW5pdGlvbnMpXG4vLyBjb25zdCBwaXBlbGluZSA9IHV0aWwucHJvbWlzaWZ5KHN0cmVhbS5waXBlbGluZSlcblxuYXN5bmMgZnVuY3Rpb24gcmV0cmlldmVQaG90b3NTZW5hdGV1cnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRhdGFEaXIgPSBvcHRpb25zLmRhdGFEaXJcbiAgYXNzZXJ0KGRhdGFEaXIsIFwiTWlzc2luZyBhcmd1bWVudDogZGF0YSBkaXJlY3RvcnlcIilcblxuICBjb25zdCBkYiA9IGF3YWl0IGNoZWNrRGF0YWJhc2UoXCJzZW5zXCIpXG5cbiAgY29uc3Qgc2VuczogU2VuW10gPSAoXG4gICAgYXdhaXQgZGIuYW55KFxuICAgICAgYFxuICAgICAgU0VMRUNUICpcbiAgICAgIEZST00gc2VuXG4gICAgICBXSEVSRSBldGFzZW5jb2QgPSAnQUNUSUYnXG4gICAgYCxcbiAgICApXG4gICkubWFwKChzZW46IFNlbikgPT5cbiAgICBwYXJzZUludEZpZWxkcyhzZW5GaWVsZHNUb1BhcnNlSW50LCB0cmltRmllbGRzUmlnaHQoc2VuRmllbGRzVG9UcmltLCBzZW4pKSxcbiAgKVxuXG4gIGNvbnN0IHBob3Rvc0RpciA9IHBhdGguam9pbihkYXRhRGlyLCBcInBob3Rvc19zZW5hdGV1cnNcIilcbiAgY29uc3QgbWlzc2luZ1Bob3RvRmlsZVBhdGggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcImltYWdlc1wiLCBcInRyYW5zcGFyZW50XzE1NXgyMjUuanBnXCIpXG5cbiAgLy8gRG93bmxvYWQgcGhvdG9zLlxuICBmcy5lbnN1cmVEaXJTeW5jKHBob3Rvc0RpcilcbiAgaWYgKG9wdGlvbnMuZmV0Y2gpIHtcbiAgICBmb3IgKGNvbnN0IHNlbiBvZiBzZW5zKSB7XG4gICAgICBjb25zdCBwaG90b1N0ZW0gPSBgJHtzbHVnaWZ5KHNlbi5zZW5ub211c2UsIFwiX1wiKX1fJHtzbHVnaWZ5KFxuICAgICAgICBzZW4uc2VucHJlbm9tdXNlLFxuICAgICAgICBcIl9cIixcbiAgICAgICl9JHtzbHVnaWZ5KHNlbi5zZW5tYXQsIFwiX1wiKX1gXG4gICAgICBjb25zdCBwaG90b0ZpbGVuYW1lID0gcGhvdG9TdGVtICsgXCIuanBnXCJcbiAgICAgIGNvbnN0IHBob3RvRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBwaG90b0ZpbGVuYW1lKVxuICAgICAgY29uc3QgcGhvdG9UZW1wRmlsZW5hbWUgPSBwaG90b1N0ZW0gKyBcIl90ZW1wLmpwZ1wiXG4gICAgICBjb25zdCBwaG90b1RlbXBGaWxlUGF0aCA9IHBhdGguam9pbihwaG90b3NEaXIsIHBob3RvVGVtcEZpbGVuYW1lKVxuICAgICAgY29uc3QgdXJsUGhvdG8gPSBgaHR0cHM6Ly93d3cuc2VuYXQuZnIvc2VuaW1nLyR7cGhvdG9GaWxlbmFtZX1gXG4gICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBMb2FkaW5nIHBob3RvICR7dXJsUGhvdG99IGZvciAke3Nlbi5zZW5wcmVub211c2V9ICR7c2VuLnNlbm5vbXVzZX3igKZgLFxuICAgICAgICApXG4gICAgICB9XG4gICAgICAvLyBGZXRjaCBmYWlscyB3aXRoIE9wZW5TU0wgZXJyb3I6IGRoIGtleSB0b28gc21hbGwuXG4gICAgICAvLyAoc28gZG9lcyBcImN1cmxcIikuXG4gICAgICAvLyBmb3IgKGxldCByZXRyaWVzID0gMDsgcmV0cmllcyA8IDM7IHJldHJpZXMrKykge1xuICAgICAgLy8gICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybFBob3RvKVxuICAgICAgLy8gICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgIC8vICAgICBhd2FpdCBwaXBlbGluZShyZXNwb25zZS5ib2R5LCBmcy5jcmVhdGVXcml0ZVN0cmVhbShwaG90b1RlbXBGaWxlUGF0aCkpXG4gICAgICAvLyAgICAgZnMucmVuYW1lU3luYyhwaG90b1RlbXBGaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgIC8vICAgICBicmVha1xuICAgICAgLy8gICB9XG4gICAgICAvLyAgIGlmIChyZXRyaWVzID49IDIpIHtcbiAgICAgIC8vICAgICBjb25zb2xlLndhcm4oYEZldGNoIGZhaWxlZDogJHt1cmxQaG90b30gKCR7c2VuLnNlbnByZW5vbXVzZX0gJHtzZW4uc2Vubm9tdXNlfSlgKVxuICAgICAgLy8gICAgIGNvbnNvbGUud2FybihyZXNwb25zZS5zdGF0dXMsIHJlc3BvbnNlLnN0YXR1c1RleHQpXG4gICAgICAvLyAgICAgY29uc29sZS53YXJuKGF3YWl0IHJlc3BvbnNlLnRleHQoKSlcbiAgICAgIC8vICAgICBpZiAoZnMuZXhpc3RzU3luYyhwaG90b0ZpbGVQYXRoKSkge1xuICAgICAgLy8gICAgICAgY29uc29sZS53YXJuKFwiICA9PiBSZXVzaW5nIGV4aXN0aW5nIGltYWdlXCIpXG4gICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAgIGNvbnNvbGUud2FybihcIiAgPT4gVXNpbmcgYmxhbmsgaW1hZ2VcIilcbiAgICAgIC8vICAgICAgIGZzLmNvcHlGaWxlU3luYyhtaXNzaW5nUGhvdG9GaWxlUGF0aCwgcGhvdG9GaWxlUGF0aClcbiAgICAgIC8vICAgICB9XG4gICAgICAvLyAgICAgYnJlYWtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgdHJ5IHtcbiAgICAgICAgZXhlY1N5bmMoYHdnZXQgLS1xdWlldCAtTyAke3Bob3RvVGVtcEZpbGVuYW1lfSAke3VybFBob3RvfWAsIHtcbiAgICAgICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICAgICAgICBlbnY6IHByb2Nlc3MuZW52LFxuICAgICAgICAgIGVuY29kaW5nOiBcInV0Zi04XCIsXG4gICAgICAgICAgLy8gc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgIH0pXG4gICAgICAgIGZzLnJlbmFtZVN5bmMocGhvdG9UZW1wRmlsZVBhdGgsIHBob3RvRmlsZVBhdGgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIGVycm9yICYmIFwic3RhdHVzXCIgaW4gZXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA4KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgVW5hYmxlIHRvIGxvYWQgcGhvdG8gZm9yICR7c2VuLnNlbnByZW5vbXVzZX0gJHtzZW4uc2Vubm9tdXNlfWApXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc2l6ZSBwaG90b3MgdG8gMTU1eDIyNSwgYmVjYXVzZSBzb21lIGhhdmVuJ3QgZXhhY3RseSB0aGlzIHNpemUuXG4gIGZvciAoY29uc3Qgc2VuIG9mIHNlbnMpIHtcbiAgICBjb25zdCBwaG90b1N0ZW0gPSBgJHtzbHVnaWZ5KHNlbi5zZW5ub211c2UsIFwiX1wiKX1fJHtzbHVnaWZ5KFxuICAgICAgc2VuLnNlbnByZW5vbXVzZSxcbiAgICAgIFwiX1wiLFxuICAgICl9JHtzbHVnaWZ5KHNlbi5zZW5tYXQsIFwiX1wiKX1gXG4gICAgY29uc3QgcGhvdG9GaWxlbmFtZSA9IHBob3RvU3RlbSArIFwiLmpwZ1wiXG4gICAgY29uc3QgcGhvdG9GaWxlUGF0aCA9IHBhdGguam9pbihwaG90b3NEaXIsIHBob3RvRmlsZW5hbWUpXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocGhvdG9GaWxlUGF0aCkpIHtcbiAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYFJlc2l6aW5nIHBob3RvICR7cGhvdG9TdGVtfSBmb3IgJHtzZW4uc2VucHJlbm9tdXNlfSAke3Nlbi5zZW5ub211c2V94oCmYCxcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBleGVjU3luYyhcbiAgICAgICAgYGdtIGNvbnZlcnQgLXJlc2l6ZSAxNTV4MjI1ISAke3Bob3RvU3RlbX0uanBnICR7cGhvdG9TdGVtfV8xNTV4MjI1LmpwZ2AsXG4gICAgICAgIHtcbiAgICAgICAgICBjd2Q6IHBob3Rvc0RpcixcbiAgICAgICAgfSxcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYE1pc3NpbmcgcGhvdG8gZm9yICR7c2VuLnNlbnByZW5vbXVzZX0gJHtzZW4uc2Vubm9tdXNlfTogdXNpbmcgYmxhbmsgaW1hZ2VgKVxuICAgICAgfVxuICAgICAgZnMuY29weUZpbGVTeW5jKG1pc3NpbmdQaG90b0ZpbGVQYXRoLCBwYXRoLmpvaW4ocGhvdG9zRGlyLCBgJHtwaG90b1N0ZW19XzE1NXgyMjUuanBnYCkpXG4gICAgfVxuICB9XG5cbiAgLy8gQ3JlYXRlIGEgbW9zYWljIG9mIHBob3Rvcy5cbiAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgIGNvbnNvbGUubG9nKFwiQ3JlYXRpbmcgbW9zYWljIG9mIHBob3Rvc+KAplwiKVxuICB9XG4gIGNvbnN0IHBob3RvQnlTZW5tYXQ6IHsgW3Nlbm1hdDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGNvbnN0IHJvd3NGaWxlbmFtZXM6IHN0cmluZ1tdID0gW11cbiAgZm9yIChcbiAgICBsZXQgc2VuSW5kZXggPSAwLCByb3dJbmRleCA9IDA7XG4gICAgc2VuSW5kZXggPCBzZW5zLmxlbmd0aDtcbiAgICBzZW5JbmRleCArPSAyNSwgcm93SW5kZXgrK1xuICApIHtcbiAgICBjb25zdCByb3cgPSBzZW5zLnNsaWNlKHNlbkluZGV4LCBzZW5JbmRleCArIDI1KVxuICAgIGNvbnN0IHBob3Rvc0ZpbGVuYW1lczogc3RyaW5nW10gPSBbXVxuICAgIGZvciAoY29uc3QgW2NvbHVtbkluZGV4LCBzZW5dIG9mIHJvdy5lbnRyaWVzKCkpIHtcbiAgICAgIGNvbnN0IHBob3RvU3RlbSA9IGAke3NsdWdpZnkoc2VuLnNlbm5vbXVzZSwgXCJfXCIpfV8ke3NsdWdpZnkoXG4gICAgICAgIHNlbi5zZW5wcmVub211c2UsXG4gICAgICAgIFwiX1wiLFxuICAgICAgKX0ke3NsdWdpZnkoc2VuLnNlbm1hdCwgXCJfXCIpfWBcbiAgICAgIGNvbnN0IHBob3RvRmlsZW5hbWUgPSBgJHtwaG90b1N0ZW19XzE1NXgyMjUuanBnYFxuICAgICAgcGhvdG9zRmlsZW5hbWVzLnB1c2gocGhvdG9GaWxlbmFtZSlcbiAgICAgIHBob3RvQnlTZW5tYXRbc2VuLnNlbm1hdF0gPSB7XG4gICAgICAgIGNoZW1pbjogYHBob3Rvc19zZW5hdGV1cnMvJHtwaG90b0ZpbGVuYW1lfWAsXG4gICAgICAgIGNoZW1pbk1vc2FpcXVlOiBcInBob3Rvc19zZW5hdGV1cnMvc2VuYXRldXJzLmpwZ1wiLFxuICAgICAgICBoYXV0ZXVyOiAyMjUsXG4gICAgICAgIGxhcmdldXI6IDE1NSxcbiAgICAgICAgeE1vc2FpcXVlOiBjb2x1bW5JbmRleCAqIDE1NSxcbiAgICAgICAgeU1vc2FpcXVlOiByb3dJbmRleCAqIDIyNSxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgcm93RmlsZW5hbWUgPSBgcm93LSR7cm93SW5kZXh9LmpwZ2BcbiAgICBleGVjU3luYyhgZ20gY29udmVydCAke3Bob3Rvc0ZpbGVuYW1lcy5qb2luKFwiIFwiKX0gK2FwcGVuZCAke3Jvd0ZpbGVuYW1lfWAsIHtcbiAgICAgIGN3ZDogcGhvdG9zRGlyLFxuICAgIH0pXG4gICAgcm93c0ZpbGVuYW1lcy5wdXNoKHJvd0ZpbGVuYW1lKVxuICB9XG4gIGV4ZWNTeW5jKGBnbSBjb252ZXJ0ICR7cm93c0ZpbGVuYW1lcy5qb2luKFwiIFwiKX0gLWFwcGVuZCBzZW5hdGV1cnMuanBnYCwge1xuICAgIGN3ZDogcGhvdG9zRGlyLFxuICB9KVxuICBmb3IgKGNvbnN0IHJvd0ZpbGVuYW1lIG9mIHJvd3NGaWxlbmFtZXMpIHtcbiAgICBmcy51bmxpbmtTeW5jKHBhdGguam9pbihwaG90b3NEaXIsIHJvd0ZpbGVuYW1lKSlcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhcIkNyZWF0aW5nIEpTT04gZmlsZSBjb250YWluaW5nIGluZm9ybWF0aW9ucyBvbiBhbGwgcGljdHVyZXPigKZcIilcbiAgfVxuICBjb25zdCBqc29uRmlsZVBhdGggPSBwYXRoLmpvaW4ocGhvdG9zRGlyLCBcInNlbmF0ZXVycy5qc29uXCIpXG4gIGZzLndyaXRlRmlsZVN5bmMoanNvbkZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShwaG90b0J5U2VubWF0LCBudWxsLCAyKSlcbn1cblxucmV0cmlldmVQaG90b3NTZW5hdGV1cnMoKVxuICAudGhlbigoKSA9PiBwcm9jZXNzLmV4aXQoMCkpXG4gIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICBwcm9jZXNzLmV4aXQoMSlcbiAgfSlcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxnQkFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSixzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUksS0FBQSxHQUFBTCxzQkFBQSxDQUFBQyxPQUFBO0FBSUEsSUFBQUssS0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sVUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsUUFBQSxHQUFBUixPQUFBO0FBQW9D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
@@ -0,0 +1,44 @@
1
+ export declare const categoriesOption: {
2
+ alias: string;
3
+ defaultValue: string[];
4
+ help: string;
5
+ multiple: boolean;
6
+ name: string;
7
+ type: StringConstructor;
8
+ };
9
+ export declare const dataDirDefaultOption: {
10
+ defaultOption: boolean;
11
+ help: string;
12
+ name: string;
13
+ type: StringConstructor;
14
+ };
15
+ export declare const silentOption: {
16
+ alias: string;
17
+ help: string;
18
+ name: string;
19
+ type: BooleanConstructor;
20
+ };
21
+ export declare const verboseOption: {
22
+ alias: string;
23
+ help: string;
24
+ name: string;
25
+ type: BooleanConstructor;
26
+ };
27
+ export declare const commonOptions: ({
28
+ alias: string;
29
+ defaultValue: string[];
30
+ help: string;
31
+ multiple: boolean;
32
+ name: string;
33
+ type: StringConstructor;
34
+ } | {
35
+ defaultOption: boolean;
36
+ help: string;
37
+ name: string;
38
+ type: StringConstructor;
39
+ } | {
40
+ alias: string;
41
+ help: string;
42
+ name: string;
43
+ type: BooleanConstructor;
44
+ })[];
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.commonOptions = exports.verboseOption = exports.silentOption = exports.dataDirDefaultOption = exports.categoriesOption = void 0;
4
+ exports.categoriesOption = {
5
+ alias: "k",
6
+ defaultValue: ["All"],
7
+ help: "categories of datasets to reorganize",
8
+ multiple: true,
9
+ name: "categories",
10
+ type: String,
11
+ };
12
+ exports.dataDirDefaultOption = {
13
+ defaultOption: true,
14
+ help: "directory containing Sénat open data files",
15
+ name: "dataDir",
16
+ type: String,
17
+ };
18
+ exports.silentOption = {
19
+ alias: "s",
20
+ help: "don't log anything",
21
+ name: "silent",
22
+ type: Boolean,
23
+ };
24
+ exports.verboseOption = {
25
+ alias: "v",
26
+ help: "verbose logs",
27
+ name: "verbose",
28
+ type: Boolean,
29
+ };
30
+ exports.commonOptions = [
31
+ exports.categoriesOption,
32
+ exports.dataDirDefaultOption,
33
+ exports.silentOption,
34
+ exports.verboseOption,
35
+ ];
@@ -0,0 +1,3 @@
1
+ export declare function isOptionEmptyOrHasValue(option: string, value: string): boolean;
2
+ export declare function ensureAndClearDir(path: string): void;
3
+ export declare function fetchWithRetry(url: string, retries?: number, backoff?: number): Promise<Response>;