@tricoteuses/assemblee 1.10.5 → 2.0.0

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 (274) hide show
  1. package/README.md +8 -1
  2. package/lib/amendements-79bwpkvR.js +154 -0
  3. package/lib/amendements-CV3s5a0M.js +667 -0
  4. package/lib/cleaners/index.d.ts +9 -9
  5. package/lib/cleaners.js +564 -0
  6. package/lib/datasets.d.ts +3 -3
  7. package/lib/dossiers_legislatifs.d.ts +2 -2
  8. package/lib/index.d.ts +17 -22
  9. package/lib/index.js +1542 -314
  10. package/lib/inserters.d.ts +5 -5
  11. package/lib/loaders-9mHdTl9L.js +4158 -0
  12. package/lib/loaders.d.ts +12 -12
  13. package/lib/loaders.js +29 -1689
  14. package/lib/organes.d.ts +1 -1
  15. package/lib/parse-Ccs6wcUg.js +2512 -0
  16. package/lib/parsers/index.d.ts +2 -3
  17. package/lib/parsers/plf.d.ts +1 -0
  18. package/lib/parsers/recherche_amendements.d.ts +2 -2
  19. package/lib/parsers/textes_lois.d.ts +1 -23
  20. package/lib/parsers.js +398 -0
  21. package/lib/raw_types/debats.d.ts +2 -2
  22. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -1
  23. package/lib/schemas/acteurs_et_organes.json +1166 -0
  24. package/lib/schemas/agendas.json +1745 -0
  25. package/lib/schemas/amendements.json +2085 -0
  26. package/lib/schemas/debats.json +842 -0
  27. package/lib/schemas/dossiers_legislatifs.json +3874 -0
  28. package/lib/schemas/legislatures.json +17 -0
  29. package/lib/schemas/questions.json +704 -0
  30. package/lib/schemas/scrutins.json +701 -0
  31. package/lib/scripts/retrieve_deputes_photos.d.ts +1 -1
  32. package/lib/types/acteurs_et_organes.d.ts +340 -0
  33. package/lib/types/agendas.d.ts +236 -10
  34. package/lib/types/amendements.d.ts +276 -1
  35. package/lib/types/debats.d.ts +52 -2
  36. package/lib/types/dossiers_legislatifs.d.ts +403 -9
  37. package/lib/types/questions.d.ts +99 -2
  38. package/lib/types/scrutins.d.ts +101 -0
  39. package/lib/urls.d.ts +2 -2
  40. package/package.json +32 -94
  41. package/lib/api.js +0 -52
  42. package/lib/api.mjs +0 -45
  43. package/lib/bugs/acteur-00010/plugin.test.js +0 -90
  44. package/lib/bugs/acteur-00010/plugin.test.mjs +0 -33
  45. package/lib/bugs/acteur-00010.d.ts +0 -7
  46. package/lib/bugs/acteur-00010.js +0 -116
  47. package/lib/bugs/acteur-00010.mjs +0 -26
  48. package/lib/bugs/agenda-00002/plugin.test.js +0 -124
  49. package/lib/bugs/agenda-00002/plugin.test.mjs +0 -50
  50. package/lib/bugs/agenda-00002.d.ts +0 -15
  51. package/lib/bugs/agenda-00002.js +0 -406
  52. package/lib/bugs/agenda-00002.mjs +0 -172
  53. package/lib/bugs/agenda-00008/plugin.test.js +0 -92
  54. package/lib/bugs/agenda-00008/plugin.test.mjs +0 -31
  55. package/lib/bugs/agenda-00008.d.ts +0 -7
  56. package/lib/bugs/agenda-00008.js +0 -123
  57. package/lib/bugs/agenda-00008.mjs +0 -26
  58. package/lib/bugs/agenda-00011/plugin.test.d.ts +0 -1
  59. package/lib/bugs/agenda-00011/plugin.test.js +0 -263
  60. package/lib/bugs/agenda-00011/plugin.test.mjs +0 -152
  61. package/lib/bugs/agenda-00011.d.ts +0 -16
  62. package/lib/bugs/agenda-00011.js +0 -333
  63. package/lib/bugs/agenda-00011.mjs +0 -125
  64. package/lib/bugs.d.ts +0 -21
  65. package/lib/bugs.js +0 -452
  66. package/lib/bugs.mjs +0 -70
  67. package/lib/cleaners/actes_legislatifs.js +0 -315
  68. package/lib/cleaners/actes_legislatifs.mjs +0 -253
  69. package/lib/cleaners/acteurs.js +0 -265
  70. package/lib/cleaners/acteurs.mjs +0 -180
  71. package/lib/cleaners/amendements.js +0 -294
  72. package/lib/cleaners/amendements.mjs +0 -227
  73. package/lib/cleaners/debats.js +0 -12
  74. package/lib/cleaners/debats.mjs +0 -5
  75. package/lib/cleaners/documents.js +0 -205
  76. package/lib/cleaners/documents.mjs +0 -133
  77. package/lib/cleaners/dossiers_legislatifs.js +0 -131
  78. package/lib/cleaners/dossiers_legislatifs.mjs +0 -70
  79. package/lib/cleaners/index.js +0 -70
  80. package/lib/cleaners/index.mjs +0 -10
  81. package/lib/cleaners/organes.js +0 -65
  82. package/lib/cleaners/organes.mjs +0 -48
  83. package/lib/cleaners/questions.js +0 -12
  84. package/lib/cleaners/questions.mjs +0 -5
  85. package/lib/cleaners/reunions.js +0 -312
  86. package/lib/cleaners/reunions.mjs +0 -255
  87. package/lib/cleaners/scrutins.js +0 -340
  88. package/lib/cleaners/scrutins.mjs +0 -221
  89. package/lib/cleaners/xml.js +0 -74
  90. package/lib/cleaners/xml.mjs +0 -59
  91. package/lib/datasets.js +0 -837
  92. package/lib/datasets.mjs +0 -755
  93. package/lib/dates.js +0 -124
  94. package/lib/dates.mjs +0 -100
  95. package/lib/dossiers_legislatifs.js +0 -346
  96. package/lib/dossiers_legislatifs.mjs +0 -208
  97. package/lib/file_systems.js +0 -162
  98. package/lib/file_systems.mjs +0 -62
  99. package/lib/git.js +0 -223
  100. package/lib/git.mjs +0 -151
  101. package/lib/index.mjs +0 -17
  102. package/lib/inserters.js +0 -521
  103. package/lib/inserters.mjs +0 -337
  104. package/lib/loaders.mjs +0 -886
  105. package/lib/logger.js +0 -35
  106. package/lib/logger.mjs +0 -26
  107. package/lib/organes.js +0 -22
  108. package/lib/organes.mjs +0 -15
  109. package/lib/parsers/documents.d.ts +0 -62
  110. package/lib/parsers/documents.js +0 -453
  111. package/lib/parsers/documents.mjs +0 -370
  112. package/lib/parsers/index.js +0 -40
  113. package/lib/parsers/index.mjs +0 -4
  114. package/lib/parsers/recherche_amendements.js +0 -403
  115. package/lib/parsers/recherche_amendements.mjs +0 -167
  116. package/lib/parsers/textes_lois.js +0 -307
  117. package/lib/parsers/textes_lois.mjs +0 -264
  118. package/lib/raw_types/acteurs_et_organes.js +0 -1215
  119. package/lib/raw_types/acteurs_et_organes.mjs +0 -1148
  120. package/lib/raw_types/agendas.js +0 -777
  121. package/lib/raw_types/agendas.mjs +0 -724
  122. package/lib/raw_types/amendements.js +0 -1052
  123. package/lib/raw_types/amendements.mjs +0 -993
  124. package/lib/raw_types/debats.js +0 -630
  125. package/lib/raw_types/debats.mjs +0 -573
  126. package/lib/raw_types/dossiers_legislatifs.js +0 -1529
  127. package/lib/raw_types/dossiers_legislatifs.mjs +0 -1471
  128. package/lib/raw_types/questions.js +0 -469
  129. package/lib/raw_types/questions.mjs +0 -416
  130. package/lib/raw_types/scrutins.js +0 -651
  131. package/lib/raw_types/scrutins.mjs +0 -598
  132. package/lib/schemas/acteur/Acteur.json +0 -56
  133. package/lib/schemas/acteur/AdresseElectronique.json +0 -52
  134. package/lib/schemas/acteur/AdressePostale.json +0 -75
  135. package/lib/schemas/acteur/Civ.json +0 -14
  136. package/lib/schemas/acteur/Collaborateur.json +0 -29
  137. package/lib/schemas/acteur/EtatCivil.json +0 -51
  138. package/lib/schemas/acteur/Ident.json +0 -40
  139. package/lib/schemas/acteur/Lieu.json +0 -66
  140. package/lib/schemas/acteur/Mandat.json +0 -192
  141. package/lib/schemas/acteur/Profession.json +0 -46
  142. package/lib/schemas/agenda/Agenda.json +0 -318
  143. package/lib/schemas/agenda/CycleDeVie.json +0 -45
  144. package/lib/schemas/agenda/PointOdj.json +0 -82
  145. package/lib/schemas/amendement/Amendement.json +0 -246
  146. package/lib/schemas/amendement/Diff.json +0 -25
  147. package/lib/schemas/amendement/DispositifAmdtCredit.json +0 -85
  148. package/lib/schemas/amendement/Identifiant.json +0 -62
  149. package/lib/schemas/amendement/PointeurFragmentTexte.json +0 -127
  150. package/lib/schemas/amendement/Representation.json +0 -67
  151. package/lib/schemas/amendement/Total.json +0 -26
  152. package/lib/schemas/converted_from_type/acteurs_et_organes.json +0 -666
  153. package/lib/schemas/converted_from_type/agendas.json +0 -1100
  154. package/lib/schemas/converted_from_type/amendements.json +0 -3191
  155. package/lib/schemas/converted_from_type/debats.json +0 -682
  156. package/lib/schemas/converted_from_type/deputes.json +0 -26
  157. package/lib/schemas/converted_from_type/dossiers_legislatifs.json +0 -2918
  158. package/lib/schemas/converted_from_type/legislatures.json +0 -16
  159. package/lib/schemas/converted_from_type/questions.json +0 -328
  160. package/lib/schemas/converted_from_type/scrutins.json +0 -393
  161. package/lib/schemas/debat/Contenu.json +0 -75
  162. package/lib/schemas/debat/Debat.json +0 -40
  163. package/lib/schemas/debat/Metadonnees.json +0 -75
  164. package/lib/schemas/debat/Orateur.json +0 -60
  165. package/lib/schemas/debat/Point.json +0 -169
  166. package/lib/schemas/debat/Sommaire.json +0 -71
  167. package/lib/schemas/debat/SommaireElement.json +0 -108
  168. package/lib/schemas/debat/Texte.json +0 -34
  169. package/lib/schemas/document/CodeLibelle.json +0 -25
  170. package/lib/schemas/document/Document.json +0 -385
  171. package/lib/schemas/document/Indexation.json +0 -38
  172. package/lib/schemas/dossier/ActeLegislatif.json +0 -211
  173. package/lib/schemas/dossier/ActeLegislatifBase.json +0 -62
  174. package/lib/schemas/dossier/Agenda.json +0 -23
  175. package/lib/schemas/dossier/ConseilConstitutionnel.json +0 -35
  176. package/lib/schemas/dossier/Decision.json +0 -25
  177. package/lib/schemas/dossier/Dossier.json +0 -124
  178. package/lib/schemas/dossier/EtudeImpact.json +0 -29
  179. package/lib/schemas/dossier/EtudePlf.json +0 -105
  180. package/lib/schemas/dossier/Europe.json +0 -42
  181. package/lib/schemas/dossier/FamCodeLibelle.json +0 -25
  182. package/lib/schemas/dossier/InfoJO.json +0 -23
  183. package/lib/schemas/dossier/Initiateur.json +0 -36
  184. package/lib/schemas/dossier/Motion.json +0 -27
  185. package/lib/schemas/dossier/Promulgation.json +0 -62
  186. package/lib/schemas/dossier/Rapporteur.json +0 -36
  187. package/lib/schemas/dossier/Texte.json +0 -47
  188. package/lib/schemas/organe/CodeTypeOrgane.json +0 -43
  189. package/lib/schemas/organe/Organe.json +0 -136
  190. package/lib/schemas/organe/ViMoDe.json +0 -28
  191. package/lib/schemas/question/Auteur.json +0 -58
  192. package/lib/schemas/question/Cloture.json +0 -28
  193. package/lib/schemas/question/InfoJO.json +0 -40
  194. package/lib/schemas/question/MinAttribElement.json +0 -30
  195. package/lib/schemas/question/Question.json +0 -172
  196. package/lib/schemas/question/Renouvellement.json +0 -17
  197. package/lib/schemas/question/Signalement.json +0 -21
  198. package/lib/schemas/question/Texte.json +0 -24
  199. package/lib/schemas/scrutin/DecompteVoix.json +0 -35
  200. package/lib/schemas/scrutin/Dysfonctionnement.json +0 -50
  201. package/lib/schemas/scrutin/MiseAuPoint.json +0 -53
  202. package/lib/schemas/scrutin/OrganeVotant.json +0 -88
  203. package/lib/schemas/scrutin/Scrutin.json +0 -187
  204. package/lib/schemas/scrutin/Votant.json +0 -37
  205. package/lib/scripts/bugs_helper.d.ts +0 -13
  206. package/lib/scripts/bugs_helper.js +0 -595
  207. package/lib/scripts/bugs_helper.mjs +0 -251
  208. package/lib/scripts/clean_reorganized_data.js +0 -613
  209. package/lib/scripts/clean_reorganized_data.mjs +0 -276
  210. package/lib/scripts/diff_amendements.js +0 -249
  211. package/lib/scripts/diff_amendements.mjs +0 -202
  212. package/lib/scripts/document_dossiers_legislatifs.js +0 -655
  213. package/lib/scripts/document_dossiers_legislatifs.mjs +0 -414
  214. package/lib/scripts/get_today_reunions.js +0 -37
  215. package/lib/scripts/get_today_reunions.mjs +0 -31
  216. package/lib/scripts/merge_scrutins.js +0 -97
  217. package/lib/scripts/merge_scrutins.mjs +0 -47
  218. package/lib/scripts/parse_textes_lois.d.ts +0 -1
  219. package/lib/scripts/parse_textes_lois.js +0 -171
  220. package/lib/scripts/parse_textes_lois.mjs +0 -140
  221. package/lib/scripts/process_open_dataset.js +0 -301
  222. package/lib/scripts/process_open_dataset.mjs +0 -134
  223. package/lib/scripts/raw_types_from_amendements.js +0 -135
  224. package/lib/scripts/raw_types_from_amendements.mjs +0 -134
  225. package/lib/scripts/reorganize_data.js +0 -805
  226. package/lib/scripts/reorganize_data.mjs +0 -517
  227. package/lib/scripts/retrieve_deputes_photos.js +0 -310
  228. package/lib/scripts/retrieve_deputes_photos.mjs +0 -158
  229. package/lib/scripts/retrieve_documents.js +0 -547
  230. package/lib/scripts/retrieve_documents.mjs +0 -242
  231. package/lib/scripts/retrieve_open_data.js +0 -107
  232. package/lib/scripts/retrieve_open_data.mjs +0 -26
  233. package/lib/scripts/retrieve_pending_amendments.js +0 -206
  234. package/lib/scripts/retrieve_pending_amendments.mjs +0 -57
  235. package/lib/scripts/retrieve_senateurs_photos.js +0 -234
  236. package/lib/scripts/retrieve_senateurs_photos.mjs +0 -116
  237. package/lib/scripts/retrieve_textes_lois.d.ts +0 -1
  238. package/lib/scripts/retrieve_textes_lois.js +0 -240
  239. package/lib/scripts/retrieve_textes_lois.mjs +0 -85
  240. package/lib/scripts/shared/cli_helpers.js +0 -89
  241. package/lib/scripts/shared/cli_helpers.mjs +0 -81
  242. package/lib/scripts/test_iter_load.js +0 -155
  243. package/lib/scripts/test_iter_load.mjs +0 -72
  244. package/lib/scripts/test_load.js +0 -26
  245. package/lib/scripts/test_load.mjs +0 -16
  246. package/lib/scripts/test_load_big_files.js +0 -26
  247. package/lib/scripts/test_load_big_files.mjs +0 -16
  248. package/lib/scripts/validate_json.js +0 -353
  249. package/lib/scripts/validate_json.mjs +0 -184
  250. package/lib/shared_types/codes_actes.js +0 -231
  251. package/lib/shared_types/codes_actes.mjs +0 -224
  252. package/lib/strings.js +0 -16
  253. package/lib/strings.mjs +0 -7
  254. package/lib/types/acteurs_et_organes.js +0 -965
  255. package/lib/types/acteurs_et_organes.mjs +0 -906
  256. package/lib/types/agendas.js +0 -628
  257. package/lib/types/agendas.mjs +0 -575
  258. package/lib/types/amendements.js +0 -899
  259. package/lib/types/amendements.mjs +0 -842
  260. package/lib/types/debats.js +0 -619
  261. package/lib/types/debats.mjs +0 -562
  262. package/lib/types/dossiers_legislatifs.js +0 -1188
  263. package/lib/types/dossiers_legislatifs.mjs +0 -1130
  264. package/lib/types/legislatures.js +0 -17
  265. package/lib/types/legislatures.mjs +0 -10
  266. package/lib/types/questions.js +0 -454
  267. package/lib/types/questions.mjs +0 -401
  268. package/lib/types/scrutins.js +0 -556
  269. package/lib/types/scrutins.mjs +0 -503
  270. package/lib/urls.js +0 -325
  271. package/lib/urls.mjs +0 -258
  272. /package/lib/{bugs/acteur-00010/plugin.test.d.ts → scripts/add_links_to_documents.d.ts} +0 -0
  273. /package/lib/{bugs/agenda-00002/plugin.test.d.ts → scripts/copy-schemas.d.ts} +0 -0
  274. /package/lib/{bugs/agenda-00008/plugin.test.d.ts → scripts/generate-json-schemas.d.ts} +0 -0
@@ -1,3 +1,2 @@
1
- export { parseTexteLoi, retrieveTexteLoiParsed } from "./documents";
2
- export { parseTexte } from "./textes_lois";
3
- export { iterRechercheAmendements, iterRechercheRawAmendements, } from "./recherche_amendements";
1
+ export { parseTexte } from './textes_lois';
2
+ export { iterRechercheAmendements, iterRechercheRawAmendements, } from './recherche_amendements';
@@ -0,0 +1 @@
1
+ export declare function parseTexte(assembleeUrl: string, page: string): any;
@@ -1,5 +1,5 @@
1
- import { Amendement as RawAmendement } from "../raw_types/amendements";
2
- import { Amendement } from "../types/amendements";
1
+ import { Amendement as RawAmendement } from '../raw_types/amendements';
2
+ import { Amendement } from '../types/amendements';
3
3
  export declare function iterRechercheAmendements(amendementsSearchCacheDir: string, url: string, incremental: boolean, minDateDepot?: string | null, minDateExamen?: string | null, options?: {
4
4
  silent?: boolean;
5
5
  verbose?: boolean;
@@ -1,23 +1 @@
1
- export declare function parseTexte(assembleeUrl: string, page: string): {
2
- error: {
3
- code: number;
4
- message: string;
5
- };
6
- html: string;
7
- page: string;
8
- subdivisions?: undefined;
9
- url?: undefined;
10
- } | {
11
- error: null;
12
- html: string;
13
- page: string;
14
- subdivisions: {
15
- id: string;
16
- type: string;
17
- niveau: number;
18
- niveauRelatif: number;
19
- titres: object[];
20
- alineas: object[];
21
- }[];
22
- url: string;
23
- };
1
+ export declare function parseTexte(assembleeUrl: string, page: string): any;
package/lib/parsers.js ADDED
@@ -0,0 +1,398 @@
1
+ import e from "node:assert";
2
+ import { JSDOM as z } from "jsdom";
3
+ import { t as Q, a as v, p as k, q as J } from "./parse-Ccs6wcUg.js";
4
+ import Z from "deep-equal";
5
+ import q from "fs-extra";
6
+ import K from "front-matter";
7
+ import W from "js-yaml";
8
+ import F from "node:path";
9
+ import { parse as X } from "node-html-parser";
10
+ import { d as G } from "./amendements-79bwpkvR.js";
11
+ import { C as ee } from "./amendements-CV3s5a0M.js";
12
+ function te(i) {
13
+ const t = [
14
+ { regex: /^(RAPPORT_)?ANNEXE(_|$)|^ETAT_/, level: 0, name: "Annexe" },
15
+ { regex: /^TOME_/, level: 1, name: "Tome" },
16
+ {
17
+ regex: /^PARTIE_|^(PREMIERE|SECONDE|DEUXIEME|TROISIEME|QUATRIEME)_PARTIE(_|$)/,
18
+ level: 2,
19
+ name: "Partie"
20
+ },
21
+ { regex: /^LIVRE_/, level: 3, name: "Livre" },
22
+ { regex: /^TITRE_/, level: 4, name: "Titre" },
23
+ { regex: /^SOUSTITRE_/, level: 5, name: "SousTitre" },
24
+ { regex: /^CHAPITRE_/, level: 6, name: "Chapitre" },
25
+ { regex: /^SECTION_/, level: 7, name: "Section" },
26
+ { regex: /^SOUSSECTION_/, level: 8, name: "SousSection" },
27
+ { regex: /^EXPOSE_DES_MOTIFS$/, level: 9, name: "ExposeMotifs" },
28
+ { regex: /^ARTICLES?(?!.*«)/, level: 9, name: "Article" },
29
+ { regex: /^(PROJET|PROPOSITION)_DE_LOI(_|$)/, level: -1, name: "PPL" },
30
+ { regex: /^PROPOSITION_DE_RESOLUTION(_|$)/, level: -1, name: "PR" },
31
+ {
32
+ regex: /^JEUX_OLYMPIQUES_ET_PARALYMPIQUES_DE_2024$/,
33
+ level: -1,
34
+ name: "JO"
35
+ },
36
+ {
37
+ regex: /^TEXTE_DE_LA_COMMISSION_MIXTE_PARITAIRE$/,
38
+ level: -1,
39
+ name: "CMP"
40
+ }
41
+ ];
42
+ for (const { regex: a, level: r, name: m } of t)
43
+ if (a.test(i))
44
+ return [r, m];
45
+ return [null, ""];
46
+ }
47
+ function P(i) {
48
+ return i?.replace(/[\n\t]+/g, "").trim() || "";
49
+ }
50
+ const ne = [
51
+ /^Délibéré en séance publique/,
52
+ /^Fait le/,
53
+ /^La Présidente,$/,
54
+ /^Le Président,$/,
55
+ /^Signé/
56
+ ];
57
+ function ae(i) {
58
+ return ne.some((t) => t.test(i));
59
+ }
60
+ function he(i, t) {
61
+ const a = t.replace(/(<style[\w\W]+style>)/g, ""), { window: r } = new z(a), m = r.document;
62
+ e.strictEqual(m.children.length, 1);
63
+ const d = m.children[0];
64
+ e.strictEqual(d.children.length, 2);
65
+ const u = d.children[1];
66
+ let n = u.children?.[1];
67
+ if (u.children.length < 3 || n.tagName !== "BR")
68
+ return {
69
+ error: null,
70
+ subdivisions: [],
71
+ url: i
72
+ };
73
+ e.strictEqual(u.children[0].tagName, "DIV");
74
+ let o = null, s = !1, f = null, l = "section";
75
+ const c = [], S = [];
76
+ let p = [], g = [];
77
+ try {
78
+ for (; l !== null; )
79
+ switch (l) {
80
+ case "section":
81
+ n.nextElementSibling ? (n = n.nextElementSibling, n.tagName === "DIV" ? (o = n.firstElementChild, o && !n.id.includes("ftn") && (l = "alineaElement")) : e(
82
+ ["BR", "HR", "P"].includes(n.tagName),
83
+ `Unexpected tag name "${n.tagName}" for body child section`
84
+ )) : l = null;
85
+ break;
86
+ case "alineaElement":
87
+ if (!o) {
88
+ l = "nextAlineaElement";
89
+ break;
90
+ }
91
+ switch (o.tagName) {
92
+ case "DIV":
93
+ case "OL":
94
+ case "BR":
95
+ case "SPAN":
96
+ l = "nextAlineaElement";
97
+ break;
98
+ case "H4":
99
+ case "P":
100
+ case "TABLE":
101
+ break;
102
+ default:
103
+ return {
104
+ error: {
105
+ code: -2,
106
+ message: `Unexpected tag name for alinea element: ${o.tagName}`
107
+ }
108
+ };
109
+ }
110
+ const E = P(o.textContent).normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\(nouveau\)/, "").replace(/\(Pour coordination\)/, "").replace(/\(Supprimés?\)/, "").replace(/ /g, " ").replace(/[\-,.…]/g, "").trim().replace(/ {1,}/g, "_").toUpperCase(), [x, T] = te(E);
111
+ if (!E || x !== null && x < 0) {
112
+ l = "nextAlineaElement";
113
+ break;
114
+ }
115
+ const h = P(o.outerHTML), $ = P(o.textContent);
116
+ if (x === null) {
117
+ if (ae($)) {
118
+ l = "nextAlineaElement";
119
+ break;
120
+ }
121
+ g.length === 0 || s && p.length === 0 ? g.push({ texte: $, html: h }) : p.push({ texte: $, html: h }), s && g.length >= 2 && (s = !1);
122
+ } else {
123
+ for (f = x; c.length > 0 && f < c[c.length - 1]; )
124
+ c.pop();
125
+ (c.length === 0 || f > c[c.length - 1]) && c.push(f), p = [], g = [{ texte: $, html: h }], s = !E.match(/^ARTICLES?_/) && !E.match(/^EXPOSE_DES_MOTIFS$/), S.push({
126
+ id: `D_${E}`,
127
+ type: T,
128
+ niveau: f + 1,
129
+ niveauRelatif: c.length,
130
+ titres: g,
131
+ alineas: p
132
+ });
133
+ }
134
+ l = "nextAlineaElement";
135
+ break;
136
+ case "nextAlineaElement":
137
+ if (!o) {
138
+ l = "section";
139
+ break;
140
+ }
141
+ o = o.nextElementSibling, l = o ? "alineaElement" : "section";
142
+ break;
143
+ default:
144
+ throw new Error(`Unexpected state: ${l}`);
145
+ }
146
+ const w = {
147
+ error: null,
148
+ subdivisions: S,
149
+ url: i
150
+ };
151
+ return p = [], g = [], w;
152
+ } finally {
153
+ r.close();
154
+ }
155
+ }
156
+ function j(i, t) {
157
+ const a = Q(i, t?.in);
158
+ if (isNaN(+a))
159
+ throw new RangeError("Invalid time value");
160
+ const r = t?.format ?? "extended", m = t?.representation ?? "complete";
161
+ let d = "", u = "";
162
+ const n = r === "extended" ? "-" : "", o = r === "extended" ? ":" : "";
163
+ if (m !== "time") {
164
+ const s = v(a.getDate(), 2), f = v(a.getMonth() + 1, 2);
165
+ d = `${v(a.getFullYear(), 4)}${n}${f}${n}${s}`;
166
+ }
167
+ if (m !== "date") {
168
+ const s = a.getTimezoneOffset();
169
+ if (s !== 0) {
170
+ const g = Math.abs(s), w = v(Math.trunc(g / 60), 2), E = v(g % 60, 2);
171
+ u = `${s < 0 ? "+" : "-"}${w}:${E}`;
172
+ } else
173
+ u = "Z";
174
+ const f = v(a.getHours(), 2), l = v(a.getMinutes(), 2), c = v(a.getSeconds(), 2), S = d === "" ? "" : "T", p = [f, l, c].join(o);
175
+ d = `${d}${S}${p}${u}`;
176
+ }
177
+ return d;
178
+ }
179
+ async function* Se(i, t, a, r, m, d = {}) {
180
+ for await (const [
181
+ u,
182
+ n
183
+ ] of le(
184
+ i,
185
+ t,
186
+ a,
187
+ r,
188
+ m,
189
+ d
190
+ ))
191
+ G(n), yield [
192
+ u,
193
+ ee.toAmendement(JSON.stringify(n))
194
+ ];
195
+ }
196
+ async function* le(i, t, a, r, m, d = {}) {
197
+ await q.ensureDir(i), e.strictEqual(
198
+ /[?&]date_depot=/.exec(t),
199
+ null,
200
+ `URL ${t} already contains a deposit date`
201
+ ), e.strictEqual(
202
+ /[?&]order=/.exec(t),
203
+ null,
204
+ `URL ${t} already contains a sort order`
205
+ ), e.strictEqual(
206
+ /[?&]page=/.exec(t),
207
+ null,
208
+ `URL ${t} already contains a page number`
209
+ ), a && e.notStrictEqual(
210
+ /[?&]etat=/.exec(t),
211
+ null,
212
+ `In incremental mode, URL ${t} must contain an "etat" query parameter`
213
+ ), t += (t.includes("?") ? "&" : "?") + "order=date_depot,desc&page=1", r != null && e.notStrictEqual(
214
+ /\d{4}-\d{2}-\d{2}/.exec(r),
215
+ null,
216
+ `Invalid format for minimum date: ${r}`
217
+ );
218
+ let u = 0;
219
+ e: for (; ; ) {
220
+ d.verbose && console.log(`Fetching amendements search page at ${t}…`);
221
+ const n = await fetch(t);
222
+ e(
223
+ n.ok,
224
+ `Retrieval of search page at ${t} failed with error: ${n.status} ${n.statusText}`
225
+ );
226
+ const o = await n.text(), s = X(o);
227
+ if (s.querySelector("div.no-result") !== null)
228
+ break;
229
+ const f = s.querySelector("div.mirror-card-subtitle");
230
+ e.notStrictEqual(f, null);
231
+ const l = parseInt(/\d+/.exec(f.text)[0]), c = s.querySelector(
232
+ "div.amendement-list--results-table"
233
+ );
234
+ e.notStrictEqual(c, null);
235
+ const S = c.querySelector("table");
236
+ e.notStrictEqual(S, null);
237
+ const p = S.querySelector("tfoot > tr");
238
+ e.notStrictEqual(p, null);
239
+ const g = p.querySelectorAll("td, th").map((T) => T.text);
240
+ e(
241
+ Z(g, [
242
+ "",
243
+ "n°",
244
+ "Dossier législatif",
245
+ "Emplacement",
246
+ "Auteur",
247
+ "État",
248
+ "Sort",
249
+ "Date d'examen",
250
+ "Examiné par",
251
+ "Texte visé",
252
+ "Date de dépôt"
253
+ ]),
254
+ `Unexpected columns in ${JSON.stringify(g, null, 2)}`
255
+ );
256
+ const w = S.querySelectorAll("tbody > tr");
257
+ e.notStrictEqual(w.length, 0);
258
+ for (const T of w) {
259
+ if (u++, r != null || m != null) {
260
+ const b = T.querySelectorAll("td");
261
+ if (e.strictEqual(
262
+ b.length,
263
+ 11,
264
+ `Unexpected number of columns in amendment row: ${T.outerHTML}`
265
+ ), r != null) {
266
+ const R = b[10];
267
+ if (j(
268
+ k(R.text, "d MMMM y", /* @__PURE__ */ new Date(), {
269
+ locale: J
270
+ }),
271
+ { representation: "date" }
272
+ ) < r)
273
+ break e;
274
+ }
275
+ if (m != null) {
276
+ const R = b[7];
277
+ if (R.text && j(
278
+ k(R.text, "d MMMM y", /* @__PURE__ */ new Date(), {
279
+ locale: J
280
+ }),
281
+ { representation: "date" }
282
+ ) < m)
283
+ continue;
284
+ }
285
+ }
286
+ const h = T.getAttribute("data-href");
287
+ e.notStrictEqual(h, void 0);
288
+ const $ = h.split("/");
289
+ e.strictEqual(
290
+ $[0],
291
+ "",
292
+ `Unexpected URL path for amendement: ${h}`
293
+ ), e.strictEqual(
294
+ $[1],
295
+ "dyn",
296
+ `Unexpected URL path for amendement: ${h}`
297
+ );
298
+ const A = F.join(
299
+ i,
300
+ ...$.slice(2)
301
+ ) + ".html";
302
+ await q.ensureDir(F.dirname(A));
303
+ const y = await q.pathExists(
304
+ A
305
+ ) ? await q.readFile(A, "utf8") : null, L = T.outerHTML, U = `---
306
+ ${W.dump(
307
+ {
308
+ position: l - u,
309
+ search: t.replace(/&page=[\d]+/, "")
310
+ },
311
+ {
312
+ sortKeys: !0
313
+ }
314
+ )}---
315
+
316
+ ${L}`;
317
+ if (U === y) {
318
+ if (a)
319
+ break e;
320
+ continue;
321
+ }
322
+ if (y !== null && K(y).body === L)
323
+ continue;
324
+ d.verbose && console.log(
325
+ y === null ? `Adding amendement search cache: ${A}…` : `Updating amendement search cache: ${A}…`
326
+ );
327
+ const _ = new URL(
328
+ h,
329
+ "https://www.assemblee-nationale.fr/"
330
+ ).toString(), O = await fetch(_);
331
+ if (O.status === 404) {
332
+ console.log(
333
+ `Amendement HTML page not found at ${_}. Skipping.`
334
+ );
335
+ continue;
336
+ }
337
+ e(
338
+ O.ok,
339
+ `Retrieval of amendement HTML page at ${_} failed with error: ${O.status} ${O.statusText}`
340
+ );
341
+ const V = await O.text(), N = X(V).querySelectorAll(
342
+ "li.mirror-card-header--options--content--item"
343
+ );
344
+ e.notStrictEqual(N.length, 0);
345
+ const I = N.find((b) => {
346
+ const R = b.querySelector("a > span");
347
+ return e.notStrictEqual(
348
+ R,
349
+ null,
350
+ `No <span> in <a> found in ${b.toString()}`
351
+ ), R.text === "Version JSON";
352
+ });
353
+ e.notStrictEqual(
354
+ I,
355
+ void 0,
356
+ `No JSON version found for amendement at ${_}`
357
+ );
358
+ const C = I.querySelector("a");
359
+ e.notStrictEqual(
360
+ C,
361
+ null,
362
+ `No <a> found in ${I.toString()}`
363
+ );
364
+ const H = C.getAttribute("href");
365
+ e.notStrictEqual(
366
+ H,
367
+ void 0,
368
+ `No URL found for JSON version of amendement: ${I.toString()}`
369
+ );
370
+ const D = new URL(
371
+ H,
372
+ "https://www.assemblee-nationale.fr/"
373
+ ).toString(), M = await fetch(D);
374
+ e(
375
+ M.ok,
376
+ `Retrieval of amendement JSON page at ${D} failed with error: ${M.status} ${M.statusText}`
377
+ );
378
+ const B = await M.json();
379
+ yield [h, B], await q.writeFile(
380
+ A,
381
+ U,
382
+ "utf8"
383
+ );
384
+ }
385
+ const E = s.querySelector(
386
+ "div.an-pagination--item > i.an-icons-chevron-right ~ a"
387
+ );
388
+ if (E === null)
389
+ break;
390
+ const x = E.getAttribute("href");
391
+ e.notStrictEqual(x, void 0), t = new URL(x, "https://www.assemblee-nationale.fr/").toString();
392
+ }
393
+ }
394
+ export {
395
+ Se as iterRechercheAmendements,
396
+ le as iterRechercheRawAmendements,
397
+ he as parseTexte
398
+ };
@@ -17,7 +17,7 @@ export interface CompteRendu {
17
17
  }
18
18
  export interface Contenu {
19
19
  quantiemes: Quantiemes;
20
- ouvertureSeance: Point[] | Point;
20
+ ouvertureSeance?: Point[] | Point;
21
21
  point: Point[] | Point;
22
22
  finSeance?: FinSeance;
23
23
  paragraphe?: Point[];
@@ -82,7 +82,7 @@ export interface Point {
82
82
  adt?: string;
83
83
  ssadt?: string;
84
84
  roledebat?: string;
85
- changementPresidence?: Point;
85
+ changementPresidence?: Point[] | Point;
86
86
  type_debat?: string;
87
87
  decision?: Decision;
88
88
  ouvertureSeance?: Point;
@@ -1,4 +1,4 @@
1
- import { CodeActe } from "../shared_types/codes_actes";
1
+ import { CodeActe } from '../shared_types/codes_actes';
2
2
  export interface Document {
3
3
  document: DocumentDocument | DocumentSupprime;
4
4
  }