@tricoteuses/senat 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) 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/inserters.d.ts +5 -1
  11. package/lib/inserters.js +22 -3
  12. package/lib/inserters.mjs +19 -3
  13. package/lib/inserters.ts +27 -2
  14. package/lib/model/ameli.d.ts +4 -0
  15. package/lib/model/ameli.js +167 -0
  16. package/lib/model/ameli.mjs +57 -0
  17. package/lib/model/ameli.ts +86 -0
  18. package/lib/model/debats.d.ts +4 -0
  19. package/lib/model/debats.js +123 -0
  20. package/lib/model/debats.mjs +43 -0
  21. package/lib/model/debats.ts +68 -0
  22. package/lib/model/dosleg.d.ts +29 -0
  23. package/lib/model/dosleg.js +840 -0
  24. package/lib/model/dosleg.mjs +337 -0
  25. package/lib/model/dosleg.ts +558 -0
  26. package/lib/model/index.d.ts +5 -0
  27. package/lib/model/index.js +48 -0
  28. package/lib/model/index.mjs +5 -0
  29. package/lib/model/index.ts +11 -0
  30. package/lib/model/questions.d.ts +2 -0
  31. package/lib/model/questions.js +52 -0
  32. package/lib/model/questions.mjs +8 -0
  33. package/lib/model/questions.ts +14 -0
  34. package/lib/model/sens.d.ts +2 -0
  35. package/lib/model/sens.js +57 -0
  36. package/lib/model/sens.mjs +9 -0
  37. package/lib/model/sens.ts +18 -0
  38. package/lib/model/util.d.ts +1 -0
  39. package/lib/model/util.js +60 -0
  40. package/lib/model/util.mjs +10 -0
  41. package/lib/model/util.ts +16 -0
  42. package/lib/raw_types/questions.d.ts +226 -2
  43. package/lib/raw_types/questions.js +18 -5
  44. package/lib/raw_types/questions.mjs +1 -8
  45. package/lib/raw_types/questions.ts +242 -2
  46. package/lib/scripts/convert_data.d.ts +1 -0
  47. package/lib/scripts/convert_data.js +284 -0
  48. package/lib/scripts/convert_data.mjs +146 -0
  49. package/lib/scripts/convert_data.ts +182 -0
  50. package/lib/scripts/fix_db.d.ts +1 -0
  51. package/lib/scripts/fix_db.js +144 -0
  52. package/lib/scripts/fix_db.mjs +64 -0
  53. package/lib/scripts/fix_db.ts +75 -0
  54. package/lib/scripts/retrieve_open_data.js +20 -15
  55. package/lib/scripts/retrieve_open_data.mjs +20 -17
  56. package/lib/scripts/retrieve_open_data.ts +26 -22
  57. package/lib/scripts/retrieve_textes.js +4 -2
  58. package/lib/scripts/retrieve_textes.mjs +3 -1
  59. package/lib/scripts/retrieve_textes.ts +6 -4
  60. package/lib/types/questions.d.ts +2 -0
  61. package/lib/types/questions.js +13 -1
  62. package/lib/types/questions.mjs +1 -1
  63. package/lib/types/questions.ts +3 -0
  64. package/package.json +1 -1
@@ -0,0 +1,182 @@
1
+ import fs from 'fs-extra'
2
+ import path from 'path'
3
+ import commandLineArgs from 'command-line-args'
4
+
5
+ import { datasets, EnabledDatasets, getEnabledDatasets, } from '../datasets'
6
+ import {
7
+ Aggregator,
8
+ allFollows,
9
+ getAllLois,
10
+ getAllQuestions,
11
+ getAllSens
12
+ } from '../model'
13
+ import {
14
+ insertLoiReferences,
15
+ insertQuestionReferences,
16
+ insertSenReferences
17
+ } from '../inserters'
18
+
19
+ const optionsDefinitions = [
20
+ {
21
+ alias: 'k',
22
+ defaultValue: ['All'],
23
+ help: 'categories of datasets to reorganize',
24
+ multiple: true,
25
+ name: 'categories',
26
+ type: String,
27
+ },
28
+ {
29
+ alias: 's',
30
+ help: 'don\'t log anything',
31
+ name: 'silent',
32
+ type: Boolean,
33
+ },
34
+ {
35
+ alias: "v",
36
+ help: "verbose logs",
37
+ name: "verbose",
38
+ type: Boolean,
39
+ },
40
+ {
41
+ defaultOption: true,
42
+ help: 'directory containing Sénat open data files',
43
+ name: 'dataDir',
44
+ type: String,
45
+ },
46
+ ]
47
+ const options = commandLineArgs(optionsDefinitions)
48
+
49
+ const SIGNET_STRUCTURE_REGEXP = /^(?<type>[a-z]+)(?<session>\d{2,4})-?(?<numTexte>\d+)?/
50
+
51
+ function ensureAndClearDir(path: string) {
52
+ if (!fs.existsSync(path)) {
53
+ fs.mkdirSync(path)
54
+ } else {
55
+ fs.emptyDirSync(path)
56
+ }
57
+ }
58
+
59
+ async function convertData() {
60
+ const enabledDatasets = getEnabledDatasets(options.categories)
61
+ const dataDir: string = options.dataDir
62
+
63
+ if (enabledDatasets & EnabledDatasets.DosLeg) {
64
+ const dataset = datasets.dosleg
65
+
66
+ if (!options.silent) {
67
+ console.log(`Converting database ${dataset.database} data into files…`)
68
+ }
69
+
70
+ const lois = await getAllLois()
71
+ const aggregator = new Aggregator(new Set(allFollows))
72
+ for (const loi of lois) {
73
+ aggregator.addLoi(loi)
74
+ }
75
+ if (options.verbose) {
76
+ console.log("Starting getting all the data…")
77
+ console.time("get all data")
78
+ }
79
+ await aggregator.getAll()
80
+ if (options.verbose) {
81
+ console.timeEnd("get all data")
82
+ }
83
+ const allData = aggregator.toJson()
84
+
85
+ const loiReorganizedRootDir = path.join(dataDir, dataset.database)
86
+ ensureAndClearDir(loiReorganizedRootDir)
87
+
88
+ for (const loi of lois) {
89
+ if (options.verbose) {
90
+ console.log(`Converting ${loi.signet} file…`)
91
+ }
92
+
93
+ insertLoiReferences(loi, allData, {})
94
+
95
+ let loiFileName = `${loi.loicod}.json`
96
+ let loiReorganizedDir = path.join(loiReorganizedRootDir, loi.typloicod)
97
+ if (loi.signet) {
98
+ loiFileName = `${loi.signet}.json`
99
+ let signetParts = SIGNET_STRUCTURE_REGEXP.exec(loi.signet)?.groups
100
+ if (signetParts) {
101
+ const { session} = signetParts
102
+ loiReorganizedDir = path.join(loiReorganizedDir, session)
103
+ } else {
104
+ loiReorganizedDir = path.join(loiReorganizedDir, "non defini")
105
+ }
106
+ fs.ensureDirSync(loiReorganizedDir)
107
+ }
108
+
109
+ fs.writeJSONSync(path.join(loiReorganizedDir, loiFileName), loi, {spaces: 2})
110
+ }
111
+ }
112
+
113
+ if (enabledDatasets & EnabledDatasets.Questions) {
114
+ const dataset = datasets.questions
115
+
116
+ if (!options.silent) {
117
+ console.log(`Converting database ${dataset.database} data into files…`)
118
+ }
119
+
120
+ const questions = await getAllQuestions()
121
+ const aggregator = new Aggregator(new Set(allFollows))
122
+ for (const question of questions) {
123
+ aggregator.addQuestion(question)
124
+ }
125
+ await aggregator.getAll()
126
+ const allData = aggregator.toJson()
127
+
128
+ const questionReorganizedRootDir = path.join(dataDir, dataset.database)
129
+ ensureAndClearDir(questionReorganizedRootDir)
130
+
131
+ for (const question of questions) {
132
+ if (options.verbose) {
133
+ console.log(`Converting ${question.id} file…`)
134
+ }
135
+
136
+ insertQuestionReferences(question, allData, {})
137
+
138
+ const legislature = question.legislature ? question.legislature : 0
139
+ const questionReorganizedDir = path.join(questionReorganizedRootDir, String(legislature))
140
+ fs.ensureDirSync(questionReorganizedDir)
141
+ let questionFileName = `${question.reference}.json`
142
+ fs.writeJSONSync(path.join(questionReorganizedDir, questionFileName), question, {spaces: 2})
143
+ }
144
+ }
145
+
146
+ if (enabledDatasets & EnabledDatasets.Sens) {
147
+ const dataset = datasets.sens
148
+
149
+ if (!options.silent) {
150
+ console.log(`Converting database ${dataset.database} data into files…`)
151
+ }
152
+
153
+ const sens = await getAllSens()
154
+ const aggregator = new Aggregator(new Set(allFollows))
155
+ for (const sen of sens) {
156
+ aggregator.addSen(sen)
157
+ }
158
+ await aggregator.getAll()
159
+ const allData = aggregator.toJson()
160
+
161
+ const senReorganizedRootDir = path.join(dataDir, dataset.database)
162
+ ensureAndClearDir(senReorganizedRootDir)
163
+
164
+ for (const sen of sens) {
165
+ if (options.verbose) {
166
+ console.log(`Converting ${sen.senmat} file…`)
167
+ }
168
+
169
+ insertSenReferences(sen, allData, {})
170
+
171
+ let senFileName = `${sen.senmat}.json`
172
+ fs.writeJSONSync(path.join(senReorganizedRootDir, senFileName), sen, {spaces: 2})
173
+ }
174
+ }
175
+ }
176
+
177
+ convertData()
178
+ .then(() => process.exit(0))
179
+ .catch((error) => {
180
+ console.log(error)
181
+ process.exit(1)
182
+ })
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,144 @@
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-primitive.js");
8
+ require("core-js/modules/es.symbol.to-string-tag.js");
9
+ require("core-js/modules/es.array.filter.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.iterator.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-primitive.js");
17
+ require("core-js/modules/es.date.to-string.js");
18
+ require("core-js/modules/es.function.name.js");
19
+ require("core-js/modules/es.json.to-string-tag.js");
20
+ require("core-js/modules/es.math.to-string-tag.js");
21
+ require("core-js/modules/es.number.constructor.js");
22
+ require("core-js/modules/es.object.create.js");
23
+ require("core-js/modules/es.object.define-properties.js");
24
+ require("core-js/modules/es.object.define-property.js");
25
+ require("core-js/modules/es.object.get-own-property-descriptor.js");
26
+ require("core-js/modules/es.object.get-own-property-descriptors.js");
27
+ require("core-js/modules/es.object.get-prototype-of.js");
28
+ require("core-js/modules/es.object.keys.js");
29
+ require("core-js/modules/es.object.set-prototype-of.js");
30
+ require("core-js/modules/es.regexp.exec.js");
31
+ require("core-js/modules/es.regexp.to-string.js");
32
+ require("core-js/modules/es.string.iterator.js");
33
+ require("core-js/modules/web.dom-collections.for-each.js");
34
+ require("core-js/modules/web.dom-collections.iterator.js");
35
+ 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); }
36
+ require("core-js/modules/es.array.concat.js");
37
+ require("core-js/modules/es.object.to-string.js");
38
+ require("core-js/modules/es.promise.js");
39
+ var _commandLineArgs = _interopRequireDefault(require("command-line-args"));
40
+ var _child_process = require("child_process");
41
+ var _assert = _interopRequireDefault(require("assert"));
42
+ var _model = require("../model");
43
+ var _datasets = require("../datasets");
44
+ var _config = _interopRequireDefault(require("../config"));
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 ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
51
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
52
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
53
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
54
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
55
+ 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); }
56
+ 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); }); }; }
57
+ var optionsDefinitions = [{
58
+ help: 'move database tables to public schema',
59
+ name: 'updateSchema',
60
+ type: Boolean
61
+ }, {
62
+ alias: 's',
63
+ help: 'don\'t log anything',
64
+ name: 'silent',
65
+ type: Boolean
66
+ }, {
67
+ alias: "v",
68
+ help: "verbose logs",
69
+ name: "verbose",
70
+ type: Boolean
71
+ }];
72
+ var options = (0, _commandLineArgs["default"])(optionsDefinitions);
73
+ function fixDatabase() {
74
+ return _fixDatabase.apply(this, arguments);
75
+ }
76
+ function _fixDatabase() {
77
+ _fixDatabase = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
78
+ var choosenDatasets, _i, _choosenDatasets, dataset, tables, _iterator, _step, table;
79
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
80
+ while (1) switch (_context.prev = _context.next) {
81
+ case 0:
82
+ process.env = _objectSpread(_objectSpread({}, process.env), {}, {
83
+ PGHOST: process.env.PGHOST || _config["default"].db.host,
84
+ PGPORT: process.env.PGPORT || _config["default"].db.port,
85
+ PGUSER: process.env.PGUSER || _config["default"].db.user,
86
+ PGPASSWORD: process.env.PGPASSWORD || _config["default"].db.password
87
+ });
88
+ (0, _assert["default"])(process.env.PGHOST && process.env.PGPORT && process.env.PGUSER && process.env.PGPASSWORD, 'Missing database configuration: environment variables PGHOST, PGPORT, PGUSER and PGPASSWORD or TRICOTEUSES_SENAT_DB_* in .env file');
89
+ choosenDatasets = [_datasets.datasets.questions];
90
+ _i = 0, _choosenDatasets = choosenDatasets;
91
+ case 4:
92
+ if (!(_i < _choosenDatasets.length)) {
93
+ _context.next = 16;
94
+ break;
95
+ }
96
+ dataset = _choosenDatasets[_i];
97
+ if (!options.silent) {
98
+ console.log("Fixing database ".concat(dataset.database, "\u2026"));
99
+ }
100
+ if (!(options.updateSchema && dataset.schema != "public")) {
101
+ _context.next = 13;
102
+ break;
103
+ }
104
+ _context.next = 10;
105
+ return (0, _model.getTables)(dataset.database, dataset.schema);
106
+ case 10:
107
+ tables = _context.sent;
108
+ _iterator = _createForOfIteratorHelper(tables);
109
+ try {
110
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
111
+ table = _step.value;
112
+ if (!options.silent) {
113
+ console.log("Move table ".concat(table, " from schema \"").concat(dataset.schema, "\" to \"public\"\u2026"));
114
+ }
115
+ (0, _child_process.execSync)("psql -d ".concat(dataset.database, " -c \"ALTER TABLE ").concat(dataset.schema, ".").concat(table, " SET SCHEMA public\""), {
116
+ env: process.env,
117
+ encoding: 'utf-8'
118
+ // stdio: ["ignore", "ignore", "pipe"],
119
+ });
120
+ }
121
+ } catch (err) {
122
+ _iterator.e(err);
123
+ } finally {
124
+ _iterator.f();
125
+ }
126
+ case 13:
127
+ _i++;
128
+ _context.next = 4;
129
+ break;
130
+ case 16:
131
+ case "end":
132
+ return _context.stop();
133
+ }
134
+ }, _callee);
135
+ }));
136
+ return _fixDatabase.apply(this, arguments);
137
+ }
138
+ fixDatabase().then(function () {
139
+ return process.exit(0);
140
+ })["catch"](function (error) {
141
+ console.log(error);
142
+ process.exit(1);
143
+ });
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY29tbWFuZExpbmVBcmdzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY2hpbGRfcHJvY2VzcyIsIl9hc3NlcnQiLCJfbW9kZWwiLCJfZGF0YXNldHMiLCJfY29uZmlnIiwiZSIsIl9fZXNNb2R1bGUiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwidCIsInIiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJuIiwiaGFzT3duUHJvcGVydHkiLCJvIiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImkiLCJTeW1ib2wiLCJhIiwiaXRlcmF0b3IiLCJjIiwiYXN5bmNJdGVyYXRvciIsInUiLCJ0b1N0cmluZ1RhZyIsImRlZmluZSIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIndyYXAiLCJHZW5lcmF0b3IiLCJjcmVhdGUiLCJDb250ZXh0IiwibWFrZUludm9rZU1ldGhvZCIsInRyeUNhdGNoIiwidHlwZSIsImFyZyIsImNhbGwiLCJoIiwibCIsImYiLCJzIiwieSIsIkdlbmVyYXRvckZ1bmN0aW9uIiwiR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUiLCJwIiwiZCIsImdldFByb3RvdHlwZU9mIiwidiIsInZhbHVlcyIsImciLCJkZWZpbmVJdGVyYXRvck1ldGhvZHMiLCJmb3JFYWNoIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwicmVzb2x2ZSIsIl9fYXdhaXQiLCJ0aGVuIiwiY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmciLCJFcnJvciIsImRvbmUiLCJtZXRob2QiLCJkZWxlZ2F0ZSIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJzZW50IiwiX3NlbnQiLCJkaXNwYXRjaEV4Y2VwdGlvbiIsImFicnVwdCIsIlR5cGVFcnJvciIsInJlc3VsdE5hbWUiLCJuZXh0IiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInB1c2giLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiaXNOYU4iLCJsZW5ndGgiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJtYXJrIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJhd3JhcCIsImFzeW5jIiwiUHJvbWlzZSIsImtleXMiLCJyZXZlcnNlIiwicG9wIiwicHJldiIsImNoYXJBdCIsInNsaWNlIiwic3RvcCIsInJ2YWwiLCJoYW5kbGUiLCJjb21wbGV0ZSIsImZpbmlzaCIsIl9jYXRjaCIsImRlbGVnYXRlWWllbGQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJmcm9tIiwidGVzdCIsIm93bktleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIl90b1Byb3BlcnR5S2V5IiwiX3RvUHJpbWl0aXZlIiwidG9QcmltaXRpdmUiLCJTdHJpbmciLCJOdW1iZXIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9uZXh0IiwiX3Rocm93Iiwib3B0aW9uc0RlZmluaXRpb25zIiwiaGVscCIsIkJvb2xlYW4iLCJhbGlhcyIsIm9wdGlvbnMiLCJjb21tYW5kTGluZUFyZ3MiLCJmaXhEYXRhYmFzZSIsIl9maXhEYXRhYmFzZSIsIl9jYWxsZWUiLCJjaG9vc2VuRGF0YXNldHMiLCJfaSIsIl9jaG9vc2VuRGF0YXNldHMiLCJkYXRhc2V0IiwidGFibGVzIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJ0YWJsZSIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcm9jZXNzIiwiZW52IiwiUEdIT1NUIiwiY29uZmlnIiwiZGIiLCJob3N0IiwiUEdQT1JUIiwicG9ydCIsIlBHVVNFUiIsInVzZXIiLCJQR1BBU1NXT1JEIiwicGFzc3dvcmQiLCJhc3NlcnQiLCJkYXRhc2V0cyIsInF1ZXN0aW9ucyIsInNpbGVudCIsImNvbnNvbGUiLCJsb2ciLCJjb25jYXQiLCJkYXRhYmFzZSIsInVwZGF0ZVNjaGVtYSIsInNjaGVtYSIsImdldFRhYmxlcyIsImV4ZWNTeW5jIiwiZW5jb2RpbmciLCJlcnIiLCJleGl0IiwiZXJyb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvc2NyaXB0cy9maXhfZGIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNvbW1hbmRMaW5lQXJncyBmcm9tICdjb21tYW5kLWxpbmUtYXJncydcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcbmltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0J1xuXG5pbXBvcnQgeyBnZXRUYWJsZXMgfSBmcm9tICcuLi9tb2RlbCdcbmltcG9ydCB7IERhdGFzZXQsIGRhdGFzZXRzIH0gZnJvbSAnLi4vZGF0YXNldHMnXG5pbXBvcnQgY29uZmlnIGZyb20gJy4uL2NvbmZpZydcblxuY29uc3Qgb3B0aW9uc0RlZmluaXRpb25zID0gW1xuICB7XG4gICAgaGVscDogJ21vdmUgZGF0YWJhc2UgdGFibGVzIHRvIHB1YmxpYyBzY2hlbWEnLFxuICAgIG5hbWU6ICd1cGRhdGVTY2hlbWEnLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG4gIHtcbiAgICBhbGlhczogJ3MnLFxuICAgIGhlbHA6ICdkb25cXCd0IGxvZyBhbnl0aGluZycsXG4gICAgbmFtZTogJ3NpbGVudCcsXG4gICAgdHlwZTogQm9vbGVhbixcbiAgfSxcbiAge1xuICAgIGFsaWFzOiBcInZcIixcbiAgICBoZWxwOiBcInZlcmJvc2UgbG9nc1wiLFxuICAgIG5hbWU6IFwidmVyYm9zZVwiLFxuICAgIHR5cGU6IEJvb2xlYW4sXG4gIH0sXG5dXG5jb25zdCBvcHRpb25zID0gY29tbWFuZExpbmVBcmdzKG9wdGlvbnNEZWZpbml0aW9ucylcblxuYXN5bmMgZnVuY3Rpb24gZml4RGF0YWJhc2UgKCkge1xuICBwcm9jZXNzLmVudiA9IHtcbiAgICAuLi5wcm9jZXNzLmVudixcbiAgICBQR0hPU1Q6IHByb2Nlc3MuZW52LlBHSE9TVCB8fCBjb25maWcuZGIuaG9zdCxcbiAgICBQR1BPUlQ6IHByb2Nlc3MuZW52LlBHUE9SVCB8fCBjb25maWcuZGIucG9ydCxcbiAgICBQR1VTRVI6IHByb2Nlc3MuZW52LlBHVVNFUiB8fCBjb25maWcuZGIudXNlcixcbiAgICBQR1BBU1NXT1JEOiBwcm9jZXNzLmVudi5QR1BBU1NXT1JEIHx8IGNvbmZpZy5kYi5wYXNzd29yZFxuICB9XG4gIGFzc2VydChwcm9jZXNzLmVudi5QR0hPU1RcbiAgICAmJiBwcm9jZXNzLmVudi5QR1BPUlRcbiAgICAmJiBwcm9jZXNzLmVudi5QR1VTRVJcbiAgICAmJiBwcm9jZXNzLmVudi5QR1BBU1NXT1JELFxuICAgICdNaXNzaW5nIGRhdGFiYXNlIGNvbmZpZ3VyYXRpb246IGVudmlyb25tZW50IHZhcmlhYmxlcyBQR0hPU1QsIFBHUE9SVCwgUEdVU0VSIGFuZCBQR1BBU1NXT1JEIG9yIFRSSUNPVEVVU0VTX1NFTkFUX0RCXyogaW4gLmVudiBmaWxlJ1xuICApXG5cbiAgY29uc3QgY2hvb3NlbkRhdGFzZXRzOiBEYXRhc2V0W10gPSBbZGF0YXNldHMucXVlc3Rpb25zXVxuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgY2hvb3NlbkRhdGFzZXRzKSB7XG4gICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgY29uc29sZS5sb2coYEZpeGluZyBkYXRhYmFzZSAke2RhdGFzZXQuZGF0YWJhc2V94oCmYClcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy51cGRhdGVTY2hlbWEgJiYgZGF0YXNldC5zY2hlbWEgIT0gXCJwdWJsaWNcIikge1xuICAgICAgY29uc3QgdGFibGVzID0gYXdhaXQgZ2V0VGFibGVzKGRhdGFzZXQuZGF0YWJhc2UsIGRhdGFzZXQuc2NoZW1hKVxuICAgICAgZm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBNb3ZlIHRhYmxlICR7dGFibGV9IGZyb20gc2NoZW1hIFwiJHtkYXRhc2V0LnNjaGVtYX1cIiB0byBcInB1YmxpY1wi4oCmYClcbiAgICAgICAgfVxuICAgICAgICBleGVjU3luYyhcbiAgICAgICAgICBgcHNxbCAtZCAke2RhdGFzZXQuZGF0YWJhc2V9IC1jIFwiQUxURVIgVEFCTEUgJHtkYXRhc2V0LnNjaGVtYX0uJHt0YWJsZX0gU0VUIFNDSEVNQSBwdWJsaWNcImAsXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW52OiBwcm9jZXNzLmVudixcbiAgICAgICAgICAgIGVuY29kaW5nOiAndXRmLTgnLFxuICAgICAgICAgICAgLy8gc3RkaW86IFtcImlnbm9yZVwiLCBcImlnbm9yZVwiLCBcInBpcGVcIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5maXhEYXRhYmFzZSgpXG4gIC50aGVuKCgpID0+IHByb2Nlc3MuZXhpdCgwKSlcbiAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIHByb2Nlc3MuZXhpdCgxKVxuICB9KVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLGdCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxjQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBRyxNQUFB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
@@ -0,0 +1,64 @@
1
+ import commandLineArgs from 'command-line-args';
2
+ import { execSync } from 'child_process';
3
+ import assert from 'assert';
4
+ import { getTables } from '../model';
5
+ import { datasets } from '../datasets';
6
+ import config from '../config';
7
+ const optionsDefinitions = [
8
+ {
9
+ help: 'move database tables to public schema',
10
+ name: 'updateSchema',
11
+ type: Boolean,
12
+ },
13
+ {
14
+ alias: 's',
15
+ help: 'don\'t log anything',
16
+ name: 'silent',
17
+ type: Boolean,
18
+ },
19
+ {
20
+ alias: "v",
21
+ help: "verbose logs",
22
+ name: "verbose",
23
+ type: Boolean,
24
+ },
25
+ ];
26
+ const options = commandLineArgs(optionsDefinitions);
27
+ async function fixDatabase() {
28
+ process.env = {
29
+ ...process.env,
30
+ PGHOST: process.env.PGHOST || config.db.host,
31
+ PGPORT: process.env.PGPORT || config.db.port,
32
+ PGUSER: process.env.PGUSER || config.db.user,
33
+ PGPASSWORD: process.env.PGPASSWORD || config.db.password
34
+ };
35
+ assert(process.env.PGHOST
36
+ && process.env.PGPORT
37
+ && process.env.PGUSER
38
+ && process.env.PGPASSWORD, 'Missing database configuration: environment variables PGHOST, PGPORT, PGUSER and PGPASSWORD or TRICOTEUSES_SENAT_DB_* in .env file');
39
+ const choosenDatasets = [datasets.questions];
40
+ for (const dataset of choosenDatasets) {
41
+ if (!options.silent) {
42
+ console.log(`Fixing database ${dataset.database}…`);
43
+ }
44
+ if (options.updateSchema && dataset.schema != "public") {
45
+ const tables = await getTables(dataset.database, dataset.schema);
46
+ for (const table of tables) {
47
+ if (!options.silent) {
48
+ console.log(`Move table ${table} from schema "${dataset.schema}" to "public"…`);
49
+ }
50
+ execSync(`psql -d ${dataset.database} -c "ALTER TABLE ${dataset.schema}.${table} SET SCHEMA public"`, {
51
+ env: process.env,
52
+ encoding: 'utf-8',
53
+ // stdio: ["ignore", "ignore", "pipe"],
54
+ });
55
+ }
56
+ }
57
+ }
58
+ }
59
+ fixDatabase()
60
+ .then(() => process.exit(0))
61
+ .catch((error) => {
62
+ console.log(error);
63
+ process.exit(1);
64
+ });
@@ -0,0 +1,75 @@
1
+ import commandLineArgs from 'command-line-args'
2
+ import { execSync } from 'child_process'
3
+ import assert from 'assert'
4
+
5
+ import { getTables } from '../model'
6
+ import { Dataset, datasets } from '../datasets'
7
+ import config from '../config'
8
+
9
+ const optionsDefinitions = [
10
+ {
11
+ help: 'move database tables to public schema',
12
+ name: 'updateSchema',
13
+ type: Boolean,
14
+ },
15
+ {
16
+ alias: 's',
17
+ help: 'don\'t log anything',
18
+ name: 'silent',
19
+ type: Boolean,
20
+ },
21
+ {
22
+ alias: "v",
23
+ help: "verbose logs",
24
+ name: "verbose",
25
+ type: Boolean,
26
+ },
27
+ ]
28
+ const options = commandLineArgs(optionsDefinitions)
29
+
30
+ async function fixDatabase () {
31
+ process.env = {
32
+ ...process.env,
33
+ PGHOST: process.env.PGHOST || config.db.host,
34
+ PGPORT: process.env.PGPORT || config.db.port,
35
+ PGUSER: process.env.PGUSER || config.db.user,
36
+ PGPASSWORD: process.env.PGPASSWORD || config.db.password
37
+ }
38
+ assert(process.env.PGHOST
39
+ && process.env.PGPORT
40
+ && process.env.PGUSER
41
+ && process.env.PGPASSWORD,
42
+ 'Missing database configuration: environment variables PGHOST, PGPORT, PGUSER and PGPASSWORD or TRICOTEUSES_SENAT_DB_* in .env file'
43
+ )
44
+
45
+ const choosenDatasets: Dataset[] = [datasets.questions]
46
+ for (const dataset of choosenDatasets) {
47
+ if (!options.silent) {
48
+ console.log(`Fixing database ${dataset.database}…`)
49
+ }
50
+
51
+ if (options.updateSchema && dataset.schema != "public") {
52
+ const tables = await getTables(dataset.database, dataset.schema)
53
+ for (const table of tables) {
54
+ if (!options.silent) {
55
+ console.log(`Move table ${table} from schema "${dataset.schema}" to "public"…`)
56
+ }
57
+ execSync(
58
+ `psql -d ${dataset.database} -c "ALTER TABLE ${dataset.schema}.${table} SET SCHEMA public"`,
59
+ {
60
+ env: process.env,
61
+ encoding: 'utf-8',
62
+ // stdio: ["ignore", "ignore", "pipe"],
63
+ },
64
+ )
65
+ }
66
+ }
67
+ }
68
+ }
69
+
70
+ fixDatabase()
71
+ .then(() => process.exit(0))
72
+ .catch((error) => {
73
+ console.log(error)
74
+ process.exit(1)
75
+ })