@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.
- package/README.md +8 -1
- package/lib/amendements-79bwpkvR.js +154 -0
- package/lib/amendements-CV3s5a0M.js +667 -0
- package/lib/cleaners/index.d.ts +9 -9
- package/lib/cleaners.js +564 -0
- package/lib/datasets.d.ts +3 -3
- package/lib/dossiers_legislatifs.d.ts +2 -2
- package/lib/index.d.ts +17 -22
- package/lib/index.js +1542 -314
- package/lib/inserters.d.ts +5 -5
- package/lib/loaders-9mHdTl9L.js +4158 -0
- package/lib/loaders.d.ts +12 -12
- package/lib/loaders.js +29 -1689
- package/lib/organes.d.ts +1 -1
- package/lib/parse-Ccs6wcUg.js +2512 -0
- package/lib/parsers/index.d.ts +2 -3
- package/lib/parsers/plf.d.ts +1 -0
- package/lib/parsers/recherche_amendements.d.ts +2 -2
- package/lib/parsers/textes_lois.d.ts +1 -23
- package/lib/parsers.js +398 -0
- package/lib/raw_types/debats.d.ts +2 -2
- package/lib/raw_types/dossiers_legislatifs.d.ts +1 -1
- package/lib/schemas/acteurs_et_organes.json +1166 -0
- package/lib/schemas/agendas.json +1745 -0
- package/lib/schemas/amendements.json +2085 -0
- package/lib/schemas/debats.json +842 -0
- package/lib/schemas/dossiers_legislatifs.json +3874 -0
- package/lib/schemas/legislatures.json +17 -0
- package/lib/schemas/questions.json +704 -0
- package/lib/schemas/scrutins.json +701 -0
- package/lib/scripts/retrieve_deputes_photos.d.ts +1 -1
- package/lib/types/acteurs_et_organes.d.ts +340 -0
- package/lib/types/agendas.d.ts +236 -10
- package/lib/types/amendements.d.ts +276 -1
- package/lib/types/debats.d.ts +52 -2
- package/lib/types/dossiers_legislatifs.d.ts +403 -9
- package/lib/types/questions.d.ts +99 -2
- package/lib/types/scrutins.d.ts +101 -0
- package/lib/urls.d.ts +2 -2
- package/package.json +32 -94
- package/lib/api.js +0 -52
- package/lib/api.mjs +0 -45
- package/lib/bugs/acteur-00010/plugin.test.js +0 -90
- package/lib/bugs/acteur-00010/plugin.test.mjs +0 -33
- package/lib/bugs/acteur-00010.d.ts +0 -7
- package/lib/bugs/acteur-00010.js +0 -116
- package/lib/bugs/acteur-00010.mjs +0 -26
- package/lib/bugs/agenda-00002/plugin.test.js +0 -124
- package/lib/bugs/agenda-00002/plugin.test.mjs +0 -50
- package/lib/bugs/agenda-00002.d.ts +0 -15
- package/lib/bugs/agenda-00002.js +0 -406
- package/lib/bugs/agenda-00002.mjs +0 -172
- package/lib/bugs/agenda-00008/plugin.test.js +0 -92
- package/lib/bugs/agenda-00008/plugin.test.mjs +0 -31
- package/lib/bugs/agenda-00008.d.ts +0 -7
- package/lib/bugs/agenda-00008.js +0 -123
- package/lib/bugs/agenda-00008.mjs +0 -26
- package/lib/bugs/agenda-00011/plugin.test.d.ts +0 -1
- package/lib/bugs/agenda-00011/plugin.test.js +0 -263
- package/lib/bugs/agenda-00011/plugin.test.mjs +0 -152
- package/lib/bugs/agenda-00011.d.ts +0 -16
- package/lib/bugs/agenda-00011.js +0 -333
- package/lib/bugs/agenda-00011.mjs +0 -125
- package/lib/bugs.d.ts +0 -21
- package/lib/bugs.js +0 -452
- package/lib/bugs.mjs +0 -70
- package/lib/cleaners/actes_legislatifs.js +0 -315
- package/lib/cleaners/actes_legislatifs.mjs +0 -253
- package/lib/cleaners/acteurs.js +0 -265
- package/lib/cleaners/acteurs.mjs +0 -180
- package/lib/cleaners/amendements.js +0 -294
- package/lib/cleaners/amendements.mjs +0 -227
- package/lib/cleaners/debats.js +0 -12
- package/lib/cleaners/debats.mjs +0 -5
- package/lib/cleaners/documents.js +0 -205
- package/lib/cleaners/documents.mjs +0 -133
- package/lib/cleaners/dossiers_legislatifs.js +0 -131
- package/lib/cleaners/dossiers_legislatifs.mjs +0 -70
- package/lib/cleaners/index.js +0 -70
- package/lib/cleaners/index.mjs +0 -10
- package/lib/cleaners/organes.js +0 -65
- package/lib/cleaners/organes.mjs +0 -48
- package/lib/cleaners/questions.js +0 -12
- package/lib/cleaners/questions.mjs +0 -5
- package/lib/cleaners/reunions.js +0 -312
- package/lib/cleaners/reunions.mjs +0 -255
- package/lib/cleaners/scrutins.js +0 -340
- package/lib/cleaners/scrutins.mjs +0 -221
- package/lib/cleaners/xml.js +0 -74
- package/lib/cleaners/xml.mjs +0 -59
- package/lib/datasets.js +0 -837
- package/lib/datasets.mjs +0 -755
- package/lib/dates.js +0 -124
- package/lib/dates.mjs +0 -100
- package/lib/dossiers_legislatifs.js +0 -346
- package/lib/dossiers_legislatifs.mjs +0 -208
- package/lib/file_systems.js +0 -162
- package/lib/file_systems.mjs +0 -62
- package/lib/git.js +0 -223
- package/lib/git.mjs +0 -151
- package/lib/index.mjs +0 -17
- package/lib/inserters.js +0 -521
- package/lib/inserters.mjs +0 -337
- package/lib/loaders.mjs +0 -886
- package/lib/logger.js +0 -35
- package/lib/logger.mjs +0 -26
- package/lib/organes.js +0 -22
- package/lib/organes.mjs +0 -15
- package/lib/parsers/documents.d.ts +0 -62
- package/lib/parsers/documents.js +0 -453
- package/lib/parsers/documents.mjs +0 -370
- package/lib/parsers/index.js +0 -40
- package/lib/parsers/index.mjs +0 -4
- package/lib/parsers/recherche_amendements.js +0 -403
- package/lib/parsers/recherche_amendements.mjs +0 -167
- package/lib/parsers/textes_lois.js +0 -307
- package/lib/parsers/textes_lois.mjs +0 -264
- package/lib/raw_types/acteurs_et_organes.js +0 -1215
- package/lib/raw_types/acteurs_et_organes.mjs +0 -1148
- package/lib/raw_types/agendas.js +0 -777
- package/lib/raw_types/agendas.mjs +0 -724
- package/lib/raw_types/amendements.js +0 -1052
- package/lib/raw_types/amendements.mjs +0 -993
- package/lib/raw_types/debats.js +0 -630
- package/lib/raw_types/debats.mjs +0 -573
- package/lib/raw_types/dossiers_legislatifs.js +0 -1529
- package/lib/raw_types/dossiers_legislatifs.mjs +0 -1471
- package/lib/raw_types/questions.js +0 -469
- package/lib/raw_types/questions.mjs +0 -416
- package/lib/raw_types/scrutins.js +0 -651
- package/lib/raw_types/scrutins.mjs +0 -598
- package/lib/schemas/acteur/Acteur.json +0 -56
- package/lib/schemas/acteur/AdresseElectronique.json +0 -52
- package/lib/schemas/acteur/AdressePostale.json +0 -75
- package/lib/schemas/acteur/Civ.json +0 -14
- package/lib/schemas/acteur/Collaborateur.json +0 -29
- package/lib/schemas/acteur/EtatCivil.json +0 -51
- package/lib/schemas/acteur/Ident.json +0 -40
- package/lib/schemas/acteur/Lieu.json +0 -66
- package/lib/schemas/acteur/Mandat.json +0 -192
- package/lib/schemas/acteur/Profession.json +0 -46
- package/lib/schemas/agenda/Agenda.json +0 -318
- package/lib/schemas/agenda/CycleDeVie.json +0 -45
- package/lib/schemas/agenda/PointOdj.json +0 -82
- package/lib/schemas/amendement/Amendement.json +0 -246
- package/lib/schemas/amendement/Diff.json +0 -25
- package/lib/schemas/amendement/DispositifAmdtCredit.json +0 -85
- package/lib/schemas/amendement/Identifiant.json +0 -62
- package/lib/schemas/amendement/PointeurFragmentTexte.json +0 -127
- package/lib/schemas/amendement/Representation.json +0 -67
- package/lib/schemas/amendement/Total.json +0 -26
- package/lib/schemas/converted_from_type/acteurs_et_organes.json +0 -666
- package/lib/schemas/converted_from_type/agendas.json +0 -1100
- package/lib/schemas/converted_from_type/amendements.json +0 -3191
- package/lib/schemas/converted_from_type/debats.json +0 -682
- package/lib/schemas/converted_from_type/deputes.json +0 -26
- package/lib/schemas/converted_from_type/dossiers_legislatifs.json +0 -2918
- package/lib/schemas/converted_from_type/legislatures.json +0 -16
- package/lib/schemas/converted_from_type/questions.json +0 -328
- package/lib/schemas/converted_from_type/scrutins.json +0 -393
- package/lib/schemas/debat/Contenu.json +0 -75
- package/lib/schemas/debat/Debat.json +0 -40
- package/lib/schemas/debat/Metadonnees.json +0 -75
- package/lib/schemas/debat/Orateur.json +0 -60
- package/lib/schemas/debat/Point.json +0 -169
- package/lib/schemas/debat/Sommaire.json +0 -71
- package/lib/schemas/debat/SommaireElement.json +0 -108
- package/lib/schemas/debat/Texte.json +0 -34
- package/lib/schemas/document/CodeLibelle.json +0 -25
- package/lib/schemas/document/Document.json +0 -385
- package/lib/schemas/document/Indexation.json +0 -38
- package/lib/schemas/dossier/ActeLegislatif.json +0 -211
- package/lib/schemas/dossier/ActeLegislatifBase.json +0 -62
- package/lib/schemas/dossier/Agenda.json +0 -23
- package/lib/schemas/dossier/ConseilConstitutionnel.json +0 -35
- package/lib/schemas/dossier/Decision.json +0 -25
- package/lib/schemas/dossier/Dossier.json +0 -124
- package/lib/schemas/dossier/EtudeImpact.json +0 -29
- package/lib/schemas/dossier/EtudePlf.json +0 -105
- package/lib/schemas/dossier/Europe.json +0 -42
- package/lib/schemas/dossier/FamCodeLibelle.json +0 -25
- package/lib/schemas/dossier/InfoJO.json +0 -23
- package/lib/schemas/dossier/Initiateur.json +0 -36
- package/lib/schemas/dossier/Motion.json +0 -27
- package/lib/schemas/dossier/Promulgation.json +0 -62
- package/lib/schemas/dossier/Rapporteur.json +0 -36
- package/lib/schemas/dossier/Texte.json +0 -47
- package/lib/schemas/organe/CodeTypeOrgane.json +0 -43
- package/lib/schemas/organe/Organe.json +0 -136
- package/lib/schemas/organe/ViMoDe.json +0 -28
- package/lib/schemas/question/Auteur.json +0 -58
- package/lib/schemas/question/Cloture.json +0 -28
- package/lib/schemas/question/InfoJO.json +0 -40
- package/lib/schemas/question/MinAttribElement.json +0 -30
- package/lib/schemas/question/Question.json +0 -172
- package/lib/schemas/question/Renouvellement.json +0 -17
- package/lib/schemas/question/Signalement.json +0 -21
- package/lib/schemas/question/Texte.json +0 -24
- package/lib/schemas/scrutin/DecompteVoix.json +0 -35
- package/lib/schemas/scrutin/Dysfonctionnement.json +0 -50
- package/lib/schemas/scrutin/MiseAuPoint.json +0 -53
- package/lib/schemas/scrutin/OrganeVotant.json +0 -88
- package/lib/schemas/scrutin/Scrutin.json +0 -187
- package/lib/schemas/scrutin/Votant.json +0 -37
- package/lib/scripts/bugs_helper.d.ts +0 -13
- package/lib/scripts/bugs_helper.js +0 -595
- package/lib/scripts/bugs_helper.mjs +0 -251
- package/lib/scripts/clean_reorganized_data.js +0 -613
- package/lib/scripts/clean_reorganized_data.mjs +0 -276
- package/lib/scripts/diff_amendements.js +0 -249
- package/lib/scripts/diff_amendements.mjs +0 -202
- package/lib/scripts/document_dossiers_legislatifs.js +0 -655
- package/lib/scripts/document_dossiers_legislatifs.mjs +0 -414
- package/lib/scripts/get_today_reunions.js +0 -37
- package/lib/scripts/get_today_reunions.mjs +0 -31
- package/lib/scripts/merge_scrutins.js +0 -97
- package/lib/scripts/merge_scrutins.mjs +0 -47
- package/lib/scripts/parse_textes_lois.d.ts +0 -1
- package/lib/scripts/parse_textes_lois.js +0 -171
- package/lib/scripts/parse_textes_lois.mjs +0 -140
- package/lib/scripts/process_open_dataset.js +0 -301
- package/lib/scripts/process_open_dataset.mjs +0 -134
- package/lib/scripts/raw_types_from_amendements.js +0 -135
- package/lib/scripts/raw_types_from_amendements.mjs +0 -134
- package/lib/scripts/reorganize_data.js +0 -805
- package/lib/scripts/reorganize_data.mjs +0 -517
- package/lib/scripts/retrieve_deputes_photos.js +0 -310
- package/lib/scripts/retrieve_deputes_photos.mjs +0 -158
- package/lib/scripts/retrieve_documents.js +0 -547
- package/lib/scripts/retrieve_documents.mjs +0 -242
- package/lib/scripts/retrieve_open_data.js +0 -107
- package/lib/scripts/retrieve_open_data.mjs +0 -26
- package/lib/scripts/retrieve_pending_amendments.js +0 -206
- package/lib/scripts/retrieve_pending_amendments.mjs +0 -57
- package/lib/scripts/retrieve_senateurs_photos.js +0 -234
- package/lib/scripts/retrieve_senateurs_photos.mjs +0 -116
- package/lib/scripts/retrieve_textes_lois.d.ts +0 -1
- package/lib/scripts/retrieve_textes_lois.js +0 -240
- package/lib/scripts/retrieve_textes_lois.mjs +0 -85
- package/lib/scripts/shared/cli_helpers.js +0 -89
- package/lib/scripts/shared/cli_helpers.mjs +0 -81
- package/lib/scripts/test_iter_load.js +0 -155
- package/lib/scripts/test_iter_load.mjs +0 -72
- package/lib/scripts/test_load.js +0 -26
- package/lib/scripts/test_load.mjs +0 -16
- package/lib/scripts/test_load_big_files.js +0 -26
- package/lib/scripts/test_load_big_files.mjs +0 -16
- package/lib/scripts/validate_json.js +0 -353
- package/lib/scripts/validate_json.mjs +0 -184
- package/lib/shared_types/codes_actes.js +0 -231
- package/lib/shared_types/codes_actes.mjs +0 -224
- package/lib/strings.js +0 -16
- package/lib/strings.mjs +0 -7
- package/lib/types/acteurs_et_organes.js +0 -965
- package/lib/types/acteurs_et_organes.mjs +0 -906
- package/lib/types/agendas.js +0 -628
- package/lib/types/agendas.mjs +0 -575
- package/lib/types/amendements.js +0 -899
- package/lib/types/amendements.mjs +0 -842
- package/lib/types/debats.js +0 -619
- package/lib/types/debats.mjs +0 -562
- package/lib/types/dossiers_legislatifs.js +0 -1188
- package/lib/types/dossiers_legislatifs.mjs +0 -1130
- package/lib/types/legislatures.js +0 -17
- package/lib/types/legislatures.mjs +0 -10
- package/lib/types/questions.js +0 -454
- package/lib/types/questions.mjs +0 -401
- package/lib/types/scrutins.js +0 -556
- package/lib/types/scrutins.mjs +0 -503
- package/lib/urls.js +0 -325
- package/lib/urls.mjs +0 -258
- /package/lib/{bugs/acteur-00010/plugin.test.d.ts → scripts/add_links_to_documents.d.ts} +0 -0
- /package/lib/{bugs/agenda-00002/plugin.test.d.ts → scripts/copy-schemas.d.ts} +0 -0
- /package/lib/{bugs/agenda-00008/plugin.test.d.ts → scripts/generate-json-schemas.d.ts} +0 -0
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import assert from "assert";
|
|
2
|
-
import { formatISO } from "date-fns/formatISO";
|
|
3
|
-
import { fr as frLocale } from "date-fns/locale/fr";
|
|
4
|
-
import { parse as parseDate } from "date-fns/parse";
|
|
5
|
-
import deepEqual from "deep-equal";
|
|
6
|
-
import fs from "fs-extra";
|
|
7
|
-
import frontMatter from "front-matter";
|
|
8
|
-
import jsYaml from "js-yaml";
|
|
9
|
-
import { parse as parseHtml } from "node-html-parser";
|
|
10
|
-
import path from "path";
|
|
11
|
-
import { cleanAmendement } from "../cleaners/index.mjs";
|
|
12
|
-
import { Convert as AmendementsConvert } from "../types/amendements.mjs";
|
|
13
|
-
export async function* iterRechercheAmendements(amendementsSearchCacheDir, url, incremental, minDateDepot, minDateExamen, options = {}) {
|
|
14
|
-
for await (const [amendementUrlPath, amendement] of iterRechercheRawAmendements(amendementsSearchCacheDir, url, incremental, minDateDepot, minDateExamen, options)) {
|
|
15
|
-
cleanAmendement(amendement);
|
|
16
|
-
// Double conversion, to convert strings to dates.
|
|
17
|
-
yield [amendementUrlPath, AmendementsConvert.toAmendement(JSON.stringify(amendement))];
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
export async function* iterRechercheRawAmendements(amendementsSearchCacheDir, url, incremental, minDateDepot, minDateExamen, options = {}) {
|
|
21
|
-
await fs.ensureDir(amendementsSearchCacheDir);
|
|
22
|
-
assert.strictEqual(/[?&]date_depot=/.exec(url), null, `URL ${url} already contains a deposit date`);
|
|
23
|
-
assert.strictEqual(/[?&]order=/.exec(url), null, `URL ${url} already contains a sort order`);
|
|
24
|
-
assert.strictEqual(/[?&]page=/.exec(url), null, `URL ${url} already contains a page number`);
|
|
25
|
-
if (incremental) {
|
|
26
|
-
assert.notStrictEqual(/[?&]etat=/.exec(url), null, `In incremental mode, URL ${url} must contain an "etat" query parameter`);
|
|
27
|
-
}
|
|
28
|
-
url += (url.includes("?") ? "&" : "?") + "order=date_depot,desc&page=1";
|
|
29
|
-
if (minDateDepot != null) {
|
|
30
|
-
assert.notStrictEqual(/\d{4}-\d{2}-\d{2}/.exec(minDateDepot), null, `Invalid format for minimum date: ${minDateDepot}`);
|
|
31
|
-
}
|
|
32
|
-
let amendementNumber = 0;
|
|
33
|
-
iterSearchPages: while (true) {
|
|
34
|
-
if (options.verbose) {
|
|
35
|
-
console.log(`Fetching amendements search page at ${url}…`);
|
|
36
|
-
}
|
|
37
|
-
const response = await fetch(url);
|
|
38
|
-
assert(response.ok, `Retrieval of search page at ${url} failed with error: ${response.status} ${response.statusText}`);
|
|
39
|
-
const page = await response.text();
|
|
40
|
-
const html = parseHtml(page);
|
|
41
|
-
if (html.querySelector("div.no-result") !== null) {
|
|
42
|
-
break;
|
|
43
|
-
}
|
|
44
|
-
const amendementsCountDiv = html.querySelector("div.mirror-card-subtitle");
|
|
45
|
-
assert.notStrictEqual(amendementsCountDiv, null);
|
|
46
|
-
const amendementsCount = parseInt(/\d+/.exec(amendementsCountDiv.text)[0]);
|
|
47
|
-
const amendementsDiv = html.querySelector("div.amendement-list--results-table");
|
|
48
|
-
assert.notStrictEqual(amendementsDiv, null);
|
|
49
|
-
const amendementsTable = amendementsDiv.querySelector("table");
|
|
50
|
-
assert.notStrictEqual(amendementsTable, null);
|
|
51
|
-
const tfootTr = amendementsTable.querySelector("tfoot > tr");
|
|
52
|
-
assert.notStrictEqual(tfootTr, null);
|
|
53
|
-
const tfootTrCells = tfootTr.querySelectorAll("td, th").map(cell => cell.text);
|
|
54
|
-
assert(deepEqual(tfootTrCells, ["", "n°", "Dossier législatif", "Emplacement", "Auteur", "État", "Sort", "Date d'examen", "Examiné par", "Texte visé", "Date de dépôt"]), `Unexpected columns in ${JSON.stringify(tfootTrCells, null, 2)}`);
|
|
55
|
-
const amendementsTr = amendementsTable.querySelectorAll("tbody > tr");
|
|
56
|
-
assert.notStrictEqual(amendementsTr.length, 0);
|
|
57
|
-
for (const amendementTr of amendementsTr) {
|
|
58
|
-
amendementNumber++;
|
|
59
|
-
if (minDateDepot != null || minDateExamen != null) {
|
|
60
|
-
const amendementTdList = amendementTr.querySelectorAll("td");
|
|
61
|
-
assert.strictEqual(amendementTdList.length, 11, `Unexpected number of columns in amendment row: ${amendementTr.outerHTML}`);
|
|
62
|
-
if (minDateDepot != null) {
|
|
63
|
-
const dateDepotTd = amendementTdList[10];
|
|
64
|
-
const dateDepot = formatISO(parseDate(dateDepotTd.text, "d MMMM y", new Date(), {
|
|
65
|
-
locale: frLocale
|
|
66
|
-
}), {
|
|
67
|
-
representation: "date"
|
|
68
|
-
});
|
|
69
|
-
if (dateDepot < minDateDepot) {
|
|
70
|
-
// Since the amendments are sorted by deposit date, once an amendment
|
|
71
|
-
// with an old deposit date is encountered, the full search can be stopped.
|
|
72
|
-
break iterSearchPages;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
if (minDateExamen != null) {
|
|
76
|
-
const dateExamenTd = amendementTdList[7];
|
|
77
|
-
if (dateExamenTd.text) {
|
|
78
|
-
const dateExamen = formatISO(parseDate(dateExamenTd.text, "d MMMM y", new Date(), {
|
|
79
|
-
locale: frLocale
|
|
80
|
-
}), {
|
|
81
|
-
representation: "date"
|
|
82
|
-
});
|
|
83
|
-
if (dateExamen < minDateExamen) {
|
|
84
|
-
// This amendment has been discussed since a few days.
|
|
85
|
-
// => Ignore it, because it should be in Assemblée open data.
|
|
86
|
-
continue;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
const amendementUrlPath = amendementTr.getAttribute("data-href");
|
|
92
|
-
assert.notStrictEqual(amendementUrlPath, undefined);
|
|
93
|
-
const amendementUrlPathSplitted = amendementUrlPath.split("/");
|
|
94
|
-
assert.strictEqual(amendementUrlPathSplitted[0], "", `Unexpected URL path for amendement: ${amendementUrlPath}`);
|
|
95
|
-
assert.strictEqual(amendementUrlPathSplitted[1], "dyn", `Unexpected URL path for amendement: ${amendementUrlPath}`);
|
|
96
|
-
const amendementSearchCacheFilePath = path.join(amendementsSearchCacheDir, ...amendementUrlPathSplitted.slice(2)) + ".html";
|
|
97
|
-
await fs.ensureDir(path.dirname(amendementSearchCacheFilePath));
|
|
98
|
-
const existingAmendementSearchCache = (await fs.pathExists(amendementSearchCacheFilePath)) ? await fs.readFile(amendementSearchCacheFilePath, "utf8") : null;
|
|
99
|
-
const amendementTrOuterHtml = amendementTr.outerHTML;
|
|
100
|
-
const amendementSearchCache = `---\n${jsYaml.dump({
|
|
101
|
-
position: amendementsCount - amendementNumber,
|
|
102
|
-
search: url.replace(/&page=[\d]+/, "")
|
|
103
|
-
}, {
|
|
104
|
-
sortKeys: true
|
|
105
|
-
})}---\n\n${amendementTrOuterHtml}`;
|
|
106
|
-
if (amendementSearchCache === existingAmendementSearchCache) {
|
|
107
|
-
if (incremental) {
|
|
108
|
-
// The same <tr> is already in cache and in the same position.
|
|
109
|
-
// Assume that following amendments are not changed and stop looking
|
|
110
|
-
// for amendments to upsert.
|
|
111
|
-
break iterSearchPages;
|
|
112
|
-
}
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
if (existingAmendementSearchCache !== null && frontMatter(existingAmendementSearchCache).body === amendementTrOuterHtml) {
|
|
116
|
-
// The same <tr> is already in cache, but in a different position.
|
|
117
|
-
// Assume the amendment is unchanged.
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
if (options.verbose) {
|
|
121
|
-
if (existingAmendementSearchCache === null) {
|
|
122
|
-
console.log(`Adding amendement search cache: ${amendementSearchCacheFilePath}…`);
|
|
123
|
-
} else {
|
|
124
|
-
console.log(`Updating amendement search cache: ${amendementSearchCacheFilePath}…`);
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
const amendementHtmlUrl = new URL(amendementUrlPath, "https://www.assemblee-nationale.fr/").toString();
|
|
128
|
-
const amendementHtmlResponse = await fetch(amendementHtmlUrl);
|
|
129
|
-
if (amendementHtmlResponse.status === 404) {
|
|
130
|
-
console.log(`Amendement HTML page not found at ${amendementHtmlUrl}. Skipping.`);
|
|
131
|
-
continue;
|
|
132
|
-
}
|
|
133
|
-
assert(amendementHtmlResponse.ok, `Retrieval of amendement HTML page at ${amendementHtmlUrl} failed with error: ${amendementHtmlResponse.status} ${amendementHtmlResponse.statusText}`);
|
|
134
|
-
const amendementHtmlPage = await amendementHtmlResponse.text();
|
|
135
|
-
const amendementHtml = parseHtml(amendementHtmlPage);
|
|
136
|
-
const formatsLi = amendementHtml.querySelectorAll("li.mirror-card-header--options--content--item");
|
|
137
|
-
assert.notStrictEqual(formatsLi.length, 0);
|
|
138
|
-
const jsonLi = formatsLi.find(formatLi => {
|
|
139
|
-
const formatSpan = formatLi.querySelector("a > span");
|
|
140
|
-
assert.notStrictEqual(formatSpan, null, `No <span> in <a> found in ${formatLi.toString()}`);
|
|
141
|
-
return formatSpan.text === "Version JSON";
|
|
142
|
-
});
|
|
143
|
-
assert.notStrictEqual(jsonLi, undefined, `No JSON version found for amendement at ${amendementHtmlUrl}`);
|
|
144
|
-
const jsonA = jsonLi.querySelector("a");
|
|
145
|
-
assert.notStrictEqual(jsonA, null, `No <a> found in ${jsonLi.toString()}`);
|
|
146
|
-
const amendementJsonUrlPath = jsonA.getAttribute("href");
|
|
147
|
-
assert.notStrictEqual(amendementJsonUrlPath, undefined, `No URL found for JSON version of amendement: ${jsonLi.toString()}`);
|
|
148
|
-
const amendementJsonUrl = new URL(amendementJsonUrlPath, "https://www.assemblee-nationale.fr/").toString();
|
|
149
|
-
const amendementJsonResponse = await fetch(amendementJsonUrl);
|
|
150
|
-
assert(amendementJsonResponse.ok, `Retrieval of amendement JSON page at ${amendementJsonUrl} failed with error: ${amendementJsonResponse.status} ${amendementJsonResponse.statusText}`);
|
|
151
|
-
const amendement = await amendementJsonResponse.json();
|
|
152
|
-
yield [amendementUrlPath, amendement];
|
|
153
|
-
|
|
154
|
-
// SearchCache must be written at the end to ensure that everything is in a consistent state,
|
|
155
|
-
// even if script fails abruptly.
|
|
156
|
-
await fs.writeFile(amendementSearchCacheFilePath, amendementSearchCache, "utf8");
|
|
157
|
-
}
|
|
158
|
-
const paginationA = html.querySelector("div.an-pagination--item > i.an-icons-chevron-right ~ a");
|
|
159
|
-
if (paginationA === null) {
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
const urlPath = paginationA.getAttribute("href");
|
|
163
|
-
assert.notStrictEqual(urlPath, undefined);
|
|
164
|
-
url = new URL(urlPath, "https://www.assemblee-nationale.fr/").toString();
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmb3JtYXRJU08iLCJmciIsImZyTG9jYWxlIiwicGFyc2UiLCJwYXJzZURhdGUiLCJkZWVwRXF1YWwiLCJmcyIsImZyb250TWF0dGVyIiwianNZYW1sIiwicGFyc2VIdG1sIiwicGF0aCIsImNsZWFuQW1lbmRlbWVudCIsIkNvbnZlcnQiLCJBbWVuZGVtZW50c0NvbnZlcnQiLCJpdGVyUmVjaGVyY2hlQW1lbmRlbWVudHMiLCJhbWVuZGVtZW50c1NlYXJjaENhY2hlRGlyIiwidXJsIiwiaW5jcmVtZW50YWwiLCJtaW5EYXRlRGVwb3QiLCJtaW5EYXRlRXhhbWVuIiwib3B0aW9ucyIsImFtZW5kZW1lbnRVcmxQYXRoIiwiYW1lbmRlbWVudCIsIml0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyIsInRvQW1lbmRlbWVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJlbnN1cmVEaXIiLCJzdHJpY3RFcXVhbCIsImV4ZWMiLCJub3RTdHJpY3RFcXVhbCIsImluY2x1ZGVzIiwiYW1lbmRlbWVudE51bWJlciIsIml0ZXJTZWFyY2hQYWdlcyIsInZlcmJvc2UiLCJjb25zb2xlIiwibG9nIiwicmVzcG9uc2UiLCJmZXRjaCIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInBhZ2UiLCJ0ZXh0IiwiaHRtbCIsInF1ZXJ5U2VsZWN0b3IiLCJhbWVuZGVtZW50c0NvdW50RGl2IiwiYW1lbmRlbWVudHNDb3VudCIsInBhcnNlSW50IiwiYW1lbmRlbWVudHNEaXYiLCJhbWVuZGVtZW50c1RhYmxlIiwidGZvb3RUciIsInRmb290VHJDZWxscyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtYXAiLCJjZWxsIiwiYW1lbmRlbWVudHNUciIsImxlbmd0aCIsImFtZW5kZW1lbnRUciIsImFtZW5kZW1lbnRUZExpc3QiLCJvdXRlckhUTUwiLCJkYXRlRGVwb3RUZCIsImRhdGVEZXBvdCIsIkRhdGUiLCJsb2NhbGUiLCJyZXByZXNlbnRhdGlvbiIsImRhdGVFeGFtZW5UZCIsImRhdGVFeGFtZW4iLCJnZXRBdHRyaWJ1dGUiLCJ1bmRlZmluZWQiLCJhbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkIiwic3BsaXQiLCJhbWVuZGVtZW50U2VhcmNoQ2FjaGVGaWxlUGF0aCIsImpvaW4iLCJzbGljZSIsImRpcm5hbWUiLCJleGlzdGluZ0FtZW5kZW1lbnRTZWFyY2hDYWNoZSIsInBhdGhFeGlzdHMiLCJyZWFkRmlsZSIsImFtZW5kZW1lbnRUck91dGVySHRtbCIsImFtZW5kZW1lbnRTZWFyY2hDYWNoZSIsImR1bXAiLCJwb3NpdGlvbiIsInNlYXJjaCIsInJlcGxhY2UiLCJzb3J0S2V5cyIsImJvZHkiLCJhbWVuZGVtZW50SHRtbFVybCIsIlVSTCIsInRvU3RyaW5nIiwiYW1lbmRlbWVudEh0bWxSZXNwb25zZSIsImFtZW5kZW1lbnRIdG1sUGFnZSIsImFtZW5kZW1lbnRIdG1sIiwiZm9ybWF0c0xpIiwianNvbkxpIiwiZmluZCIsImZvcm1hdExpIiwiZm9ybWF0U3BhbiIsImpzb25BIiwiYW1lbmRlbWVudEpzb25VcmxQYXRoIiwiYW1lbmRlbWVudEpzb25VcmwiLCJhbWVuZGVtZW50SnNvblJlc3BvbnNlIiwianNvbiIsIndyaXRlRmlsZSIsInBhZ2luYXRpb25BIiwidXJsUGF0aCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzL3JlY2hlcmNoZV9hbWVuZGVtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgZm9ybWF0SVNPIH0gZnJvbSBcImRhdGUtZm5zL2Zvcm1hdElTT1wiXG5pbXBvcnQgeyBmciBhcyBmckxvY2FsZSB9IGZyb20gXCJkYXRlLWZucy9sb2NhbGUvZnJcIlxuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VEYXRlIH0gZnJvbSBcImRhdGUtZm5zL3BhcnNlXCJcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSBcImRlZXAtZXF1YWxcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgZnJvbnRNYXR0ZXIgZnJvbSBcImZyb250LW1hdHRlclwiXG5pbXBvcnQganNZYW1sIGZyb20gXCJqcy15YW1sXCJcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlSHRtbCB9IGZyb20gXCJub2RlLWh0bWwtcGFyc2VyXCJcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcblxuaW1wb3J0IHsgY2xlYW5BbWVuZGVtZW50IH0gZnJvbSBcIi4uL2NsZWFuZXJzXCJcbmltcG9ydCB7IEFtZW5kZW1lbnQgYXMgUmF3QW1lbmRlbWVudCB9IGZyb20gXCIuLi9yYXdfdHlwZXMvYW1lbmRlbWVudHNcIlxuaW1wb3J0IHsgQW1lbmRlbWVudCwgQ29udmVydCBhcyBBbWVuZGVtZW50c0NvbnZlcnQgfSBmcm9tIFwiLi4vdHlwZXMvYW1lbmRlbWVudHNcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24qIGl0ZXJSZWNoZXJjaGVBbWVuZGVtZW50cyhcbiAgYW1lbmRlbWVudHNTZWFyY2hDYWNoZURpcjogc3RyaW5nLFxuICB1cmw6IHN0cmluZyxcbiAgaW5jcmVtZW50YWw6IGJvb2xlYW4sXG4gIG1pbkRhdGVEZXBvdD86IHN0cmluZyB8IG51bGwsXG4gIG1pbkRhdGVFeGFtZW4/OiBzdHJpbmcgfCBudWxsLFxuICBvcHRpb25zOiB7IHNpbGVudD86IGJvb2xlYW47IHZlcmJvc2U/OiBib29sZWFuIH0gPSB7fSxcbik6IEFzeW5jR2VuZXJhdG9yPFtzdHJpbmcsIEFtZW5kZW1lbnRdLCB2b2lkLCB1bmtub3duPiB7XG4gIGZvciBhd2FpdCAoY29uc3QgW1xuICAgIGFtZW5kZW1lbnRVcmxQYXRoLFxuICAgIGFtZW5kZW1lbnQsXG4gIF0gb2YgaXRlclJlY2hlcmNoZVJhd0FtZW5kZW1lbnRzKFxuICAgIGFtZW5kZW1lbnRzU2VhcmNoQ2FjaGVEaXIsXG4gICAgdXJsLFxuICAgIGluY3JlbWVudGFsLFxuICAgIG1pbkRhdGVEZXBvdCxcbiAgICBtaW5EYXRlRXhhbWVuLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICBjbGVhbkFtZW5kZW1lbnQoYW1lbmRlbWVudClcbiAgICAvLyBEb3VibGUgY29udmVyc2lvbiwgdG8gY29udmVydCBzdHJpbmdzIHRvIGRhdGVzLlxuICAgIHlpZWxkIFtcbiAgICAgIGFtZW5kZW1lbnRVcmxQYXRoLFxuICAgICAgQW1lbmRlbWVudHNDb252ZXJ0LnRvQW1lbmRlbWVudChKU09OLnN0cmluZ2lmeShhbWVuZGVtZW50KSksXG4gICAgXVxuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogaXRlclJlY2hlcmNoZVJhd0FtZW5kZW1lbnRzKFxuICBhbWVuZGVtZW50c1NlYXJjaENhY2hlRGlyOiBzdHJpbmcsXG4gIHVybDogc3RyaW5nLFxuICBpbmNyZW1lbnRhbDogYm9vbGVhbixcbiAgbWluRGF0ZURlcG90Pzogc3RyaW5nIHwgbnVsbCxcbiAgbWluRGF0ZUV4YW1lbj86IHN0cmluZyB8IG51bGwsXG4gIG9wdGlvbnM6IHsgc2lsZW50PzogYm9vbGVhbjsgdmVyYm9zZT86IGJvb2xlYW4gfSA9IHt9LFxuKTogQXN5bmNHZW5lcmF0b3I8W3N0cmluZywgUmF3QW1lbmRlbWVudF0sIHZvaWQsIHVua25vd24+IHtcbiAgYXdhaXQgZnMuZW5zdXJlRGlyKGFtZW5kZW1lbnRzU2VhcmNoQ2FjaGVEaXIpXG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgIC9bPyZdZGF0ZV9kZXBvdD0vLmV4ZWModXJsKSxcbiAgICBudWxsLFxuICAgIGBVUkwgJHt1cmx9IGFscmVhZHkgY29udGFpbnMgYSBkZXBvc2l0IGRhdGVgLFxuICApXG4gIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAvWz8mXW9yZGVyPS8uZXhlYyh1cmwpLFxuICAgIG51bGwsXG4gICAgYFVSTCAke3VybH0gYWxyZWFkeSBjb250YWlucyBhIHNvcnQgb3JkZXJgLFxuICApXG4gIGFzc2VydC5zdHJpY3RFcXVhbChcbiAgICAvWz8mXXBhZ2U9Ly5leGVjKHVybCksXG4gICAgbnVsbCxcbiAgICBgVVJMICR7dXJsfSBhbHJlYWR5IGNvbnRhaW5zIGEgcGFnZSBudW1iZXJgLFxuICApXG4gIGlmIChpbmNyZW1lbnRhbCkge1xuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIC9bPyZdZXRhdD0vLmV4ZWModXJsKSxcbiAgICAgIG51bGwsXG4gICAgICBgSW4gaW5jcmVtZW50YWwgbW9kZSwgVVJMICR7dXJsfSBtdXN0IGNvbnRhaW4gYW4gXCJldGF0XCIgcXVlcnkgcGFyYW1ldGVyYCxcbiAgICApXG4gIH1cbiAgdXJsICs9ICh1cmwuaW5jbHVkZXMoXCI/XCIpID8gXCImXCIgOiBcIj9cIikgKyBcIm9yZGVyPWRhdGVfZGVwb3QsZGVzYyZwYWdlPTFcIlxuXG4gIGlmIChtaW5EYXRlRGVwb3QgIT0gbnVsbCkge1xuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgIC9cXGR7NH0tXFxkezJ9LVxcZHsyfS8uZXhlYyhtaW5EYXRlRGVwb3QpLFxuICAgICAgbnVsbCxcbiAgICAgIGBJbnZhbGlkIGZvcm1hdCBmb3IgbWluaW11bSBkYXRlOiAke21pbkRhdGVEZXBvdH1gLFxuICAgIClcbiAgfVxuXG4gIGxldCBhbWVuZGVtZW50TnVtYmVyID0gMFxuICBpdGVyU2VhcmNoUGFnZXM6IHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coYEZldGNoaW5nIGFtZW5kZW1lbnRzIHNlYXJjaCBwYWdlIGF0ICR7dXJsfeKApmApXG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKVxuICAgIGFzc2VydChcbiAgICAgIHJlc3BvbnNlLm9rLFxuICAgICAgYFJldHJpZXZhbCBvZiBzZWFyY2ggcGFnZSBhdCAke3VybH0gZmFpbGVkIHdpdGggZXJyb3I6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCxcbiAgICApXG4gICAgY29uc3QgcGFnZSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKVxuICAgIGNvbnN0IGh0bWwgPSBwYXJzZUh0bWwocGFnZSlcbiAgICBpZiAoaHRtbC5xdWVyeVNlbGVjdG9yKFwiZGl2Lm5vLXJlc3VsdFwiKSAhPT0gbnVsbCkge1xuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY29uc3QgYW1lbmRlbWVudHNDb3VudERpdiA9IGh0bWwucXVlcnlTZWxlY3RvcihcImRpdi5taXJyb3ItY2FyZC1zdWJ0aXRsZVwiKVxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChhbWVuZGVtZW50c0NvdW50RGl2LCBudWxsKVxuICAgIGNvbnN0IGFtZW5kZW1lbnRzQ291bnQgPSBwYXJzZUludCgvXFxkKy8uZXhlYyhhbWVuZGVtZW50c0NvdW50RGl2IS50ZXh0KSFbMF0pXG4gICAgY29uc3QgYW1lbmRlbWVudHNEaXYgPSBodG1sLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICBcImRpdi5hbWVuZGVtZW50LWxpc3QtLXJlc3VsdHMtdGFibGVcIixcbiAgICApXG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFtZW5kZW1lbnRzRGl2LCBudWxsKVxuICAgIGNvbnN0IGFtZW5kZW1lbnRzVGFibGUgPSBhbWVuZGVtZW50c0RpdiEucXVlcnlTZWxlY3RvcihcInRhYmxlXCIpXG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFtZW5kZW1lbnRzVGFibGUsIG51bGwpXG4gICAgY29uc3QgdGZvb3RUciA9IGFtZW5kZW1lbnRzVGFibGUhLnF1ZXJ5U2VsZWN0b3IoXCJ0Zm9vdCA+IHRyXCIpXG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKHRmb290VHIsIG51bGwpXG4gICAgY29uc3QgdGZvb3RUckNlbGxzID0gdGZvb3RUciFcbiAgICAgIC5xdWVyeVNlbGVjdG9yQWxsKFwidGQsIHRoXCIpXG4gICAgICAubWFwKChjZWxsKSA9PiBjZWxsLnRleHQpXG4gICAgYXNzZXJ0KFxuICAgICAgZGVlcEVxdWFsKHRmb290VHJDZWxscywgW1xuICAgICAgICBcIlwiLFxuICAgICAgICBcIm7CsFwiLFxuICAgICAgICBcIkRvc3NpZXIgbMOpZ2lzbGF0aWZcIixcbiAgICAgICAgXCJFbXBsYWNlbWVudFwiLFxuICAgICAgICBcIkF1dGV1clwiLFxuICAgICAgICBcIsOJdGF0XCIsXG4gICAgICAgIFwiU29ydFwiLFxuICAgICAgICBcIkRhdGUgZCdleGFtZW5cIixcbiAgICAgICAgXCJFeGFtaW7DqSBwYXJcIixcbiAgICAgICAgXCJUZXh0ZSB2aXPDqVwiLFxuICAgICAgICBcIkRhdGUgZGUgZMOpcMO0dFwiLFxuICAgICAgXSksXG4gICAgICBgVW5leHBlY3RlZCBjb2x1bW5zIGluICR7SlNPTi5zdHJpbmdpZnkodGZvb3RUckNlbGxzLCBudWxsLCAyKX1gLFxuICAgIClcbiAgICBjb25zdCBhbWVuZGVtZW50c1RyID0gYW1lbmRlbWVudHNUYWJsZSEucXVlcnlTZWxlY3RvckFsbChcInRib2R5ID4gdHJcIilcbiAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoYW1lbmRlbWVudHNUci5sZW5ndGgsIDApXG4gICAgZm9yIChjb25zdCBhbWVuZGVtZW50VHIgb2YgYW1lbmRlbWVudHNUcikge1xuICAgICAgYW1lbmRlbWVudE51bWJlcisrXG5cbiAgICAgIGlmIChtaW5EYXRlRGVwb3QgIT0gbnVsbCB8fCBtaW5EYXRlRXhhbWVuICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgYW1lbmRlbWVudFRkTGlzdCA9IGFtZW5kZW1lbnRUci5xdWVyeVNlbGVjdG9yQWxsKFwidGRcIilcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICAgIGFtZW5kZW1lbnRUZExpc3QubGVuZ3RoLFxuICAgICAgICAgIDExLFxuICAgICAgICAgIGBVbmV4cGVjdGVkIG51bWJlciBvZiBjb2x1bW5zIGluIGFtZW5kbWVudCByb3c6ICR7YW1lbmRlbWVudFRyLm91dGVySFRNTH1gLFxuICAgICAgICApXG4gICAgICAgIGlmIChtaW5EYXRlRGVwb3QgIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGRhdGVEZXBvdFRkID0gYW1lbmRlbWVudFRkTGlzdFsxMF1cbiAgICAgICAgICBjb25zdCBkYXRlRGVwb3QgPSBmb3JtYXRJU08oXG4gICAgICAgICAgICBwYXJzZURhdGUoZGF0ZURlcG90VGQudGV4dCwgXCJkIE1NTU0geVwiLCBuZXcgRGF0ZSgpLCB7XG4gICAgICAgICAgICAgIGxvY2FsZTogZnJMb2NhbGUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHsgcmVwcmVzZW50YXRpb246IFwiZGF0ZVwiIH0sXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChkYXRlRGVwb3QgPCBtaW5EYXRlRGVwb3QpIHtcbiAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBhbWVuZG1lbnRzIGFyZSBzb3J0ZWQgYnkgZGVwb3NpdCBkYXRlLCBvbmNlIGFuIGFtZW5kbWVudFxuICAgICAgICAgICAgLy8gd2l0aCBhbiBvbGQgZGVwb3NpdCBkYXRlIGlzIGVuY291bnRlcmVkLCB0aGUgZnVsbCBzZWFyY2ggY2FuIGJlIHN0b3BwZWQuXG4gICAgICAgICAgICBicmVhayBpdGVyU2VhcmNoUGFnZXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbkRhdGVFeGFtZW4gIT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IGRhdGVFeGFtZW5UZCA9IGFtZW5kZW1lbnRUZExpc3RbN11cbiAgICAgICAgICBpZiAoZGF0ZUV4YW1lblRkLnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVFeGFtZW4gPSBmb3JtYXRJU08oXG4gICAgICAgICAgICAgIHBhcnNlRGF0ZShkYXRlRXhhbWVuVGQudGV4dCwgXCJkIE1NTU0geVwiLCBuZXcgRGF0ZSgpLCB7XG4gICAgICAgICAgICAgICAgbG9jYWxlOiBmckxvY2FsZSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHsgcmVwcmVzZW50YXRpb246IFwiZGF0ZVwiIH0sXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoZGF0ZUV4YW1lbiA8IG1pbkRhdGVFeGFtZW4pIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBhbWVuZG1lbnQgaGFzIGJlZW4gZGlzY3Vzc2VkIHNpbmNlIGEgZmV3IGRheXMuXG4gICAgICAgICAgICAgIC8vID0+IElnbm9yZSBpdCwgYmVjYXVzZSBpdCBzaG91bGQgYmUgaW4gQXNzZW1ibMOpZSBvcGVuIGRhdGEuXG4gICAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRVcmxQYXRoID0gYW1lbmRlbWVudFRyLmdldEF0dHJpYnV0ZShcImRhdGEtaHJlZlwiKVxuICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGFtZW5kZW1lbnRVcmxQYXRoLCB1bmRlZmluZWQpXG4gICAgICBjb25zdCBhbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkID0gYW1lbmRlbWVudFVybFBhdGghLnNwbGl0KFwiL1wiKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICBhbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkWzBdLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgVW5leHBlY3RlZCBVUkwgcGF0aCBmb3IgYW1lbmRlbWVudDogJHthbWVuZGVtZW50VXJsUGF0aH1gLFxuICAgICAgKVxuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKFxuICAgICAgICBhbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkWzFdLFxuICAgICAgICBcImR5blwiLFxuICAgICAgICBgVW5leHBlY3RlZCBVUkwgcGF0aCBmb3IgYW1lbmRlbWVudDogJHthbWVuZGVtZW50VXJsUGF0aH1gLFxuICAgICAgKVxuICAgICAgY29uc3QgYW1lbmRlbWVudFNlYXJjaENhY2hlRmlsZVBhdGggPVxuICAgICAgICBwYXRoLmpvaW4oXG4gICAgICAgICAgYW1lbmRlbWVudHNTZWFyY2hDYWNoZURpcixcbiAgICAgICAgICAuLi5hbWVuZGVtZW50VXJsUGF0aFNwbGl0dGVkLnNsaWNlKDIpLFxuICAgICAgICApICsgXCIuaHRtbFwiXG4gICAgICBhd2FpdCBmcy5lbnN1cmVEaXIocGF0aC5kaXJuYW1lKGFtZW5kZW1lbnRTZWFyY2hDYWNoZUZpbGVQYXRoKSlcbiAgICAgIGNvbnN0IGV4aXN0aW5nQW1lbmRlbWVudFNlYXJjaENhY2hlID0gKGF3YWl0IGZzLnBhdGhFeGlzdHMoXG4gICAgICAgIGFtZW5kZW1lbnRTZWFyY2hDYWNoZUZpbGVQYXRoLFxuICAgICAgKSlcbiAgICAgICAgPyBhd2FpdCBmcy5yZWFkRmlsZShhbWVuZGVtZW50U2VhcmNoQ2FjaGVGaWxlUGF0aCwgXCJ1dGY4XCIpXG4gICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgYW1lbmRlbWVudFRyT3V0ZXJIdG1sID0gYW1lbmRlbWVudFRyLm91dGVySFRNTFxuICAgICAgY29uc3QgYW1lbmRlbWVudFNlYXJjaENhY2hlID0gYC0tLVxcbiR7anNZYW1sLmR1bXAoXG4gICAgICAgIHtcbiAgICAgICAgICBwb3NpdGlvbjogYW1lbmRlbWVudHNDb3VudCAtIGFtZW5kZW1lbnROdW1iZXIsXG4gICAgICAgICAgc2VhcmNoOiB1cmwucmVwbGFjZSgvJnBhZ2U9W1xcZF0rLywgXCJcIiksXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBzb3J0S2V5czogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICl9LS0tXFxuXFxuJHthbWVuZGVtZW50VHJPdXRlckh0bWx9YFxuICAgICAgaWYgKGFtZW5kZW1lbnRTZWFyY2hDYWNoZSA9PT0gZXhpc3RpbmdBbWVuZGVtZW50U2VhcmNoQ2FjaGUpIHtcbiAgICAgICAgaWYgKGluY3JlbWVudGFsKSB7XG4gICAgICAgICAgLy8gVGhlIHNhbWUgPHRyPiBpcyBhbHJlYWR5IGluIGNhY2hlIGFuZCBpbiB0aGUgc2FtZSBwb3NpdGlvbi5cbiAgICAgICAgICAvLyBBc3N1bWUgdGhhdCBmb2xsb3dpbmcgYW1lbmRtZW50cyBhcmUgbm90IGNoYW5nZWQgYW5kIHN0b3AgbG9va2luZ1xuICAgICAgICAgIC8vIGZvciBhbWVuZG1lbnRzIHRvIHVwc2VydC5cbiAgICAgICAgICBicmVhayBpdGVyU2VhcmNoUGFnZXNcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZ0FtZW5kZW1lbnRTZWFyY2hDYWNoZSAhPT0gbnVsbCAmJlxuICAgICAgICBmcm9udE1hdHRlcihleGlzdGluZ0FtZW5kZW1lbnRTZWFyY2hDYWNoZSkuYm9keSA9PT1cbiAgICAgICAgICBhbWVuZGVtZW50VHJPdXRlckh0bWxcbiAgICAgICkge1xuICAgICAgICAvLyBUaGUgc2FtZSA8dHI+IGlzIGFscmVhZHkgaW4gY2FjaGUsIGJ1dCBpbiBhIGRpZmZlcmVudCBwb3NpdGlvbi5cbiAgICAgICAgLy8gQXNzdW1lIHRoZSBhbWVuZG1lbnQgaXMgdW5jaGFuZ2VkLlxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICBpZiAoZXhpc3RpbmdBbWVuZGVtZW50U2VhcmNoQ2FjaGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBBZGRpbmcgYW1lbmRlbWVudCBzZWFyY2ggY2FjaGU6ICR7YW1lbmRlbWVudFNlYXJjaENhY2hlRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICBgVXBkYXRpbmcgYW1lbmRlbWVudCBzZWFyY2ggY2FjaGU6ICR7YW1lbmRlbWVudFNlYXJjaENhY2hlRmlsZVBhdGh94oCmYCxcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRIdG1sVXJsID0gbmV3IFVSTChcbiAgICAgICAgYW1lbmRlbWVudFVybFBhdGghLFxuICAgICAgICBcImh0dHBzOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvXCIsXG4gICAgICApLnRvU3RyaW5nKClcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRIdG1sUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhbWVuZGVtZW50SHRtbFVybClcbiAgICAgIGlmIChhbWVuZGVtZW50SHRtbFJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBBbWVuZGVtZW50IEhUTUwgcGFnZSBub3QgZm91bmQgYXQgJHthbWVuZGVtZW50SHRtbFVybH0uIFNraXBwaW5nLmAsXG4gICAgICAgIClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGFzc2VydChcbiAgICAgICAgYW1lbmRlbWVudEh0bWxSZXNwb25zZS5vayxcbiAgICAgICAgYFJldHJpZXZhbCBvZiBhbWVuZGVtZW50IEhUTUwgcGFnZSBhdCAke2FtZW5kZW1lbnRIdG1sVXJsfSBmYWlsZWQgd2l0aCBlcnJvcjogJHthbWVuZGVtZW50SHRtbFJlc3BvbnNlLnN0YXR1c30gJHthbWVuZGVtZW50SHRtbFJlc3BvbnNlLnN0YXR1c1RleHR9YCxcbiAgICAgIClcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRIdG1sUGFnZSA9IGF3YWl0IGFtZW5kZW1lbnRIdG1sUmVzcG9uc2UudGV4dCgpXG4gICAgICBjb25zdCBhbWVuZGVtZW50SHRtbCA9IHBhcnNlSHRtbChhbWVuZGVtZW50SHRtbFBhZ2UpXG4gICAgICBjb25zdCBmb3JtYXRzTGkgPSBhbWVuZGVtZW50SHRtbC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBcImxpLm1pcnJvci1jYXJkLWhlYWRlci0tb3B0aW9ucy0tY29udGVudC0taXRlbVwiLFxuICAgICAgKVxuICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGZvcm1hdHNMaS5sZW5ndGgsIDApXG4gICAgICBjb25zdCBqc29uTGkgPSBmb3JtYXRzTGkuZmluZCgoZm9ybWF0TGkpID0+IHtcbiAgICAgICAgY29uc3QgZm9ybWF0U3BhbiA9IGZvcm1hdExpLnF1ZXJ5U2VsZWN0b3IoXCJhID4gc3BhblwiKVxuICAgICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAgICAgZm9ybWF0U3BhbixcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGBObyA8c3Bhbj4gaW4gPGE+IGZvdW5kIGluICR7Zm9ybWF0TGkudG9TdHJpbmcoKX1gLFxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmb3JtYXRTcGFuIS50ZXh0ID09PSBcIlZlcnNpb24gSlNPTlwiXG4gICAgICB9KVxuICAgICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKFxuICAgICAgICBqc29uTGksXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYE5vIEpTT04gdmVyc2lvbiBmb3VuZCBmb3IgYW1lbmRlbWVudCBhdCAke2FtZW5kZW1lbnRIdG1sVXJsfWAsXG4gICAgICApXG4gICAgICBjb25zdCBqc29uQSA9IGpzb25MaSEucXVlcnlTZWxlY3RvcihcImFcIilcbiAgICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICAgICAganNvbkEsXG4gICAgICAgIG51bGwsXG4gICAgICAgIGBObyA8YT4gZm91bmQgaW4gJHtqc29uTGkhLnRvU3RyaW5nKCl9YCxcbiAgICAgIClcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uVXJsUGF0aCA9IGpzb25BIS5nZXRBdHRyaWJ1dGUoXCJocmVmXCIpXG4gICAgICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgICAgIGFtZW5kZW1lbnRKc29uVXJsUGF0aCxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICBgTm8gVVJMIGZvdW5kIGZvciBKU09OIHZlcnNpb24gb2YgYW1lbmRlbWVudDogJHtqc29uTGkhLnRvU3RyaW5nKCl9YCxcbiAgICAgIClcbiAgICAgIGNvbnN0IGFtZW5kZW1lbnRKc29uVXJsID0gbmV3IFVSTChcbiAgICAgICAgYW1lbmRlbWVudEpzb25VcmxQYXRoISxcbiAgICAgICAgXCJodHRwczovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL1wiLFxuICAgICAgKS50b1N0cmluZygpXG4gICAgICBjb25zdCBhbWVuZGVtZW50SnNvblJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYW1lbmRlbWVudEpzb25VcmwpXG4gICAgICBhc3NlcnQoXG4gICAgICAgIGFtZW5kZW1lbnRKc29uUmVzcG9uc2Uub2ssXG4gICAgICAgIGBSZXRyaWV2YWwgb2YgYW1lbmRlbWVudCBKU09OIHBhZ2UgYXQgJHthbWVuZGVtZW50SnNvblVybH0gZmFpbGVkIHdpdGggZXJyb3I6ICR7YW1lbmRlbWVudEpzb25SZXNwb25zZS5zdGF0dXN9ICR7YW1lbmRlbWVudEpzb25SZXNwb25zZS5zdGF0dXNUZXh0fWAsXG4gICAgICApXG4gICAgICBjb25zdCBhbWVuZGVtZW50ID0gYXdhaXQgYW1lbmRlbWVudEpzb25SZXNwb25zZS5qc29uKClcbiAgICAgIHlpZWxkIFthbWVuZGVtZW50VXJsUGF0aCEsIGFtZW5kZW1lbnRdXG5cbiAgICAgIC8vIFNlYXJjaENhY2hlIG11c3QgYmUgd3JpdHRlbiBhdCB0aGUgZW5kIHRvIGVuc3VyZSB0aGF0IGV2ZXJ5dGhpbmcgaXMgaW4gYSBjb25zaXN0ZW50IHN0YXRlLFxuICAgICAgLy8gZXZlbiBpZiBzY3JpcHQgZmFpbHMgYWJydXB0bHkuXG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoXG4gICAgICAgIGFtZW5kZW1lbnRTZWFyY2hDYWNoZUZpbGVQYXRoLFxuICAgICAgICBhbWVuZGVtZW50U2VhcmNoQ2FjaGUsXG4gICAgICAgIFwidXRmOFwiLFxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IHBhZ2luYXRpb25BID0gaHRtbC5xdWVyeVNlbGVjdG9yKFxuICAgICAgXCJkaXYuYW4tcGFnaW5hdGlvbi0taXRlbSA+IGkuYW4taWNvbnMtY2hldnJvbi1yaWdodCB+IGFcIixcbiAgICApXG4gICAgaWYgKHBhZ2luYXRpb25BID09PSBudWxsKSB7XG4gICAgICBicmVha1xuICAgIH1cbiAgICBjb25zdCB1cmxQYXRoID0gcGFnaW5hdGlvbkEuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKVxuICAgIGFzc2VydC5ub3RTdHJpY3RFcXVhbCh1cmxQYXRoLCB1bmRlZmluZWQpXG4gICAgdXJsID0gbmV3IFVSTCh1cmxQYXRoISwgXCJodHRwczovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyL1wiKS50b1N0cmluZygpXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsU0FBUyxRQUFRLG9CQUFvQjtBQUM5QyxTQUFTQyxFQUFFLElBQUlDLFFBQVEsUUFBUSxvQkFBb0I7QUFDbkQsU0FBU0MsS0FBSyxJQUFJQyxTQUFTLFFBQVEsZ0JBQWdCO0FBQ25ELE9BQU9DLFNBQVMsTUFBTSxZQUFZO0FBQ2xDLE9BQU9DLEVBQUUsTUFBTSxVQUFVO0FBQ3pCLE9BQU9DLFdBQVcsTUFBTSxjQUFjO0FBQ3RDLE9BQU9DLE1BQU0sTUFBTSxTQUFTO0FBQzVCLFNBQVNMLEtBQUssSUFBSU0sU0FBUyxRQUFRLGtCQUFrQjtBQUNyRCxPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLGVBQWU7QUFBQSxTQUVIQyxPQUFPLElBQUlDLGtCQUFrQjtBQUVsRCxPQUFPLGdCQUFnQkMsd0JBQXdCQSxDQUM3Q0MseUJBQWlDLEVBQ2pDQyxHQUFXLEVBQ1hDLFdBQW9CLEVBQ3BCQyxZQUE0QixFQUM1QkMsYUFBNkIsRUFDN0JDLE9BQWdELEdBQUcsQ0FBQyxDQUFDLEVBQ0E7RUFDckQsV0FBVyxNQUFNLENBQ2ZDLGlCQUFpQixFQUNqQkMsVUFBVSxDQUNYLElBQUlDLDJCQUEyQixDQUM5QlIseUJBQXlCLEVBQ3pCQyxHQUFHLEVBQ0hDLFdBQVcsRUFDWEMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLE9BQ0YsQ0FBQyxFQUFFO0lBQ0RULGVBQWUsQ0FBQ1csVUFBVSxDQUFDO0lBQzNCO0lBQ0EsTUFBTSxDQUNKRCxpQkFBaUIsRUFD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
|
|
@@ -1,307 +0,0 @@
|
|
|
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.iterator.js");
|
|
6
|
-
require("core-js/modules/es.array.from.js");
|
|
7
|
-
require("core-js/modules/es.array.is-array.js");
|
|
8
|
-
require("core-js/modules/es.array.iterator.js");
|
|
9
|
-
require("core-js/modules/es.array.slice.js");
|
|
10
|
-
require("core-js/modules/es.date.to-string.js");
|
|
11
|
-
require("core-js/modules/es.object.define-property.js");
|
|
12
|
-
require("core-js/modules/es.object.to-string.js");
|
|
13
|
-
require("core-js/modules/es.regexp.to-string.js");
|
|
14
|
-
require("core-js/modules/es.string.iterator.js");
|
|
15
|
-
require("core-js/modules/web.dom-collections.iterator.js");
|
|
16
|
-
Object.defineProperty(exports, "__esModule", {
|
|
17
|
-
value: true
|
|
18
|
-
});
|
|
19
|
-
exports.parseTexte = parseTexte;
|
|
20
|
-
require("core-js/modules/es.array.includes.js");
|
|
21
|
-
require("core-js/modules/es.function.name.js");
|
|
22
|
-
require("core-js/modules/es.regexp.exec.js");
|
|
23
|
-
require("core-js/modules/es.string.includes.js");
|
|
24
|
-
require("core-js/modules/es.string.match.js");
|
|
25
|
-
require("core-js/modules/es.string.replace.js");
|
|
26
|
-
require("core-js/modules/es.string.trim.js");
|
|
27
|
-
var _assert = _interopRequireDefault(require("assert"));
|
|
28
|
-
var _jsdom = require("jsdom");
|
|
29
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
30
|
-
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; } } }; }
|
|
31
|
-
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
32
|
-
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
33
|
-
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; } }
|
|
34
|
-
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; }
|
|
35
|
-
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
36
|
-
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
37
|
-
function parseHeader(header) {
|
|
38
|
-
var headersMapping = [{
|
|
39
|
-
regex: /^(RAPPORT_)?ANNEXE(_|$)|^ETAT_/,
|
|
40
|
-
level: 0,
|
|
41
|
-
name: "Annexe"
|
|
42
|
-
}, {
|
|
43
|
-
regex: /^TOME_/,
|
|
44
|
-
level: 1,
|
|
45
|
-
name: "Tome"
|
|
46
|
-
}, {
|
|
47
|
-
regex: /^PARTIE_|^(PREMIERE|SECONDE|DEUXIEME|TROISIEME|QUATRIEME)_PARTIE(_|$)/,
|
|
48
|
-
level: 2,
|
|
49
|
-
name: "Partie"
|
|
50
|
-
}, {
|
|
51
|
-
regex: /^LIVRE_/,
|
|
52
|
-
level: 3,
|
|
53
|
-
name: "Livre"
|
|
54
|
-
}, {
|
|
55
|
-
regex: /^TITRE_/,
|
|
56
|
-
level: 4,
|
|
57
|
-
name: "Titre"
|
|
58
|
-
}, {
|
|
59
|
-
regex: /^SOUSTITRE_/,
|
|
60
|
-
level: 5,
|
|
61
|
-
name: "SousTitre"
|
|
62
|
-
}, {
|
|
63
|
-
regex: /^CHAPITRE_/,
|
|
64
|
-
level: 6,
|
|
65
|
-
name: "Chapitre"
|
|
66
|
-
}, {
|
|
67
|
-
regex: /^SECTION_/,
|
|
68
|
-
level: 7,
|
|
69
|
-
name: "Section"
|
|
70
|
-
}, {
|
|
71
|
-
regex: /^SOUSSECTION_/,
|
|
72
|
-
level: 8,
|
|
73
|
-
name: "SousSection"
|
|
74
|
-
}, {
|
|
75
|
-
regex: /^ARTICLES?_/,
|
|
76
|
-
level: 9,
|
|
77
|
-
name: "Article"
|
|
78
|
-
}, {
|
|
79
|
-
regex: /^EXPOSE_DES_MOTIFS$/,
|
|
80
|
-
level: 9,
|
|
81
|
-
name: "ExposeMotifs"
|
|
82
|
-
}];
|
|
83
|
-
for (var _i = 0, _headersMapping = headersMapping; _i < _headersMapping.length; _i++) {
|
|
84
|
-
var _headersMapping$_i = _headersMapping[_i],
|
|
85
|
-
regex = _headersMapping$_i.regex,
|
|
86
|
-
level = _headersMapping$_i.level,
|
|
87
|
-
name = _headersMapping$_i.name;
|
|
88
|
-
if (header.match(regex)) {
|
|
89
|
-
return [level, name];
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
return [null, ""];
|
|
93
|
-
}
|
|
94
|
-
function cleanText(text) {
|
|
95
|
-
return (text === null || text === void 0 ? void 0 : text.replace(/[\n\t]+/g, "").trim()) || "";
|
|
96
|
-
}
|
|
97
|
-
var excludedAlineas = [/^Délibéré en séance publique/, /^Fait le/, /^Le Président,$/, /^Signé/];
|
|
98
|
-
function parseTexte(assembleeUrl, page) {
|
|
99
|
-
// Repair HTML.
|
|
100
|
-
var html = page.replace(/(<style[\w\W]+style>)/g, "");
|
|
101
|
-
|
|
102
|
-
// Extract subdivisions from HTML.
|
|
103
|
-
var _JSDOM = new _jsdom.JSDOM(html),
|
|
104
|
-
window = _JSDOM.window;
|
|
105
|
-
var document = window.document;
|
|
106
|
-
_assert["default"].strictEqual(document.children.length, 1);
|
|
107
|
-
var htmlElement = document.children[0];
|
|
108
|
-
_assert["default"].strictEqual(htmlElement.children.length, 2);
|
|
109
|
-
var bodyElement = htmlElement.children[1];
|
|
110
|
-
if (bodyElement.children.length < 3) {
|
|
111
|
-
// Occurs in http://www.assemblee-nationale.fr/15/textes/0326.asp.
|
|
112
|
-
window.close(); // Free memory.
|
|
113
|
-
return {
|
|
114
|
-
error: {
|
|
115
|
-
code: -1,
|
|
116
|
-
message: "Texte de loi sans contenu"
|
|
117
|
-
},
|
|
118
|
-
html: html,
|
|
119
|
-
page: page
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
_assert["default"].strictEqual(bodyElement.children[0].tagName, "DIV");
|
|
123
|
-
// First child is a DIV describing the document (Assemblée's header). Skip it for now.
|
|
124
|
-
var bodyChild = bodyElement.children[1];
|
|
125
|
-
_assert["default"].strictEqual(bodyChild.tagName, "BR");
|
|
126
|
-
var alineaElement = null;
|
|
127
|
-
var isMultiLinesHeader = false;
|
|
128
|
-
var level = null;
|
|
129
|
-
var levels = [];
|
|
130
|
-
var nextParentState = null;
|
|
131
|
-
var state = "nextBodyChild";
|
|
132
|
-
var subdivisions = [];
|
|
133
|
-
var subdivisionAlineas = null;
|
|
134
|
-
var subdivisionHeaders = null;
|
|
135
|
-
while (state !== null) {
|
|
136
|
-
switch (state) {
|
|
137
|
-
case "nextBodyChild":
|
|
138
|
-
if (bodyChild.nextElementSibling === null) {
|
|
139
|
-
// The document has been fully parsed.
|
|
140
|
-
state = null;
|
|
141
|
-
} else {
|
|
142
|
-
bodyChild = bodyChild.nextElementSibling;
|
|
143
|
-
if (bodyChild.tagName === "DIV") {
|
|
144
|
-
alineaElement = bodyChild.children[0];
|
|
145
|
-
if (alineaElement === undefined || bodyChild.id.includes("ftn")) {
|
|
146
|
-
// No alinea in current bodyChild: go to next bodyChild.
|
|
147
|
-
state = "nextBodyChild";
|
|
148
|
-
} else {
|
|
149
|
-
state = "alineaElement";
|
|
150
|
-
}
|
|
151
|
-
} else {
|
|
152
|
-
// <P/> is for footnotes
|
|
153
|
-
(0, _assert["default"])(["BR", "HR", "P"].includes(bodyChild.tagName), "Unexpected tag name \"".concat(bodyChild.tagName, "\" for body child"));
|
|
154
|
-
// Stay in the same state to go to next bodyChild.
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
break;
|
|
158
|
-
case "alineaElement":
|
|
159
|
-
switch (alineaElement.tagName) {
|
|
160
|
-
case "DIV":
|
|
161
|
-
state = "nextAlineaElement";
|
|
162
|
-
break;
|
|
163
|
-
case "H4":
|
|
164
|
-
// TODO
|
|
165
|
-
nextParentState = "nextAlineaElement";
|
|
166
|
-
state = "firstParagraphChild";
|
|
167
|
-
break;
|
|
168
|
-
case "P":
|
|
169
|
-
nextParentState = "nextAlineaElement";
|
|
170
|
-
state = "firstParagraphChild";
|
|
171
|
-
break;
|
|
172
|
-
case "OL":
|
|
173
|
-
// TODO
|
|
174
|
-
state = "nextAlineaElement";
|
|
175
|
-
break;
|
|
176
|
-
case "TABLE":
|
|
177
|
-
nextParentState = "nextAlineaElement";
|
|
178
|
-
state = "firstParagraphChild";
|
|
179
|
-
break;
|
|
180
|
-
default:
|
|
181
|
-
return {
|
|
182
|
-
error: {
|
|
183
|
-
code: -2,
|
|
184
|
-
message: "Unexpected tag name for alinea element: ".concat(alineaElement.tagName)
|
|
185
|
-
},
|
|
186
|
-
html: html,
|
|
187
|
-
page: page
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
break;
|
|
191
|
-
case "firstParagraphChild":
|
|
192
|
-
var headerText = alineaElement.textContent;
|
|
193
|
-
var nameComputed = (headerText || "").normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\(nouveau\)/, "").replace(/\(Pour coordination\)/, "").replace(/\(Supprimés?\)/, "").replace(/ /g, " ").replace(/[\-,.…]/g, "").trim().replace(/ {1,}/g, "_");
|
|
194
|
-
var nameUpper = nameComputed.toUpperCase();
|
|
195
|
-
var _parseHeader = parseHeader(nameUpper),
|
|
196
|
-
_parseHeader2 = _slicedToArray(_parseHeader, 2),
|
|
197
|
-
nextLevel = _parseHeader2[0],
|
|
198
|
-
paragraphType = _parseHeader2[1];
|
|
199
|
-
if (!nameUpper || nameUpper.match(/^(PROJET|PROPOSITION)_DE_LOI(_|$)/) !== null) {
|
|
200
|
-
// Occurs in:
|
|
201
|
-
// * http://www.assemblee-nationale.fr/15/textes/0232.asp
|
|
202
|
-
// * http://www.assemblee-nationale.fr/15/textes/0626.asp
|
|
203
|
-
// * http://www.assemblee-nationale.fr/15/textes/0676.asp
|
|
204
|
-
state = nextParentState;
|
|
205
|
-
break;
|
|
206
|
-
} else if (nameUpper === "JEUX_OLYMPIQUES_ET_PARALYMPIQUES_DE_2024") {
|
|
207
|
-
// Occurs in http://www.assemblee-nationale.fr/15/textes/0676.asp
|
|
208
|
-
state = nextParentState;
|
|
209
|
-
break;
|
|
210
|
-
} else if (nameUpper === "TEXTE_DE_LA_COMMISSION_MIXTE_PARITAIRE") {
|
|
211
|
-
// Occurs in http://www.assemblee-nationale.fr/15/textes/1294.asp
|
|
212
|
-
state = nextParentState;
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
var lineHtml = cleanText(alineaElement.outerHTML);
|
|
216
|
-
var lineText = cleanText(alineaElement.textContent);
|
|
217
|
-
if (nextLevel === null) {
|
|
218
|
-
// It is a regular alinea
|
|
219
|
-
// Exclude some alineas
|
|
220
|
-
var excludeAlinea = false;
|
|
221
|
-
var _iterator = _createForOfIteratorHelper(excludedAlineas),
|
|
222
|
-
_step;
|
|
223
|
-
try {
|
|
224
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
225
|
-
var regex = _step.value;
|
|
226
|
-
if (regex.test(lineText)) {
|
|
227
|
-
excludeAlinea = true;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
} catch (err) {
|
|
231
|
-
_iterator.e(err);
|
|
232
|
-
} finally {
|
|
233
|
-
_iterator.f();
|
|
234
|
-
}
|
|
235
|
-
if (excludeAlinea) {
|
|
236
|
-
state = nextParentState;
|
|
237
|
-
break;
|
|
238
|
-
}
|
|
239
|
-
if (subdivisionHeaders.length === 0 || isMultiLinesHeader && subdivisionAlineas.length === 0) {
|
|
240
|
-
subdivisionHeaders.push({
|
|
241
|
-
texte: lineText,
|
|
242
|
-
html: lineHtml
|
|
243
|
-
});
|
|
244
|
-
} else {
|
|
245
|
-
subdivisionAlineas.push({
|
|
246
|
-
texte: lineText,
|
|
247
|
-
html: lineHtml
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
if (isMultiLinesHeader && subdivisionHeaders.length >= 2) {
|
|
251
|
-
isMultiLinesHeader = false;
|
|
252
|
-
}
|
|
253
|
-
// Skip paragraph.
|
|
254
|
-
state = nextParentState;
|
|
255
|
-
break;
|
|
256
|
-
} else if (nextLevel !== null) {
|
|
257
|
-
// It is a header
|
|
258
|
-
level = nextLevel;
|
|
259
|
-
while (levels.length > 0 && level < levels[levels.length - 1]) {
|
|
260
|
-
levels.pop();
|
|
261
|
-
}
|
|
262
|
-
if (levels.length === 0 || level > levels[levels.length - 1]) {
|
|
263
|
-
levels.push(level);
|
|
264
|
-
}
|
|
265
|
-
subdivisionAlineas = [];
|
|
266
|
-
subdivisionHeaders = [{
|
|
267
|
-
texte: lineText,
|
|
268
|
-
html: lineHtml
|
|
269
|
-
}];
|
|
270
|
-
|
|
271
|
-
// Articles & "Exposé des motifs" are the only divisions without second title.
|
|
272
|
-
isMultiLinesHeader = nameUpper.match(/^ARTICLES?_/) === null && nameUpper.match(/^EXPOSE_DES_MOTIFS$/) === null;
|
|
273
|
-
subdivisions.push({
|
|
274
|
-
id: "D_" + nameComputed,
|
|
275
|
-
type: paragraphType,
|
|
276
|
-
niveau: level + 1,
|
|
277
|
-
niveauRelatif: levels.length,
|
|
278
|
-
titres: subdivisionHeaders,
|
|
279
|
-
alineas: subdivisionAlineas
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
state = nextParentState;
|
|
283
|
-
break;
|
|
284
|
-
case "nextAlineaElement":
|
|
285
|
-
alineaElement = alineaElement.nextElementSibling;
|
|
286
|
-
if (alineaElement === null) {
|
|
287
|
-
// The bodyChild has been fully parsed. Go to next bodyChild
|
|
288
|
-
state = "nextBodyChild";
|
|
289
|
-
} else {
|
|
290
|
-
state = "alineaElement";
|
|
291
|
-
}
|
|
292
|
-
break;
|
|
293
|
-
default:
|
|
294
|
-
throw "Unexpected state: ".concat(state);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
window.close(); // Free memory.
|
|
298
|
-
|
|
299
|
-
return {
|
|
300
|
-
error: null,
|
|
301
|
-
html: html,
|
|
302
|
-
page: page,
|
|
303
|
-
subdivisions: subdivisions,
|
|
304
|
-
url: assembleeUrl
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYXNzZXJ0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfanNkb20iLCJlIiwiX19lc01vZHVsZSIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiciIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX3NsaWNlZFRvQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJfbm9uSXRlcmFibGVSZXN0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJsIiwiaSIsIk9iamVjdCIsInB1c2giLCJwYXJzZUhlYWRlciIsImhlYWRlciIsImhlYWRlcnNNYXBwaW5nIiwicmVnZXgiLCJsZXZlbCIsIl9pIiwiX2hlYWRlcnNNYXBwaW5nIiwiX2hlYWRlcnNNYXBwaW5nJF9pIiwibWF0Y2giLCJjbGVhblRleHQiLCJ0ZXh0IiwicmVwbGFjZSIsInRyaW0iLCJleGNsdWRlZEFsaW5lYXMiLCJwYXJzZVRleHRlIiwiYXNzZW1ibGVlVXJsIiwicGFnZSIsImh0bWwiLCJfSlNET00iLCJKU0RPTSIsIndpbmRvdyIsImRvY3VtZW50IiwiYXNzZXJ0Iiwic3RyaWN0RXF1YWwiLCJjaGlsZHJlbiIsImh0bWxFbGVtZW50IiwiYm9keUVsZW1lbnQiLCJjbG9zZSIsImVycm9yIiwiY29kZSIsIm1lc3NhZ2UiLCJ0YWdOYW1lIiwiYm9keUNoaWxkIiwiYWxpbmVhRWxlbWVudCIsImlzTXVsdGlMaW5lc0hlYWRlciIsImxldmVscyIsIm5leHRQYXJlbnRTdGF0ZSIsInN0YXRlIiwic3ViZGl2aXNpb25zIiwic3ViZGl2aXNpb25BbGluZWFzIiwic3ViZGl2aXNpb25IZWFkZXJzIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidW5kZWZpbmVkIiwiaWQiLCJpbmNsdWRlcyIsImNvbmNhdCIsImhlYWRlclRleHQiLCJ0ZXh0Q29udGVudCIsIm5hbWVDb21wdXRlZCIsIm5vcm1hbGl6ZSIsIm5hbWVVcHBlciIsInRvVXBwZXJDYXNlIiwiX3BhcnNlSGVhZGVyIiwiX3BhcnNlSGVhZGVyMiIsIm5leHRMZXZlbCIsInBhcmFncmFwaFR5cGUiLCJsaW5lSHRtbCIsIm91dGVySFRNTCIsImxpbmVUZXh0IiwiZXhjbHVkZUFsaW5lYSIsIl9pdGVyYXRvciIsIl9zdGVwIiwiZXJyIiwidGV4dGUiLCJwb3AiLCJ0eXBlIiwibml2ZWF1Iiwibml2ZWF1UmVsYXRpZiIsInRpdHJlcyIsImFsaW5lYXMiLCJ1cmwiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2Vycy90ZXh0ZXNfbG9pcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgSlNET00gfSBmcm9tIFwianNkb21cIlxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcihoZWFkZXI6IHN0cmluZyk6IFtudW1iZXIgfCBudWxsLCBzdHJpbmddIHtcbiAgY29uc3QgaGVhZGVyc01hcHBpbmc6IHsgcmVnZXg6IFJlZ0V4cDsgbGV2ZWw6IG51bWJlcjsgbmFtZTogc3RyaW5nIH1bXSA9IFtcbiAgICB7IHJlZ2V4OiAvXihSQVBQT1JUXyk/QU5ORVhFKF98JCl8XkVUQVRfLywgbGV2ZWw6IDAsIG5hbWU6IFwiQW5uZXhlXCIgfSxcbiAgICB7IHJlZ2V4OiAvXlRPTUVfLywgbGV2ZWw6IDEsIG5hbWU6IFwiVG9tZVwiIH0sXG4gICAge1xuICAgICAgcmVnZXg6XG4gICAgICAgIC9eUEFSVElFX3xeKFBSRU1JRVJFfFNFQ09OREV8REVVWElFTUV8VFJPSVNJRU1FfFFVQVRSSUVNRSlfUEFSVElFKF98JCkvLFxuICAgICAgbGV2ZWw6IDIsXG4gICAgICBuYW1lOiBcIlBhcnRpZVwiLFxuICAgIH0sXG4gICAgeyByZWdleDogL15MSVZSRV8vLCBsZXZlbDogMywgbmFtZTogXCJMaXZyZVwiIH0sXG4gICAgeyByZWdleDogL15USVRSRV8vLCBsZXZlbDogNCwgbmFtZTogXCJUaXRyZVwiIH0sXG4gICAgeyByZWdleDogL15TT1VTVElUUkVfLywgbGV2ZWw6IDUsIG5hbWU6IFwiU291c1RpdHJlXCIgfSxcbiAgICB7IHJlZ2V4OiAvXkNIQVBJVFJFXy8sIGxldmVsOiA2LCBuYW1lOiBcIkNoYXBpdHJlXCIgfSxcbiAgICB7IHJlZ2V4OiAvXlNFQ1RJT05fLywgbGV2ZWw6IDcsIG5hbWU6IFwiU2VjdGlvblwiIH0sXG4gICAgeyByZWdleDogL15TT1VTU0VDVElPTl8vLCBsZXZlbDogOCwgbmFtZTogXCJTb3VzU2VjdGlvblwiIH0sXG4gICAgeyByZWdleDogL15BUlRJQ0xFUz9fLywgbGV2ZWw6IDksIG5hbWU6IFwiQXJ0aWNsZVwiIH0sXG4gICAgeyByZWdleDogL15FWFBPU0VfREVTX01PVElGUyQvLCBsZXZlbDogOSwgbmFtZTogXCJFeHBvc2VNb3RpZnNcIiB9LFxuICBdXG5cbiAgZm9yIChsZXQgeyByZWdleCwgbGV2ZWwsIG5hbWUgfSBvZiBoZWFkZXJzTWFwcGluZykge1xuICAgIGlmIChoZWFkZXIubWF0Y2gocmVnZXgpKSB7XG4gICAgICByZXR1cm4gW2xldmVsLCBuYW1lXVxuICAgIH1cbiAgfVxuICByZXR1cm4gW251bGwsIFwiXCJdXG59XG5cbmZ1bmN0aW9uIGNsZWFuVGV4dCh0ZXh0OiBzdHJpbmcgfCBudWxsKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQ/LnJlcGxhY2UoL1tcXG5cXHRdKy9nLCBcIlwiKS50cmltKCkgfHwgXCJcIlxufVxuXG5jb25zdCBleGNsdWRlZEFsaW5lYXMgPSBbXG4gIC9eRMOpbGliw6lyw6kgZW4gc8OpYW5jZSBwdWJsaXF1ZS8sXG4gIC9eRmFpdCBsZS8sXG4gIC9eTGUgUHLDqXNpZGVudCwkLyxcbiAgL15TaWduw6kvLFxuXVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUZXh0ZShhc3NlbWJsZWVVcmw6IHN0cmluZywgcGFnZTogc3RyaW5nKSB7XG4gIC8vIFJlcGFpciBIVE1MLlxuICBsZXQgaHRtbCA9IHBhZ2UucmVwbGFjZSgvKDxzdHlsZVtcXHdcXFddK3N0eWxlPikvZywgXCJcIilcblxuICAvLyBFeHRyYWN0IHN1YmRpdmlzaW9ucyBmcm9tIEhUTUwuXG4gIGNvbnN0IHsgd2luZG93IH0gPSBuZXcgSlNET00oaHRtbClcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gd2luZG93XG4gIGFzc2VydC5zdHJpY3RFcXVhbChkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGgsIDEpXG4gIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY2hpbGRyZW5bMF1cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCwgMilcbiAgY29uc3QgYm9keUVsZW1lbnQgPSBodG1sRWxlbWVudC5jaGlsZHJlblsxXVxuXG4gIGlmIChib2R5RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPCAzKSB7XG4gICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDMyNi5hc3AuXG4gICAgd2luZG93LmNsb3NlKCkgLy8gRnJlZSBtZW1vcnkuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IC0xLCBtZXNzYWdlOiBcIlRleHRlIGRlIGxvaSBzYW5zIGNvbnRlbnVcIiB9LFxuICAgICAgaHRtbCxcbiAgICAgIHBhZ2UsXG4gICAgfVxuICB9XG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5RWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lLCBcIkRJVlwiKVxuICAvLyBGaXJzdCBjaGlsZCBpcyBhIERJViBkZXNjcmliaW5nIHRoZSBkb2N1bWVudCAoQXNzZW1ibMOpZSdzIGhlYWRlcikuIFNraXAgaXQgZm9yIG5vdy5cbiAgbGV0IGJvZHlDaGlsZCA9IGJvZHlFbGVtZW50LmNoaWxkcmVuWzFdXG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGJvZHlDaGlsZC50YWdOYW1lLCBcIkJSXCIpXG4gIGxldCBhbGluZWFFbGVtZW50OiBFbGVtZW50IHwgbnVsbCA9IG51bGxcbiAgbGV0IGlzTXVsdGlMaW5lc0hlYWRlcjogYm9vbGVhbiA9IGZhbHNlXG4gIGxldCBsZXZlbDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgbGV0IGxldmVsczogbnVtYmVyW10gPSBbXVxuICBsZXQgbmV4dFBhcmVudFN0YXRlID0gbnVsbFxuICBsZXQgc3RhdGU6IHN0cmluZyB8IG51bGwgPSBcIm5leHRCb2R5Q2hpbGRcIlxuICBjb25zdCBzdWJkaXZpc2lvbnMgPSBbXVxuICBsZXQgc3ViZGl2aXNpb25BbGluZWFzOiBvYmplY3RbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnM6IG9iamVjdFtdIHwgbnVsbCA9IG51bGxcbiAgd2hpbGUgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgY2FzZSBcIm5leHRCb2R5Q2hpbGRcIjpcbiAgICAgICAgaWYgKGJvZHlDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgZG9jdW1lbnQgaGFzIGJlZW4gZnVsbHkgcGFyc2VkLlxuICAgICAgICAgIHN0YXRlID0gbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHlDaGlsZCA9IGJvZHlDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgICBpZiAoYm9keUNoaWxkLnRhZ05hbWUgPT09IFwiRElWXCIpIHtcbiAgICAgICAgICAgIGFsaW5lYUVsZW1lbnQgPSBib2R5Q2hpbGQuY2hpbGRyZW5bMF1cblxuICAgICAgICAgICAgaWYgKGFsaW5lYUVsZW1lbnQgPT09IHVuZGVmaW5lZCB8fCBib2R5Q2hpbGQuaWQuaW5jbHVkZXMoXCJmdG5cIikpIHtcbiAgICAgICAgICAgICAgLy8gTm8gYWxpbmVhIGluIGN1cnJlbnQgYm9keUNoaWxkOiBnbyB0byBuZXh0IGJvZHlDaGlsZC5cbiAgICAgICAgICAgICAgc3RhdGUgPSBcIm5leHRCb2R5Q2hpbGRcIlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBcImFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyA8UC8+IGlzIGZvciBmb290bm90ZXNcbiAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgW1wiQlJcIiwgXCJIUlwiLCBcIlBcIl0uaW5jbHVkZXMoYm9keUNoaWxkLnRhZ05hbWUpLFxuICAgICAgICAgICAgICBgVW5leHBlY3RlZCB0YWcgbmFtZSBcIiR7Ym9keUNoaWxkLnRhZ05hbWV9XCIgZm9yIGJvZHkgY2hpbGRgLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gU3RheSBpbiB0aGUgc2FtZSBzdGF0ZSB0byBnbyB0byBuZXh0IGJvZHlDaGlsZC5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJhbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoYWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJESVZcIjpcbiAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgXCJINFwiOlxuICAgICAgICAgICAgLy8gVE9ET1xuICAgICAgICAgICAgbmV4dFBhcmVudFN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBzdGF0ZSA9IFwiZmlyc3RQYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgXCJQXCI6XG4gICAgICAgICAgICBuZXh0UGFyZW50U3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIk9MXCI6XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiVEFCTEVcIjpcbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgc3RhdGUgPSBcImZpcnN0UGFyYWdyYXBoQ2hpbGRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICBjb2RlOiAtMixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVW5leHBlY3RlZCB0YWcgbmFtZSBmb3IgYWxpbmVhIGVsZW1lbnQ6ICR7XG4gICAgICAgICAgICAgICAgICBhbGluZWFFbGVtZW50IS50YWdOYW1lXG4gICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFBhcmFncmFwaENoaWxkXCI6XG4gICAgICAgIGNvbnN0IGhlYWRlclRleHQgPSBhbGluZWFFbGVtZW50IS50ZXh0Q29udGVudFxuICAgICAgICBjb25zdCBuYW1lQ29tcHV0ZWQgPSAoaGVhZGVyVGV4dCB8fCBcIlwiKVxuICAgICAgICAgIC5ub3JtYWxpemUoXCJORkRcIilcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIilcbiAgICAgICAgICAucmVwbGFjZSgvXFwobm91dmVhdVxcKS8sIFwiXCIpXG4gICAgICAgICAgLnJlcGxhY2UoL1xcKFBvdXIgY29vcmRpbmF0aW9uXFwpLywgXCJcIilcbiAgICAgICAgICAucmVwbGFjZSgvXFwoU3VwcHJpbcOpcz9cXCkvLCBcIlwiKVxuICAgICAgICAgIC5yZXBsYWNlKC/CoC9nLCBcIiBcIilcbiAgICAgICAgICAucmVwbGFjZSgvW1xcLSwu4oCmXS9nLCBcIlwiKVxuICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAucmVwbGFjZSgvIHsxLH0vZywgXCJfXCIpXG5cbiAgICAgICAgY29uc3QgbmFtZVVwcGVyID0gbmFtZUNvbXB1dGVkLnRvVXBwZXJDYXNlKClcbiAgICAgICAgY29uc3QgW25leHRMZXZlbCwgcGFyYWdyYXBoVHlwZV0gPSBwYXJzZUhlYWRlcihuYW1lVXBwZXIpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFuYW1lVXBwZXIgfHxcbiAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL14oUFJPSkVUfFBST1BPU0lUSU9OKV9ERV9MT0koX3wkKS8pICE9PSBudWxsXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIE9jY3VycyBpbjpcbiAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDIzMi5hc3BcbiAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDYyNi5hc3BcbiAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3Ni5hc3BcbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAobmFtZVVwcGVyID09PSBcIkpFVVhfT0xZTVBJUVVFU19FVF9QQVJBTFlNUElRVUVTX0RFXzIwMjRcIikge1xuICAgICAgICAgIC8vIE9jY3VycyBpbiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2NzYuYXNwXG4gICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKG5hbWVVcHBlciA9PT0gXCJURVhURV9ERV9MQV9DT01NSVNTSU9OX01JWFRFX1BBUklUQUlSRVwiKSB7XG4gICAgICAgICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTI5NC5hc3BcbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsaW5lSHRtbCA9IGNsZWFuVGV4dChhbGluZWFFbGVtZW50IS5vdXRlckhUTUwpXG4gICAgICAgIGNvbnN0IGxpbmVUZXh0ID0gY2xlYW5UZXh0KGFsaW5lYUVsZW1lbnQhLnRleHRDb250ZW50KVxuXG4gICAgICAgIGlmIChuZXh0TGV2ZWwgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJdCBpcyBhIHJlZ3VsYXIgYWxpbmVhXG4gICAgICAgICAgLy8gRXhjbHVkZSBzb21lIGFsaW5lYXNcbiAgICAgICAgICBsZXQgZXhjbHVkZUFsaW5lYSA9IGZhbHNlXG4gICAgICAgICAgZm9yIChsZXQgcmVnZXggb2YgZXhjbHVkZWRBbGluZWFzKSB7XG4gICAgICAgICAgICBpZiAocmVnZXgudGVzdChsaW5lVGV4dCkpIHtcbiAgICAgICAgICAgICAgZXhjbHVkZUFsaW5lYSA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4Y2x1ZGVBbGluZWEpIHtcbiAgICAgICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnMhLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAgICAgKGlzTXVsdGlMaW5lc0hlYWRlciAmJiBzdWJkaXZpc2lvbkFsaW5lYXMhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVycyEucHVzaCh7XG4gICAgICAgICAgICAgIHRleHRlOiBsaW5lVGV4dCxcbiAgICAgICAgICAgICAgaHRtbDogbGluZUh0bWwsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXMhLnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0ZTogbGluZVRleHQsXG4gICAgICAgICAgICAgIGh0bWw6IGxpbmVIdG1sLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGlzTXVsdGlMaW5lc0hlYWRlciAmJiBzdWJkaXZpc2lvbkhlYWRlcnMhLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICBpc011bHRpTGluZXNIZWFkZXIgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBTa2lwIHBhcmFncmFwaC5cbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAobmV4dExldmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gSXQgaXMgYSBoZWFkZXJcbiAgICAgICAgICBsZXZlbCA9IG5leHRMZXZlbFxuICAgICAgICAgIHdoaWxlIChsZXZlbHMubGVuZ3RoID4gMCAmJiBsZXZlbCA8IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgIGxldmVscy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobGV2ZWxzLmxlbmd0aCA9PT0gMCB8fCBsZXZlbCA+IGxldmVsc1tsZXZlbHMubGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgICAgIGxldmVscy5wdXNoKGxldmVsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhcyA9IFtdXG4gICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzID0gW3sgdGV4dGU6IGxpbmVUZXh0LCBodG1sOiBsaW5lSHRtbCB9XVxuXG4gICAgICAgICAgLy8gQXJ0aWNsZXMgJiBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIGFyZSB0aGUgb25seSBkaXZpc2lvbnMgd2l0aG91dCBzZWNvbmQgdGl0bGUuXG4gICAgICAgICAgaXNNdWx0aUxpbmVzSGVhZGVyID1cbiAgICAgICAgICAgIG5hbWVVcHBlci5tYXRjaCgvXkFSVElDTEVTP18vKSA9PT0gbnVsbCAmJlxuICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eRVhQT1NFX0RFU19NT1RJRlMkLykgPT09IG51bGxcblxuICAgICAgICAgIHN1YmRpdmlzaW9ucy5wdXNoKHtcbiAgICAgICAgICAgIGlkOiBcIkRfXCIgKyBuYW1lQ29tcHV0ZWQsXG4gICAgICAgICAgICB0eXBlOiBwYXJhZ3JhcGhUeXBlLFxuICAgICAgICAgICAgbml2ZWF1OiBsZXZlbCArIDEsXG4gICAgICAgICAgICBuaXZlYXVSZWxhdGlmOiBsZXZlbHMubGVuZ3RoLFxuICAgICAgICAgICAgdGl0cmVzOiBzdWJkaXZpc2lvbkhlYWRlcnMsXG4gICAgICAgICAgICBhbGluZWFzOiBzdWJkaXZpc2lvbkFsaW5lYXMsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibmV4dEFsaW5lYUVsZW1lbnRcIjpcbiAgICAgICAgYWxpbmVhRWxlbWVudCA9IGFsaW5lYUVsZW1lbnQhLm5leHRFbGVtZW50U2libGluZ1xuICAgICAgICBpZiAoYWxpbmVhRWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBib2R5Q2hpbGQgaGFzIGJlZW4gZnVsbHkgcGFyc2VkLiBHbyB0byBuZXh0IGJvZHlDaGlsZFxuICAgICAgICAgIHN0YXRlID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwiYWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGBVbmV4cGVjdGVkIHN0YXRlOiAke3N0YXRlfWBcbiAgICB9XG4gIH1cblxuICB3aW5kb3cuY2xvc2UoKSAvLyBGcmVlIG1lbW9yeS5cblxuICByZXR1cm4ge1xuICAgIGVycm9yOiBudWxsLFxuICAgIGh0bWwsXG4gICAgcGFnZSxcbiAgICBzdWJkaXZpc2lvbnMsXG4gICAgdXJsOiBhc3NlbWJsZWVVcmwsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFELE9BQUE7QUFBNkIsU0FBQUQsdUJBQUFHLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUFBLFNBQUFFLDJCQUFBQyxDQUFBLEVBQUFILENBQUEsUUFBQUksQ0FBQSx5QkFBQUMsTUFBQSxJQUFBRixDQUFBLENBQUFFLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSCxDQUFBLHFCQUFBQyxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTCxDQUFBLE1BQUFDLENBQUEsR0FBQUssMkJBQUEsQ0FBQU4sQ0FBQSxNQUFBSCxDQUFBLElBQUFHLENBQUEsdUJBQUFBLENBQUEsQ0FBQU8sTUFBQSxJQUFBTixDQUFBLEtBQUFELENBQUEsR0FBQUMsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQSxFQUFB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
|