@tricoteuses/senat 1.1.1 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. package/README.md +53 -15
  2. package/lib/aggregates.d.ts +4 -6
  3. package/lib/aggregates.mjs +908 -780
  4. package/lib/aggregates.ts +8 -122
  5. package/lib/data/legislatures.json +38 -0
  6. package/lib/databases.d.ts +9 -0
  7. package/lib/databases.js +41 -11
  8. package/lib/databases.mjs +32 -1
  9. package/lib/databases.ts +40 -1
  10. package/lib/fields.mjs +64 -18
  11. package/lib/index.d.ts +5 -6
  12. package/lib/index.js +8 -99
  13. package/lib/index.mjs +4 -6
  14. package/lib/index.ts +9 -26
  15. package/lib/inserters.d.ts +0 -4
  16. package/lib/inserters.mjs +461 -337
  17. package/lib/inserters.ts +0 -24
  18. package/lib/legislatures.json +38 -0
  19. package/lib/loaders.d.ts +64 -0
  20. package/lib/loaders.js +682 -0
  21. package/lib/loaders.mjs +158 -0
  22. package/lib/loaders.ts +271 -0
  23. package/lib/model/ameli.d.ts +105 -4
  24. package/lib/model/ameli.js +20 -160
  25. package/lib/model/ameli.mjs +84 -57
  26. package/lib/model/ameli.ts +94 -80
  27. package/lib/model/debats.d.ts +0 -4
  28. package/lib/model/debats.js +1 -122
  29. package/lib/model/debats.mjs +1 -43
  30. package/lib/model/debats.ts +0 -68
  31. package/lib/model/dosleg.d.ts +227 -29
  32. package/lib/model/dosleg.js +92 -832
  33. package/lib/model/dosleg.mjs +196 -337
  34. package/lib/model/dosleg.ts +213 -531
  35. package/lib/model/index.d.ts +4 -5
  36. package/lib/model/index.js +14 -15
  37. package/lib/model/index.mjs +4 -5
  38. package/lib/model/index.ts +8 -5
  39. package/lib/model/questions.d.ts +88 -2
  40. package/lib/model/questions.js +40 -45
  41. package/lib/model/questions.mjs +71 -8
  42. package/lib/model/questions.ts +90 -11
  43. package/lib/model/sens.d.ts +524 -2
  44. package/lib/model/sens.js +172 -49
  45. package/lib/model/sens.mjs +415 -9
  46. package/lib/model/sens.ts +514 -16
  47. package/lib/model/texte.d.ts +7 -0
  48. package/lib/model/texte.js +321 -0
  49. package/lib/model/texte.mjs +208 -0
  50. package/lib/model/texte.ts +229 -0
  51. package/lib/model/util.d.ts +7 -1
  52. package/lib/model/util.js +37 -53
  53. package/lib/model/util.mjs +19 -10
  54. package/lib/model/util.ts +30 -14
  55. package/lib/raw_types/ameli.d.ts +912 -538
  56. package/lib/raw_types/ameli.js +1 -39
  57. package/lib/raw_types/ameli.mjs +4 -1
  58. package/lib/raw_types/ameli.ts +947 -597
  59. package/lib/raw_types/debats.d.ts +204 -124
  60. package/lib/raw_types/debats.js +1 -18
  61. package/lib/raw_types/debats.mjs +4 -1
  62. package/lib/raw_types/debats.ts +218 -141
  63. package/lib/raw_types/dosleg.d.ts +3533 -2024
  64. package/lib/raw_types/dosleg.js +1 -92
  65. package/lib/raw_types/dosleg.mjs +4 -1
  66. package/lib/raw_types/dosleg.ts +3621 -2189
  67. package/lib/raw_types/questions.d.ts +404 -220
  68. package/lib/raw_types/questions.js +1 -18
  69. package/lib/raw_types/questions.mjs +4 -1
  70. package/lib/raw_types/questions.ts +404 -226
  71. package/lib/raw_types/sens.d.ts +4391 -2706
  72. package/lib/raw_types/sens.js +1 -108
  73. package/lib/raw_types/sens.mjs +4 -1
  74. package/lib/raw_types/sens.ts +4495 -2903
  75. package/lib/raw_types_kysely/ameli.d.ts +6 -0
  76. package/lib/raw_types_kysely/ameli.mjs +7 -0
  77. package/lib/raw_types_kysely/ameli.ts +6 -0
  78. package/lib/raw_types_kysely/debats.d.ts +6 -0
  79. package/lib/raw_types_kysely/debats.mjs +7 -0
  80. package/lib/raw_types_kysely/debats.ts +6 -0
  81. package/lib/raw_types_kysely/dosleg.d.ts +6 -0
  82. package/lib/raw_types_kysely/dosleg.mjs +7 -0
  83. package/lib/raw_types_kysely/dosleg.ts +6 -0
  84. package/lib/raw_types_kysely/questions.d.ts +6 -0
  85. package/lib/raw_types_kysely/questions.mjs +7 -0
  86. package/lib/raw_types_kysely/questions.ts +6 -0
  87. package/lib/raw_types_kysely/sens.d.ts +6 -0
  88. package/lib/raw_types_kysely/sens.mjs +7 -0
  89. package/lib/raw_types_kysely/sens.ts +6 -0
  90. package/lib/raw_types_kysely/texte.d.ts +45 -0
  91. package/lib/raw_types_kysely/texte.mjs +7 -0
  92. package/lib/raw_types_kysely/texte.ts +53 -0
  93. package/lib/raw_types_schemats/ameli.d.ts +541 -0
  94. package/lib/raw_types_schemats/ameli.js +45 -0
  95. package/lib/raw_types_schemats/ameli.mjs +2 -0
  96. package/lib/raw_types_schemats/ameli.ts +601 -0
  97. package/lib/raw_types_schemats/debats.d.ts +127 -0
  98. package/lib/raw_types_schemats/debats.js +24 -0
  99. package/lib/raw_types_schemats/debats.mjs +2 -0
  100. package/lib/raw_types_schemats/debats.ts +145 -0
  101. package/lib/raw_types_schemats/dosleg.d.ts +2029 -0
  102. package/lib/raw_types_schemats/dosleg.js +98 -0
  103. package/lib/raw_types_schemats/dosleg.mjs +2 -0
  104. package/lib/raw_types_schemats/dosleg.ts +2195 -0
  105. package/lib/raw_types_schemats/questions.d.ts +233 -0
  106. package/lib/raw_types_schemats/questions.js +24 -0
  107. package/lib/raw_types_schemats/questions.mjs +2 -0
  108. package/lib/raw_types_schemats/questions.ts +251 -0
  109. package/lib/raw_types_schemats/sens.d.ts +2709 -0
  110. package/lib/raw_types_schemats/sens.js +114 -0
  111. package/lib/raw_types_schemats/sens.mjs +2 -0
  112. package/lib/raw_types_schemats/sens.ts +2907 -0
  113. package/lib/scripts/convert_data.js +574 -215
  114. package/lib/scripts/convert_data.mjs +134 -99
  115. package/lib/scripts/convert_data.ts +173 -112
  116. package/lib/scripts/datautil.d.ts +5 -0
  117. package/lib/scripts/datautil.js +64 -0
  118. package/lib/scripts/datautil.mjs +16 -0
  119. package/lib/scripts/datautil.ts +19 -0
  120. package/lib/scripts/parse_textes.js +132 -0
  121. package/lib/scripts/parse_textes.mjs +46 -0
  122. package/lib/scripts/parse_textes.ts +65 -0
  123. package/lib/scripts/retrieve_documents.d.ts +1 -0
  124. package/lib/scripts/retrieve_documents.js +521 -0
  125. package/lib/scripts/retrieve_documents.mjs +249 -0
  126. package/lib/scripts/retrieve_documents.ts +298 -0
  127. package/lib/scripts/retrieve_open_data.js +77 -69
  128. package/lib/scripts/retrieve_open_data.mjs +48 -49
  129. package/lib/scripts/retrieve_open_data.ts +74 -58
  130. package/lib/scripts/retrieve_senateurs_photos.js +45 -63
  131. package/lib/scripts/retrieve_senateurs_photos.mjs +4 -21
  132. package/lib/scripts/retrieve_senateurs_photos.ts +6 -29
  133. package/lib/scripts/retrieve_textes.mjs +325 -74
  134. package/lib/scripts/retrieve_textes.ts +111 -63
  135. package/lib/scripts/shared/cli_helpers.d.ts +44 -0
  136. package/lib/scripts/shared/cli_helpers.js +35 -0
  137. package/lib/scripts/shared/cli_helpers.ts +36 -0
  138. package/lib/scripts/shared/util.d.ts +3 -0
  139. package/lib/scripts/shared/util.js +102 -0
  140. package/lib/scripts/shared/util.ts +33 -0
  141. package/lib/src/aggregates.d.ts +52 -0
  142. package/lib/src/aggregates.mjs +726 -0
  143. package/lib/src/config.d.ts +2 -0
  144. package/lib/src/config.mjs +16 -0
  145. package/lib/src/databases.d.ts +18 -0
  146. package/lib/src/databases.mjs +55 -0
  147. package/lib/src/datasets.d.ts +28 -0
  148. package/lib/src/datasets.mjs +78 -0
  149. package/lib/src/fields.d.ts +10 -0
  150. package/lib/src/fields.mjs +22 -0
  151. package/lib/src/index.d.ts +8 -0
  152. package/lib/src/index.mjs +7 -0
  153. package/lib/src/inserters.d.ts +98 -0
  154. package/lib/src/inserters.mjs +360 -0
  155. package/lib/src/loaders.d.ts +36 -0
  156. package/lib/src/loaders.mjs +107 -0
  157. package/lib/src/model/ameli.d.ts +4 -0
  158. package/lib/src/model/ameli.js +57 -0
  159. package/lib/src/model/debats.d.ts +4 -0
  160. package/lib/src/model/debats.js +43 -0
  161. package/lib/src/model/dosleg.d.ts +197 -0
  162. package/lib/src/model/dosleg.js +169 -0
  163. package/lib/src/model/index.d.ts +4 -0
  164. package/lib/src/model/index.js +4 -0
  165. package/lib/src/model/questions.d.ts +89 -0
  166. package/lib/src/model/questions.js +76 -0
  167. package/lib/src/model/sens.d.ts +390 -0
  168. package/lib/src/model/sens.js +339 -0
  169. package/lib/src/model/texte.d.ts +7 -0
  170. package/lib/src/model/texte.js +183 -0
  171. package/lib/src/raw_types_kysely/ameli.d.ts +915 -0
  172. package/lib/src/raw_types_kysely/ameli.js +5 -0
  173. package/lib/src/raw_types_kysely/debats.d.ts +207 -0
  174. package/lib/src/raw_types_kysely/debats.js +5 -0
  175. package/lib/src/raw_types_kysely/dosleg.d.ts +3532 -0
  176. package/lib/src/raw_types_kysely/dosleg.js +5 -0
  177. package/lib/src/raw_types_kysely/questions.d.ts +414 -0
  178. package/lib/src/raw_types_kysely/questions.js +5 -0
  179. package/lib/src/raw_types_kysely/sens.d.ts +4394 -0
  180. package/lib/src/raw_types_kysely/sens.js +5 -0
  181. package/lib/src/raw_types_schemats/ameli.d.ts +541 -0
  182. package/lib/src/raw_types_schemats/ameli.js +2 -0
  183. package/lib/src/raw_types_schemats/debats.d.ts +127 -0
  184. package/lib/src/raw_types_schemats/debats.js +2 -0
  185. package/lib/src/raw_types_schemats/dosleg.d.ts +2027 -0
  186. package/lib/src/raw_types_schemats/dosleg.js +2 -0
  187. package/lib/src/raw_types_schemats/questions.d.ts +231 -0
  188. package/lib/src/raw_types_schemats/questions.js +2 -0
  189. package/lib/src/raw_types_schemats/sens.d.ts +2709 -0
  190. package/lib/src/raw_types_schemats/sens.js +2 -0
  191. package/lib/src/scripts/convert_data.d.ts +1 -0
  192. package/lib/src/scripts/convert_data.js +95 -0
  193. package/lib/src/scripts/datautil.d.ts +5 -0
  194. package/lib/src/scripts/datautil.js +16 -0
  195. package/lib/src/scripts/parse_textes.d.ts +1 -0
  196. package/lib/src/scripts/parse_textes.js +47 -0
  197. package/lib/src/scripts/retrieve_documents.d.ts +1 -0
  198. package/lib/src/scripts/retrieve_documents.js +258 -0
  199. package/lib/src/scripts/retrieve_open_data.d.ts +1 -0
  200. package/lib/src/scripts/retrieve_open_data.js +214 -0
  201. package/lib/src/scripts/retrieve_senateurs_photos.d.ts +1 -0
  202. package/lib/src/scripts/retrieve_senateurs_photos.js +147 -0
  203. package/lib/src/scripts/shared/cli_helpers.d.ts +44 -0
  204. package/lib/src/scripts/shared/cli_helpers.js +32 -0
  205. package/lib/src/scripts/shared/util.d.ts +3 -0
  206. package/lib/src/scripts/shared/util.js +28 -0
  207. package/lib/src/strings.d.ts +1 -0
  208. package/lib/src/strings.mjs +18 -0
  209. package/lib/src/types/ameli.d.ts +10 -0
  210. package/lib/src/types/ameli.js +13 -0
  211. package/lib/src/types/debats.d.ts +4 -0
  212. package/lib/src/types/debats.js +2 -0
  213. package/lib/src/types/dosleg.d.ts +98 -0
  214. package/lib/src/types/dosleg.js +151 -0
  215. package/lib/src/types/questions.d.ts +2 -0
  216. package/lib/src/types/questions.js +1 -0
  217. package/lib/src/types/sens.d.ts +10 -0
  218. package/lib/src/types/sens.js +1 -0
  219. package/lib/src/types/sessions.d.ts +42 -0
  220. package/lib/src/types/sessions.js +43 -0
  221. package/lib/src/types/texte.d.ts +61 -0
  222. package/lib/src/types/texte.js +16 -0
  223. package/lib/src/validators/config.d.ts +1 -0
  224. package/lib/src/validators/config.js +54 -0
  225. package/lib/src/validators/senat.d.ts +0 -0
  226. package/lib/src/validators/senat.js +24 -0
  227. package/lib/types/ameli.d.ts +1 -1
  228. package/lib/types/ameli.js +2 -2
  229. package/lib/types/ameli.ts +1 -1
  230. package/lib/types/debats.d.ts +1 -1
  231. package/lib/types/debats.js +2 -2
  232. package/lib/types/debats.ts +1 -1
  233. package/lib/types/dosleg.d.ts +2 -2
  234. package/lib/types/dosleg.js +2 -2
  235. package/lib/types/dosleg.ts +2 -2
  236. package/lib/types/questions.d.ts +1 -1
  237. package/lib/types/questions.js +2 -2
  238. package/lib/types/questions.ts +1 -1
  239. package/lib/types/sens.d.ts +1 -3
  240. package/lib/types/sens.js +2 -5
  241. package/lib/types/sens.mjs +1 -23
  242. package/lib/types/sens.ts +1 -25
  243. package/lib/types/sessions.d.ts +42 -0
  244. package/lib/types/sessions.js +51 -0
  245. package/lib/types/sessions.mjs +43 -0
  246. package/lib/types/sessions.ts +42 -0
  247. package/lib/types/texte.d.ts +65 -0
  248. package/lib/types/texte.js +24 -0
  249. package/lib/types/texte.mjs +16 -0
  250. package/lib/types/texte.ts +76 -0
  251. package/package.json +35 -10
  252. package/lib/aggregates.js +0 -1122
  253. package/lib/fields.js +0 -68
  254. package/lib/inserters.js +0 -518
  255. package/lib/scripts/fix_db.js +0 -144
  256. package/lib/scripts/fix_db.mjs +0 -64
  257. package/lib/scripts/fix_db.ts +0 -75
  258. package/lib/scripts/retrieve_textes.js +0 -179
  259. /package/lib/scripts/{fix_db.d.ts → parse_textes.d.ts} +0 -0
@@ -0,0 +1,147 @@
1
+ import assert from "assert";
2
+ import { execSync } from "child_process";
3
+ import commandLineArgs from "command-line-args";
4
+ import fs from "fs-extra";
5
+ // import fetch from "node-fetch"
6
+ import path from "path";
7
+ // import stream from "stream"
8
+ // import util from "util"
9
+ import { findActif as findActifSenateurs } from "../model/sens";
10
+ import { slugify } from "../strings";
11
+ import { commonOptions } from "./shared/cli_helpers";
12
+ const optionsDefinitions = [
13
+ ...commonOptions,
14
+ {
15
+ alias: "f",
16
+ help: "fetch sénateurs' pictures instead of retrieving them from files",
17
+ name: "fetch",
18
+ type: Boolean,
19
+ },
20
+ ];
21
+ const options = commandLineArgs(optionsDefinitions);
22
+ // const pipeline = util.promisify(stream.pipeline)
23
+ async function retrievePhotosSenateurs() {
24
+ const dataDir = options.dataDir;
25
+ assert(dataDir, "Missing argument: data directory");
26
+ const photosDir = path.join(dataDir, "photos_senateurs");
27
+ const missingPhotoFilePath = path.resolve(__dirname, "images", "transparent_155x225.jpg");
28
+ const sens = await Array.fromAsync(findActifSenateurs());
29
+ // Download photos.
30
+ fs.ensureDirSync(photosDir);
31
+ if (options.fetch) {
32
+ for (const sen of sens) {
33
+ const photoStem = `${slugify(sen.sennomuse, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
34
+ const photoFilename = photoStem + ".jpg";
35
+ const photoFilePath = path.join(photosDir, photoFilename);
36
+ const photoTempFilename = photoStem + "_temp.jpg";
37
+ const photoTempFilePath = path.join(photosDir, photoTempFilename);
38
+ const urlPhoto = `https://www.senat.fr/senimg/${photoFilename}`;
39
+ if (!options.silent) {
40
+ console.log(`Loading photo ${urlPhoto} for ${sen.senprenomuse} ${sen.sennomuse}…`);
41
+ }
42
+ // Fetch fails with OpenSSL error: dh key too small.
43
+ // (so does "curl").
44
+ // for (let retries = 0; retries < 3; retries++) {
45
+ // const response = await fetch(urlPhoto)
46
+ // if (response.ok) {
47
+ // await pipeline(response.body, fs.createWriteStream(photoTempFilePath))
48
+ // fs.renameSync(photoTempFilePath, photoFilePath)
49
+ // break
50
+ // }
51
+ // if (retries >= 2) {
52
+ // console.warn(`Fetch failed: ${urlPhoto} (${sen.senprenomuse} ${sen.sennomuse})`)
53
+ // console.warn(response.status, response.statusText)
54
+ // console.warn(await response.text())
55
+ // if (fs.existsSync(photoFilePath)) {
56
+ // console.warn(" => Reusing existing image")
57
+ // } else {
58
+ // console.warn(" => Using blank image")
59
+ // fs.copyFileSync(missingPhotoFilePath, photoFilePath)
60
+ // }
61
+ // break
62
+ // }
63
+ // }
64
+ try {
65
+ execSync(`wget --quiet -O ${photoTempFilename} ${urlPhoto}`, {
66
+ cwd: photosDir,
67
+ env: process.env,
68
+ encoding: "utf-8",
69
+ // stdio: ["ignore", "ignore", "pipe"],
70
+ });
71
+ fs.renameSync(photoTempFilePath, photoFilePath);
72
+ }
73
+ catch (error) {
74
+ if (typeof error === "object" && error && "status" in error && error.status === 8) {
75
+ console.error(`Unable to load photo for ${sen.senprenomuse} ${sen.sennomuse}`);
76
+ continue;
77
+ }
78
+ throw error;
79
+ }
80
+ }
81
+ }
82
+ // Resize photos to 155x225, because some haven't exactly this size.
83
+ for (const sen of sens) {
84
+ const photoStem = `${slugify(sen.sennomuse, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
85
+ const photoFilename = photoStem + ".jpg";
86
+ const photoFilePath = path.join(photosDir, photoFilename);
87
+ if (fs.existsSync(photoFilePath)) {
88
+ if (!options.silent) {
89
+ console.log(`Resizing photo ${photoStem} for ${sen.senprenomuse} ${sen.sennomuse}…`);
90
+ }
91
+ execSync(`gm convert -resize 155x225! ${photoStem}.jpg ${photoStem}_155x225.jpg`, {
92
+ cwd: photosDir,
93
+ });
94
+ }
95
+ else {
96
+ if (!options.silent) {
97
+ console.warn(`Missing photo for ${sen.senprenomuse} ${sen.sennomuse}: using blank image`);
98
+ }
99
+ fs.copyFileSync(missingPhotoFilePath, path.join(photosDir, `${photoStem}_155x225.jpg`));
100
+ }
101
+ }
102
+ // Create a mosaic of photos.
103
+ if (!options.silent) {
104
+ console.log("Creating mosaic of photos…");
105
+ }
106
+ const photoBySenmat = {};
107
+ const rowsFilenames = [];
108
+ for (let senIndex = 0, rowIndex = 0; senIndex < sens.length; senIndex += 25, rowIndex++) {
109
+ const row = sens.slice(senIndex, senIndex + 25);
110
+ const photosFilenames = [];
111
+ for (const [columnIndex, sen] of row.entries()) {
112
+ const photoStem = `${slugify(sen.sennomuse, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
113
+ const photoFilename = `${photoStem}_155x225.jpg`;
114
+ photosFilenames.push(photoFilename);
115
+ photoBySenmat[sen.senmat] = {
116
+ chemin: `photos_senateurs/${photoFilename}`,
117
+ cheminMosaique: "photos_senateurs/senateurs.jpg",
118
+ hauteur: 225,
119
+ largeur: 155,
120
+ xMosaique: columnIndex * 155,
121
+ yMosaique: rowIndex * 225,
122
+ };
123
+ }
124
+ const rowFilename = `row-${rowIndex}.jpg`;
125
+ execSync(`gm convert ${photosFilenames.join(" ")} +append ${rowFilename}`, {
126
+ cwd: photosDir,
127
+ });
128
+ rowsFilenames.push(rowFilename);
129
+ }
130
+ execSync(`gm convert ${rowsFilenames.join(" ")} -append senateurs.jpg`, {
131
+ cwd: photosDir,
132
+ });
133
+ for (const rowFilename of rowsFilenames) {
134
+ fs.unlinkSync(path.join(photosDir, rowFilename));
135
+ }
136
+ if (!options.silent) {
137
+ console.log("Creating JSON file containing informations on all pictures…");
138
+ }
139
+ const jsonFilePath = path.join(photosDir, "senateurs.json");
140
+ fs.writeFileSync(jsonFilePath, JSON.stringify(photoBySenmat, null, 2));
141
+ }
142
+ retrievePhotosSenateurs()
143
+ .then(() => process.exit(0))
144
+ .catch((error) => {
145
+ console.log(error);
146
+ process.exit(1);
147
+ });
@@ -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,32 @@
1
+ export const categoriesOption = {
2
+ alias: "k",
3
+ defaultValue: ["All"],
4
+ help: "categories of datasets to reorganize",
5
+ multiple: true,
6
+ name: "categories",
7
+ type: String,
8
+ };
9
+ export const dataDirDefaultOption = {
10
+ defaultOption: true,
11
+ help: "directory containing Sénat open data files",
12
+ name: "dataDir",
13
+ type: String,
14
+ };
15
+ export const silentOption = {
16
+ alias: "s",
17
+ help: "don't log anything",
18
+ name: "silent",
19
+ type: Boolean,
20
+ };
21
+ export const verboseOption = {
22
+ alias: "v",
23
+ help: "verbose logs",
24
+ name: "verbose",
25
+ type: Boolean,
26
+ };
27
+ export const commonOptions = [
28
+ categoriesOption,
29
+ dataDirDefaultOption,
30
+ silentOption,
31
+ verboseOption,
32
+ ];
@@ -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>;
@@ -0,0 +1,28 @@
1
+ import fs from "fs-extra";
2
+ export function isOptionEmptyOrHasValue(option, value) {
3
+ return !option || option.length === 0 || option.includes(value);
4
+ }
5
+ export function ensureAndClearDir(path) {
6
+ if (!fs.existsSync(path)) {
7
+ fs.mkdirSync(path, { recursive: true });
8
+ }
9
+ else {
10
+ fs.emptyDirSync(path);
11
+ }
12
+ }
13
+ export async function fetchWithRetry(url, retries = 3, backoff = 300) {
14
+ for (let attempt = 0; attempt < retries; attempt++) {
15
+ try {
16
+ return await fetch(url);
17
+ }
18
+ catch (error) {
19
+ if (attempt === retries - 1) {
20
+ throw error;
21
+ }
22
+ console.warn(`Fetch attempt ${attempt + 1} for ${url} failed. Retrying in ${backoff}ms…`);
23
+ await new Promise((resolve) => setTimeout(resolve, backoff));
24
+ backoff *= 2;
25
+ }
26
+ }
27
+ throw new Error(`Failed to fetch ${url} after ${retries} attempts`);
28
+ }
@@ -0,0 +1 @@
1
+ export declare function slugify(string: string, replacement?: string): string;
@@ -0,0 +1,18 @@
1
+ import originalSlugify from "slug";
2
+ const slugifyCharmap = {
3
+ ...originalSlugify.defaults.charmap,
4
+ "'": " ",
5
+ "@": " ",
6
+ ".": " ",
7
+ "-": "_",
8
+ };
9
+ export function slugify(string, replacement) {
10
+ const options = {
11
+ charmap: slugifyCharmap,
12
+ mode: "rfc3986",
13
+ };
14
+ if (replacement) {
15
+ options.replacement = replacement;
16
+ }
17
+ return originalSlugify(string, options);
18
+ }
@@ -0,0 +1,10 @@
1
+ import { ses as Ses, sub as Sub, subFields, txt_ameli } from "../raw_types_schemats/ameli";
2
+ export { Ses, Sub };
3
+ export interface TxtAmeli extends txt_ameli {
4
+ subids?: subFields.id[];
5
+ }
6
+ export declare const sesFieldsToParseInt: string[];
7
+ export declare const sesFieldsToTrim: string[];
8
+ export declare const subFieldsToParseInt: string[];
9
+ export declare const subFieldsToTrim: string[];
10
+ export declare const txtAmeliFieldsToTrim: string[];
@@ -0,0 +1,13 @@
1
+ export const sesFieldsToParseInt = ["ann"];
2
+ export const sesFieldsToTrim = ["lil"];
3
+ export const subFieldsToParseInt = ["pos", "posder", "prires"];
4
+ export const subFieldsToTrim = ["lic", "lib", "sig", "style"];
5
+ export const txtAmeliFieldsToTrim = [
6
+ "num",
7
+ "int",
8
+ "inl",
9
+ "libdelim",
10
+ "libcplnat",
11
+ "doslegsignet",
12
+ "ordsnddelib",
13
+ ];
@@ -0,0 +1,4 @@
1
+ import { debats as Debat, lecassdeb as LecAssDeb } from "../raw_types_schemats/debats";
2
+ export { Debat, LecAssDeb };
3
+ export declare const debatsFieldsToTrim: string[];
4
+ export declare const lecassdebFieldsToTrim: string[];
@@ -0,0 +1,2 @@
1
+ export const debatsFieldsToTrim = ["deburl", "libspec"];
2
+ export const lecassdebFieldsToTrim = ["lecassidt"];
@@ -0,0 +1,98 @@
1
+ import { txt_ameliFields } from "../raw_types_schemats/ameli";
2
+ import { ass as Ass, aud, audFields, auteur, date_seance, date_seanceFields as dateSeanceFields, deccoc as DecCoc, denrap as DenRap, docatt, docattFields, ecr, ecrFields, etaloi as EtaLoi, lecass, lecassFields, lecassrap, lecture, lectureFields, loi, org as Org, oritxt as OriTxt, qua as Qua, rap, raporg as RapOrg, raporgFields, scr as Scr, texte, texteFields, typatt as TypAtt, typlec as TypLec, typloi as TypLoi, typtxt as TypTxt, typurl as TypUrl, typurlFields } from "../raw_types_schemats/dosleg";
3
+ import { Debat } from "./debats";
4
+ import { TxtAmeli } from "./ameli";
5
+ export { Ass, DecCoc, DenRap, EtaLoi, Org, OriTxt, Qua, RapOrg, Scr, TypAtt, TypLec, TypLoi, TypTxt, TypUrl, };
6
+ export interface Aud extends aud {
7
+ org?: Org;
8
+ }
9
+ export interface Auteur extends auteur {
10
+ qua?: Qua;
11
+ }
12
+ export interface DateSeance extends date_seance {
13
+ debat?: Debat;
14
+ scrids?: string[];
15
+ scrs?: Scr[];
16
+ }
17
+ export interface DocAtt extends docatt {
18
+ rap?: Rap;
19
+ typatt?: TypAtt;
20
+ }
21
+ export interface Ecr extends ecr {
22
+ aut?: Auteur;
23
+ }
24
+ export interface LecAss extends lecass {
25
+ ass?: Ass;
26
+ auds?: Aud[];
27
+ audcles?: audFields.audcle[];
28
+ datesSeances?: DateSeance[];
29
+ datesSeancesCodes?: dateSeanceFields.code[];
30
+ debatdatseas: Date[];
31
+ lecassraps?: LecAssRap[];
32
+ lecassrapids?: string[];
33
+ org?: Org;
34
+ texcods: texteFields.texcod[];
35
+ textes?: Texte[];
36
+ }
37
+ export interface LecAssRap extends lecassrap {
38
+ rap?: Rap;
39
+ }
40
+ export interface Lecture extends lecture {
41
+ typlec?: TypLec;
42
+ lecassidts?: lecassFields.lecassidt[];
43
+ lecasss?: LecAss[];
44
+ }
45
+ export interface Loi extends loi {
46
+ deccoc?: DecCoc;
47
+ etaloi?: EtaLoi;
48
+ lecidts?: lectureFields.lecidt[];
49
+ lectures?: Lecture[];
50
+ typloi?: TypLoi;
51
+ }
52
+ export interface Rap extends rap {
53
+ denrap?: DenRap;
54
+ docattcles?: docattFields.docattcle[];
55
+ docatts?: DocAtt[];
56
+ ecrnums?: ecrFields.ecrnum[];
57
+ ecrs?: Ecr[];
58
+ orgcods?: raporgFields.orgcod[];
59
+ orgs?: Org[];
60
+ }
61
+ export interface Texte extends texte {
62
+ ecrs?: Ecr[];
63
+ ecrnums?: ecrFields.ecrnum[];
64
+ libtypurl?: typurlFields.libtypurl;
65
+ org?: Org;
66
+ oritxt: OriTxt;
67
+ typtxt?: TypTxt;
68
+ txtAmeli?: TxtAmeli;
69
+ txtAmeliId: txt_ameliFields.id;
70
+ }
71
+ export declare const assFieldsToTrim: string[];
72
+ export declare const audFieldsToTrim: string[];
73
+ export declare const auteurFieldsToTrim: string[];
74
+ export declare const dateSeanceFieldsToTrim: string[];
75
+ export declare const deccocFieldsToTrim: string[];
76
+ export declare const denrapFieldsToTrim: string[];
77
+ export declare const docattFieldsToParseInt: string[];
78
+ export declare const docattFieldsToTrim: string[];
79
+ export declare const ecrFieldsToTrim: string[];
80
+ export declare const etaloiFieldsToTrim: string[];
81
+ export declare const lecassFieldsToTrim: string[];
82
+ export declare const lecassrapFieldsToTrim: string[];
83
+ export declare const lectureFieldsToTrim: string[];
84
+ export declare const loiFieldsToTrim: string[];
85
+ export declare const orgFieldsToTrim: string[];
86
+ export declare const oritxtFieldsToTrim: string[];
87
+ export declare const quaFieldsToTrim: string[];
88
+ export declare const rapFieldsToParseInt: string[];
89
+ export declare const rapFieldsToTrim: string[];
90
+ export declare const raporgFieldsToTrim: string[];
91
+ export declare const scrFieldsToTrim: string[];
92
+ export declare const texteFieldsToParseInt: string[];
93
+ export declare const texteFieldsToTrim: string[];
94
+ export declare const typattFieldsToTrim: string[];
95
+ export declare const typlecFieldsToTrim: string[];
96
+ export declare const typloiFieldsToTrim: string[];
97
+ export declare const typtxtFieldsToTrim: string[];
98
+ export declare const typurlFieldsToTrim: string[];
@@ -0,0 +1,151 @@
1
+ export const assFieldsToTrim = ["libass"];
2
+ export const audFieldsToTrim = ["lecassidt", "audtit", "audurl", "orgcod"];
3
+ export const auteurFieldsToTrim = [
4
+ "autcod",
5
+ "quacod",
6
+ "typautcod",
7
+ "nomuse",
8
+ "prenom",
9
+ "nomtec",
10
+ "autmat",
11
+ "autfct",
12
+ ];
13
+ export const dateSeanceFieldsToTrim = ["lecidt", "statut"];
14
+ export const deccocFieldsToTrim = ["deccoccod", "deccoclib"];
15
+ export const denrapFieldsToTrim = [
16
+ "coddenrap",
17
+ "typraprap",
18
+ "libdenrap",
19
+ "denrapmin",
20
+ "denraptit",
21
+ "denrapstymin",
22
+ "solnatrapcod",
23
+ ];
24
+ export const docattFieldsToParseInt = ["docattcle", "rapcod"];
25
+ export const docattFieldsToTrim = ["docatturl"];
26
+ export const ecrFieldsToTrim = ["autcod", "ecrqua"];
27
+ export const etaloiFieldsToTrim = ["etaloilib"];
28
+ export const lecassFieldsToTrim = [
29
+ "lecassidt",
30
+ "lecidt",
31
+ "ptlurl",
32
+ "ptlnumcpl",
33
+ "ptlnot",
34
+ "ptlurl2",
35
+ "ptlnot2",
36
+ "ptlurl3",
37
+ "ptlnot3",
38
+ "ptlnumcpl2",
39
+ "ptlnumcpl3",
40
+ "lecassame",
41
+ "orgcod",
42
+ "loiintmod",
43
+ "reucom",
44
+ "debatsurl",
45
+ "libppr",
46
+ "ptlurlcom",
47
+ "aliasppr",
48
+ "lecassamecom",
49
+ ];
50
+ export const lecassrapFieldsToTrim = ["lecassidt"];
51
+ export const lectureFieldsToTrim = ["lecidt", "loicod", "typleccod", "leccom"];
52
+ export const loiFieldsToTrim = [
53
+ "loicod",
54
+ "typloicod",
55
+ "deccoccod",
56
+ "numero",
57
+ "loient",
58
+ "motclef",
59
+ "loitit",
60
+ "loiint",
61
+ "url_jo",
62
+ "loinumjo",
63
+ "loititjo",
64
+ "url_jo2",
65
+ "loinumjo2",
66
+ "deccocurl",
67
+ "num_decision",
68
+ "loicodmai",
69
+ "loinoudelibcod",
70
+ "motionloiorigcod",
71
+ "url_ordonnance",
72
+ "saisine_par",
73
+ "loinumjo3",
74
+ "url_jo3",
75
+ "url_an",
76
+ "url_presart",
77
+ "signetalt",
78
+ "orgcod",
79
+ "doscocurl",
80
+ "loiintori",
81
+ ];
82
+ export const orgFieldsToTrim = [
83
+ "orgcod",
84
+ "typorgcod",
85
+ "orgnom",
86
+ "orgliblon",
87
+ "orglibaff",
88
+ "orgurl",
89
+ "orglibcou",
90
+ "org_de",
91
+ "urltra",
92
+ "inttra",
93
+ "orgnomcouv",
94
+ "senorgcod",
95
+ "html_color",
96
+ ];
97
+ export const oritxtFieldsToTrim = ["oritxtcod", "oritxtlib", "oritxtlibfem"];
98
+ export const quaFieldsToTrim = ["quacod", "qualic", "quaabr", "quaabrplu"];
99
+ export const rapFieldsToParseInt = ["rapcod", "sesann", "rapnum", "rapnuman"];
100
+ export const rapFieldsToTrim = [
101
+ "coddenrap",
102
+ "blecod",
103
+ "raptitcou",
104
+ "raptil",
105
+ "rapurl",
106
+ "url2",
107
+ "url3",
108
+ "url4",
109
+ "url2txt",
110
+ "url3txt",
111
+ "url4txt",
112
+ "prix",
113
+ "numerobis",
114
+ "rapsoustit",
115
+ "rapres",
116
+ "forpubcod",
117
+ ];
118
+ export const raporgFieldsToTrim = ["orgcod"];
119
+ export const scrFieldsToTrim = ["scrint", "soslib"];
120
+ export const texteFieldsToParseInt = ["texcod", "sesann", "texnum"];
121
+ export const texteFieldsToTrim = [
122
+ "oritxtcod",
123
+ "typtxtcod",
124
+ "lecassidt",
125
+ "orgcod",
126
+ "texurl",
127
+ "url2",
128
+ "url3",
129
+ "url4",
130
+ "url2txt",
131
+ "url3txt",
132
+ "url4txt",
133
+ "prix",
134
+ "numerobis",
135
+ "reserve_comspe",
136
+ ];
137
+ export const typattFieldsToTrim = ["typattlib"];
138
+ export const typlecFieldsToTrim = ["typleccod", "typleclib"];
139
+ export const typloiFieldsToTrim = [
140
+ "typloicod",
141
+ "typloilib",
142
+ "groupe",
143
+ "typloiden",
144
+ "typloigen",
145
+ "typloitit",
146
+ "typloidenplu",
147
+ "typloide",
148
+ "typloiabr",
149
+ ];
150
+ export const typtxtFieldsToTrim = ["typtxtcod", "typtxtlib"];
151
+ export const typurlFieldsToTrim = ["libtypurl"];
@@ -0,0 +1,2 @@
1
+ import { tam_questions as Question } from "../raw_types_schemats/questions";
2
+ export { Question };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { sen as Sen } from "../raw_types_schemats/sens";
2
+ export { Sen };
3
+ export interface Photo {
4
+ chemin: string;
5
+ cheminMosaique: string;
6
+ hauteur: number;
7
+ largeur: number;
8
+ xMosaique: number;
9
+ yMosaique: number;
10
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,42 @@
1
+ export declare enum Session {
2
+ "2012-2013" = 2012,
3
+ "2013-2014" = 2013,
4
+ "2014-2015" = 2014,
5
+ "2015-2016" = 2015,
6
+ "2016-2017" = 2016,
7
+ "2017-2018" = 2017,
8
+ "2018-2019" = 2018,
9
+ "2019-2020" = 2019,
10
+ "2020-2021" = 2020,
11
+ "2021-2022" = 2021,
12
+ "2022-2023" = 2022,
13
+ "2023-2024" = 2023,
14
+ "2024-2025" = 2024,
15
+ "2025-2026" = 2025,
16
+ "2026-2027" = 2026,
17
+ "2027-2028" = 2027,
18
+ "2028-2029" = 2028,
19
+ "2029-2030" = 2029,
20
+ "2030-2031" = 2030,
21
+ "2031-2032" = 2031,
22
+ "2032-2033" = 2032,
23
+ "2033-2034" = 2033,
24
+ "2034-2035" = 2034,
25
+ "2035-2036" = 2035,
26
+ "2036-2037" = 2036,
27
+ "2037-2038" = 2037,
28
+ "2038-2039" = 2038,
29
+ "2039-2040" = 2039,
30
+ "2040-2041" = 2040,
31
+ "2041-2042" = 2041,
32
+ "2042-2043" = 2042,
33
+ "2043-2044" = 2043,
34
+ "2044-2045" = 2044,
35
+ "2045-2046" = 2045,
36
+ "2046-2047" = 2046,
37
+ "2047-2048" = 2047,
38
+ "2048-2049" = 2048,
39
+ "2049-2050" = 2049,
40
+ "2050-2051" = 2050,
41
+ "All" = 0
42
+ }
@@ -0,0 +1,43 @@
1
+ export var Session;
2
+ (function (Session) {
3
+ Session[Session["2012-2013"] = 2012] = "2012-2013";
4
+ Session[Session["2013-2014"] = 2013] = "2013-2014";
5
+ Session[Session["2014-2015"] = 2014] = "2014-2015";
6
+ Session[Session["2015-2016"] = 2015] = "2015-2016";
7
+ Session[Session["2016-2017"] = 2016] = "2016-2017";
8
+ Session[Session["2017-2018"] = 2017] = "2017-2018";
9
+ Session[Session["2018-2019"] = 2018] = "2018-2019";
10
+ Session[Session["2019-2020"] = 2019] = "2019-2020";
11
+ Session[Session["2020-2021"] = 2020] = "2020-2021";
12
+ Session[Session["2021-2022"] = 2021] = "2021-2022";
13
+ Session[Session["2022-2023"] = 2022] = "2022-2023";
14
+ Session[Session["2023-2024"] = 2023] = "2023-2024";
15
+ Session[Session["2024-2025"] = 2024] = "2024-2025";
16
+ Session[Session["2025-2026"] = 2025] = "2025-2026";
17
+ Session[Session["2026-2027"] = 2026] = "2026-2027";
18
+ Session[Session["2027-2028"] = 2027] = "2027-2028";
19
+ Session[Session["2028-2029"] = 2028] = "2028-2029";
20
+ Session[Session["2029-2030"] = 2029] = "2029-2030";
21
+ Session[Session["2030-2031"] = 2030] = "2030-2031";
22
+ Session[Session["2031-2032"] = 2031] = "2031-2032";
23
+ Session[Session["2032-2033"] = 2032] = "2032-2033";
24
+ Session[Session["2033-2034"] = 2033] = "2033-2034";
25
+ Session[Session["2034-2035"] = 2034] = "2034-2035";
26
+ Session[Session["2035-2036"] = 2035] = "2035-2036";
27
+ Session[Session["2036-2037"] = 2036] = "2036-2037";
28
+ Session[Session["2037-2038"] = 2037] = "2037-2038";
29
+ Session[Session["2038-2039"] = 2038] = "2038-2039";
30
+ Session[Session["2039-2040"] = 2039] = "2039-2040";
31
+ Session[Session["2040-2041"] = 2040] = "2040-2041";
32
+ Session[Session["2041-2042"] = 2041] = "2041-2042";
33
+ Session[Session["2042-2043"] = 2042] = "2042-2043";
34
+ Session[Session["2043-2044"] = 2043] = "2043-2044";
35
+ Session[Session["2044-2045"] = 2044] = "2044-2045";
36
+ Session[Session["2045-2046"] = 2045] = "2045-2046";
37
+ Session[Session["2046-2047"] = 2046] = "2046-2047";
38
+ Session[Session["2047-2048"] = 2047] = "2047-2048";
39
+ Session[Session["2048-2049"] = 2048] = "2048-2049";
40
+ Session[Session["2049-2050"] = 2049] = "2049-2050";
41
+ Session[Session["2050-2051"] = 2050] = "2050-2051";
42
+ Session[Session["All"] = 0] = "All";
43
+ })(Session || (Session = {}));