@tricoteuses/assemblee 1.10.5 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -1
- package/lib/amendements-CN7bRFdP.js +259 -0
- package/lib/amendements-CN7bRFdP.js.map +1 -0
- package/lib/amendements-Cg1lyCBp.js +735 -0
- package/lib/amendements-Cg1lyCBp.js.map +1 -0
- package/lib/api.d.ts +1 -0
- package/lib/api.d.ts.map +1 -0
- package/lib/cleaners/actes_legislatifs.d.ts +1 -0
- package/lib/cleaners/actes_legislatifs.d.ts.map +1 -0
- package/lib/cleaners/acteurs.d.ts +1 -0
- package/lib/cleaners/acteurs.d.ts.map +1 -0
- package/lib/cleaners/amendements.d.ts +1 -0
- package/lib/cleaners/amendements.d.ts.map +1 -0
- package/lib/cleaners/debats.d.ts +1 -0
- package/lib/cleaners/debats.d.ts.map +1 -0
- package/lib/cleaners/documents.d.ts +1 -0
- package/lib/cleaners/documents.d.ts.map +1 -0
- package/lib/cleaners/dossiers_legislatifs.d.ts +1 -0
- package/lib/cleaners/dossiers_legislatifs.d.ts.map +1 -0
- package/lib/cleaners/index.d.ts +10 -9
- package/lib/cleaners/index.d.ts.map +1 -0
- package/lib/cleaners/organes.d.ts +1 -0
- package/lib/cleaners/organes.d.ts.map +1 -0
- package/lib/cleaners/questions.d.ts +1 -0
- package/lib/cleaners/questions.d.ts.map +1 -0
- package/lib/cleaners/reunions.d.ts +1 -0
- package/lib/cleaners/reunions.d.ts.map +1 -0
- package/lib/cleaners/scrutins.d.ts +1 -0
- package/lib/cleaners/scrutins.d.ts.map +1 -0
- package/lib/cleaners/xml.d.ts +1 -0
- package/lib/cleaners/xml.d.ts.map +1 -0
- package/lib/cleaners.js +1138 -0
- package/lib/cleaners.js.map +1 -0
- package/lib/datasets.d.ts +4 -3
- package/lib/datasets.d.ts.map +1 -0
- package/lib/dates.d.ts +1 -0
- package/lib/dates.d.ts.map +1 -0
- package/lib/debats-BwZYgzXe.js +3978 -0
- package/lib/debats-BwZYgzXe.js.map +1 -0
- package/lib/dossiers_legislatifs.d.ts +3 -2
- package/lib/dossiers_legislatifs.d.ts.map +1 -0
- package/lib/file_systems.d.ts +1 -0
- package/lib/file_systems.d.ts.map +1 -0
- package/lib/git.d.ts +1 -0
- package/lib/git.d.ts.map +1 -0
- package/lib/index.d.ts +18 -22
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +1916 -285
- package/lib/index.js.map +1 -0
- package/lib/inserters.d.ts +6 -5
- package/lib/inserters.d.ts.map +1 -0
- package/lib/loaders.d.ts +13 -12
- package/lib/loaders.d.ts.map +1 -0
- package/lib/loaders.js +812 -1516
- package/lib/loaders.js.map +1 -0
- package/lib/logger.d.ts +1 -0
- package/lib/logger.d.ts.map +1 -0
- package/lib/organes.d.ts +2 -1
- package/lib/organes.d.ts.map +1 -0
- package/lib/parse-CzW8NHW5.js +2850 -0
- package/lib/parse-CzW8NHW5.js.map +1 -0
- package/lib/parsers/index.d.ts +3 -3
- package/lib/parsers/index.d.ts.map +1 -0
- package/lib/parsers/plf.d.ts +2 -0
- package/lib/parsers/plf.d.ts.map +1 -0
- package/lib/parsers/recherche_amendements.d.ts +3 -2
- package/lib/parsers/recherche_amendements.d.ts.map +1 -0
- package/lib/parsers/textes_lois.d.ts +2 -23
- package/lib/parsers/textes_lois.d.ts.map +1 -0
- package/lib/parsers.js +393 -0
- package/lib/parsers.js.map +1 -0
- package/lib/raw_types/acteurs_et_organes.d.ts +1 -0
- package/lib/raw_types/acteurs_et_organes.d.ts.map +1 -0
- package/lib/raw_types/agendas.d.ts +1 -0
- package/lib/raw_types/agendas.d.ts.map +1 -0
- package/lib/raw_types/amendements.d.ts +1 -0
- package/lib/raw_types/amendements.d.ts.map +1 -0
- package/lib/raw_types/debats.d.ts +3 -2
- package/lib/raw_types/debats.d.ts.map +1 -0
- package/lib/raw_types/dossiers_legislatifs.d.ts +2 -1
- package/lib/raw_types/dossiers_legislatifs.d.ts.map +1 -0
- package/lib/raw_types/questions.d.ts +1 -0
- package/lib/raw_types/questions.d.ts.map +1 -0
- package/lib/raw_types/scrutins.d.ts +1 -0
- package/lib/raw_types/scrutins.d.ts.map +1 -0
- package/lib/schemas/acteurs_et_organes.d.json +982 -0
- package/lib/schemas/acteurs_et_organes.json +1166 -0
- package/lib/schemas/agendas.d.json +1561 -0
- package/lib/schemas/agendas.json +1745 -0
- package/lib/schemas/amendements.d.json +1901 -0
- package/lib/schemas/amendements.json +2085 -0
- package/lib/schemas/debats.d.json +623 -0
- package/lib/schemas/debats.json +842 -0
- package/lib/schemas/dossiers_legislatifs.d.json +3690 -0
- package/lib/schemas/dossiers_legislatifs.json +3874 -0
- package/lib/schemas/legislatures.d.json +17 -0
- package/lib/schemas/legislatures.json +17 -0
- package/lib/schemas/questions.d.json +520 -0
- package/lib/schemas/questions.json +704 -0
- package/lib/schemas/scrutins.d.json +517 -0
- package/lib/schemas/scrutins.json +701 -0
- package/lib/scripts/add_links_to_documents.d.ts +2 -0
- package/lib/scripts/add_links_to_documents.d.ts.map +1 -0
- package/lib/scripts/clean_reorganized_data.d.ts +1 -0
- package/lib/scripts/clean_reorganized_data.d.ts.map +1 -0
- package/lib/scripts/copy-schemas.d.ts +2 -0
- package/lib/scripts/copy-schemas.d.ts.map +1 -0
- package/lib/scripts/diff_amendements.d.ts +1 -0
- package/lib/scripts/diff_amendements.d.ts.map +1 -0
- package/lib/scripts/document_dossiers_legislatifs.d.ts +1 -0
- package/lib/scripts/document_dossiers_legislatifs.d.ts.map +1 -0
- package/lib/scripts/generate-json-schemas.d.ts +2 -0
- package/lib/scripts/generate-json-schemas.d.ts.map +1 -0
- package/lib/scripts/get_today_reunions.d.ts +1 -0
- package/lib/scripts/get_today_reunions.d.ts.map +1 -0
- package/lib/scripts/merge_scrutins.d.ts +1 -0
- package/lib/scripts/merge_scrutins.d.ts.map +1 -0
- package/lib/scripts/process_open_dataset.d.ts +1 -0
- package/lib/scripts/process_open_dataset.d.ts.map +1 -0
- package/lib/scripts/raw_types_from_amendements.d.ts +1 -0
- package/lib/scripts/raw_types_from_amendements.d.ts.map +1 -0
- package/lib/scripts/reorganize_data.d.ts +1 -0
- package/lib/scripts/reorganize_data.d.ts.map +1 -0
- package/lib/scripts/retrieve_deputes_photos.d.ts +2 -1
- package/lib/scripts/retrieve_deputes_photos.d.ts.map +1 -0
- package/lib/scripts/retrieve_documents.d.ts +1 -0
- package/lib/scripts/retrieve_documents.d.ts.map +1 -0
- package/lib/scripts/retrieve_open_data.d.ts +1 -0
- package/lib/scripts/retrieve_open_data.d.ts.map +1 -0
- package/lib/scripts/retrieve_pending_amendments.d.ts +1 -0
- package/lib/scripts/retrieve_pending_amendments.d.ts.map +1 -0
- package/lib/scripts/retrieve_senateurs_photos.d.ts +1 -0
- package/lib/scripts/retrieve_senateurs_photos.d.ts.map +1 -0
- package/lib/scripts/shared/cli_helpers.d.ts +1 -0
- package/lib/scripts/shared/cli_helpers.d.ts.map +1 -0
- package/lib/scripts/test_iter_load.d.ts +1 -0
- package/lib/scripts/test_iter_load.d.ts.map +1 -0
- package/lib/scripts/test_load.d.ts +1 -0
- package/lib/scripts/test_load.d.ts.map +1 -0
- package/lib/scripts/test_load_big_files.d.ts +1 -0
- package/lib/scripts/test_load_big_files.d.ts.map +1 -0
- package/lib/scripts/validate_json.d.ts +1 -0
- package/lib/scripts/validate_json.d.ts.map +1 -0
- package/lib/shared_types/codes_actes.d.ts +1 -0
- package/lib/shared_types/codes_actes.d.ts.map +1 -0
- package/lib/strings.d.ts +1 -0
- package/lib/strings.d.ts.map +1 -0
- package/lib/types/acteurs_et_organes.d.ts +341 -0
- package/lib/types/acteurs_et_organes.d.ts.map +1 -0
- package/lib/types/agendas.d.ts +237 -10
- package/lib/types/agendas.d.ts.map +1 -0
- package/lib/types/amendements.d.ts +277 -1
- package/lib/types/amendements.d.ts.map +1 -0
- package/lib/types/debats.d.ts +53 -2
- package/lib/types/debats.d.ts.map +1 -0
- package/lib/types/dossiers_legislatifs.d.ts +404 -9
- package/lib/types/dossiers_legislatifs.d.ts.map +1 -0
- package/lib/types/legislatures.d.ts +1 -0
- package/lib/types/legislatures.d.ts.map +1 -0
- package/lib/types/questions.d.ts +100 -2
- package/lib/types/questions.d.ts.map +1 -0
- package/lib/types/scrutins.d.ts +102 -0
- package/lib/types/scrutins.d.ts.map +1 -0
- package/lib/urls.d.ts +3 -2
- package/lib/urls.d.ts.map +1 -0
- package/package.json +31 -95
- package/lib/api.js +0 -52
- package/lib/api.mjs +0 -45
- package/lib/bugs/acteur-00010/plugin.test.d.ts +0 -1
- 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.d.ts +0 -1
- 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.d.ts +0 -1
- 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
|
@@ -1,370 +0,0 @@
|
|
|
1
|
-
import assert from "assert";
|
|
2
|
-
import { JSDOM } from "jsdom";
|
|
3
|
-
export function parseTexteLoi(assembleeUrl, page) {
|
|
4
|
-
// Repair HTML.
|
|
5
|
-
const pageSegments = page.split("</style>");
|
|
6
|
-
assert.strictEqual(pageSegments.length, 2, page);
|
|
7
|
-
let html = pageSegments[1].trim();
|
|
8
|
-
assert(html.startsWith("<div"));
|
|
9
|
-
assert(html.endsWith("</div>"));
|
|
10
|
-
html = `<html${html.substring(4, html.length - 6)}</html>`;
|
|
11
|
-
|
|
12
|
-
// Extract subdivisions from HTML.
|
|
13
|
-
const {
|
|
14
|
-
window
|
|
15
|
-
} = new JSDOM(html);
|
|
16
|
-
const {
|
|
17
|
-
document
|
|
18
|
-
} = window;
|
|
19
|
-
assert.strictEqual(document.children.length, 1);
|
|
20
|
-
const htmlElement = document.children[0];
|
|
21
|
-
assert.strictEqual(htmlElement.children.length, 2);
|
|
22
|
-
const bodyElement = htmlElement.children[1];
|
|
23
|
-
if (assembleeUrl === "http://www.assemblee-nationale.fr/15/textes/0675.asp") {
|
|
24
|
-
// Repair document.
|
|
25
|
-
assert.strictEqual(bodyElement.children.length, 1);
|
|
26
|
-
const divElement = bodyElement.children[0];
|
|
27
|
-
assert.strictEqual(divElement.tagName, "DIV");
|
|
28
|
-
const newDivElement = bodyElement.insertBefore(document.createElement("div"), divElement);
|
|
29
|
-
bodyElement.insertBefore(document.createElement("br"), divElement);
|
|
30
|
-
for (const divChild of [...divElement.children]) {
|
|
31
|
-
if (divChild.getAttribute("class") === "a9ArticleNum") {
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
newDivElement.appendChild(divChild);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (bodyElement.children.length < 3) {
|
|
38
|
-
// Occurs in http://www.assemblee-nationale.fr/15/textes/0326.asp.
|
|
39
|
-
window.close(); // Free memory.
|
|
40
|
-
return {
|
|
41
|
-
error: {
|
|
42
|
-
code: -1,
|
|
43
|
-
message: "Texte de loi sans contenu"
|
|
44
|
-
},
|
|
45
|
-
html,
|
|
46
|
-
page
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
assert.strictEqual(bodyElement.children[0].tagName, "DIV");
|
|
50
|
-
// First child is a DIV describing the document (Assemblée's header). Skip it for now.
|
|
51
|
-
let bodyChild = bodyElement.children[1];
|
|
52
|
-
assert.strictEqual(bodyChild.tagName, "BR");
|
|
53
|
-
let alineaElement = null;
|
|
54
|
-
let isMultiLinesHeader = false;
|
|
55
|
-
let level = null;
|
|
56
|
-
let levels = [];
|
|
57
|
-
let lineElements = null;
|
|
58
|
-
let nextParentState = null;
|
|
59
|
-
let paragraphChild = null;
|
|
60
|
-
let paragraphElement = null;
|
|
61
|
-
let state = "nextBodyChild";
|
|
62
|
-
let subAlineaElement = null;
|
|
63
|
-
const subdivisions = [];
|
|
64
|
-
let subdivisionAlineasHtml = null;
|
|
65
|
-
let subdivisionAlineasText = null;
|
|
66
|
-
let subdivisionHeadersHtml = null;
|
|
67
|
-
let subdivisionHeadersText = null;
|
|
68
|
-
while (state !== null) {
|
|
69
|
-
switch (state) {
|
|
70
|
-
case "alineaElement":
|
|
71
|
-
switch (alineaElement.tagName) {
|
|
72
|
-
case "DIV":
|
|
73
|
-
state = "firstSubAlineaElement";
|
|
74
|
-
break;
|
|
75
|
-
case "H4":
|
|
76
|
-
// TODO
|
|
77
|
-
nextParentState = "nextAlineaElement";
|
|
78
|
-
paragraphElement = alineaElement;
|
|
79
|
-
state = "firstParagraphChild";
|
|
80
|
-
break;
|
|
81
|
-
case "P":
|
|
82
|
-
nextParentState = "nextAlineaElement";
|
|
83
|
-
paragraphElement = alineaElement;
|
|
84
|
-
state = "firstParagraphChild";
|
|
85
|
-
break;
|
|
86
|
-
case "OL":
|
|
87
|
-
// TODO
|
|
88
|
-
state = "nextAlineaElement";
|
|
89
|
-
break;
|
|
90
|
-
case "TABLE":
|
|
91
|
-
// TODO
|
|
92
|
-
state = "nextAlineaElement";
|
|
93
|
-
break;
|
|
94
|
-
default:
|
|
95
|
-
return {
|
|
96
|
-
error: {
|
|
97
|
-
code: -2,
|
|
98
|
-
message: `Unexpected tag name for alinea element: ${alineaElement.tagName}`
|
|
99
|
-
},
|
|
100
|
-
html,
|
|
101
|
-
page
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
break;
|
|
105
|
-
case "firstAlineaElement":
|
|
106
|
-
alineaElement = bodyChild.children[0];
|
|
107
|
-
if (alineaElement === undefined) {
|
|
108
|
-
// No alinea in current bodyChild: go to next bodyChild.
|
|
109
|
-
state = "nextBodyChild";
|
|
110
|
-
} else {
|
|
111
|
-
state = "alineaElement";
|
|
112
|
-
}
|
|
113
|
-
break;
|
|
114
|
-
case "firstParagraphChild":
|
|
115
|
-
paragraphChild = paragraphElement.children[0];
|
|
116
|
-
if (paragraphChild === undefined) {
|
|
117
|
-
// No child in current paragraph: go to next parent element.
|
|
118
|
-
state = nextParentState;
|
|
119
|
-
} else {
|
|
120
|
-
const headerText = paragraphElement.textContent;
|
|
121
|
-
const nameComputed = (headerText || "").normalize("NFD").replace(/[\u0300-\u036f]/g, "").replace(/\(nouveau\)/, "").replace(/\(Pour coordination\)/, "").replace(/\(Supprimés?\)/, "").replace(/ /g, " ").replace(/[\-,.…]/g, "").trim().replace(/ {1,}/g, "_");
|
|
122
|
-
const nameUpper = nameComputed.toUpperCase();
|
|
123
|
-
if (nameUpper === "") {
|
|
124
|
-
// Occurs in:
|
|
125
|
-
// * http://www.assemblee-nationale.fr/15/textes/0445.asp
|
|
126
|
-
// * http://www.assemblee-nationale.fr/15/textes/0626.asp
|
|
127
|
-
// Skip paragraph.
|
|
128
|
-
state = nextParentState;
|
|
129
|
-
break;
|
|
130
|
-
}
|
|
131
|
-
const nextLevel = nameUpper.match(/^(RAPPORT_)?ANNEXE(_|$)/) !== null || nameUpper.match(/^ETAT_/) !== null ? 0 : nameUpper.match(/^TOME_/) !== null ? 1 : nameUpper.match(/^PARTIE_/) !== null || nameUpper.match(/^(PREMIERE|SECONDE|DEUXIEME|TROISIEME|QUATRIEME)_PARTIE(_|$)/) !== null ? 2 : nameUpper.match(/^LIVRE_/) !== null ? 3 : nameUpper.match(/^TITRE_/) !== null ? 4 : nameUpper.match(/^SOUSTITRE_/) !== null ? 5 : nameUpper.match(/^CHAPITRE_/) !== null ? 6 : nameUpper.match(/^SECTION_/) !== null ? 7 : nameUpper.match(/^SOUSSECTION_/) !== null ? 8 : nameUpper.match(/^ARTICLES?_/) !== null ||
|
|
132
|
-
// "Exposé des motifs" must be at the same level as article.
|
|
133
|
-
// "Exposé des motifs" without content:
|
|
134
|
-
// * http://www.assemblee-nationale.fr/15/textes/0702.asp
|
|
135
|
-
// "Exposé des motifs" with content:
|
|
136
|
-
// * http://www.assemblee-nationale.fr/15/textes/1326.asp
|
|
137
|
-
// * http://www.assemblee-nationale.fr/15/textes/1610.asp
|
|
138
|
-
nameUpper.match(/^EXPOSE_DES_MOTIFS$/) !== null ? 9 : null;
|
|
139
|
-
if (nextLevel === null && subdivisions.length === 0) {
|
|
140
|
-
if (nameUpper.match(/^(PROJET|PROPOSITION)_DE_LOI(_|$)/) !== null) {
|
|
141
|
-
// Occurs in:
|
|
142
|
-
// * http://www.assemblee-nationale.fr/15/textes/0232.asp
|
|
143
|
-
// * http://www.assemblee-nationale.fr/15/textes/0626.asp
|
|
144
|
-
// * http://www.assemblee-nationale.fr/15/textes/0676.asp
|
|
145
|
-
} else if (nameUpper === "JEUX_OLYMPIQUES_ET_PARALYMPIQUES_DE_2024") {
|
|
146
|
-
// Occurs in http://www.assemblee-nationale.fr/15/textes/0676.asp
|
|
147
|
-
} else if (nameUpper === "TEXTE_DE_LA_COMMISSION_MIXTE_PARITAIRE") {
|
|
148
|
-
// Occurs in http://www.assemblee-nationale.fr/15/textes/1294.asp
|
|
149
|
-
} else {
|
|
150
|
-
console.log(`Unexpected nameUpper = "${nameUpper}" at beginning of "texte de loi" at ${assembleeUrl}`);
|
|
151
|
-
}
|
|
152
|
-
// Skip paragraph.
|
|
153
|
-
state = nextParentState;
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
if (nextLevel !== null) {
|
|
157
|
-
level = nextLevel;
|
|
158
|
-
while (levels.length > 0 && level < levels[levels.length - 1]) {
|
|
159
|
-
levels.pop();
|
|
160
|
-
}
|
|
161
|
-
if (levels.length === 0 || level > levels[levels.length - 1]) {
|
|
162
|
-
levels.push(level);
|
|
163
|
-
}
|
|
164
|
-
// Articles & "Exposé des motifs" are the only divisions without second title.
|
|
165
|
-
isMultiLinesHeader = nameUpper.match(/^ARTICLES?_/) === null && nameUpper.match(/^EXPOSE_DES_MOTIFS$/) === null;
|
|
166
|
-
subdivisionAlineasHtml = [];
|
|
167
|
-
subdivisionAlineasText = [];
|
|
168
|
-
subdivisionHeadersHtml = [];
|
|
169
|
-
subdivisionHeadersText = [];
|
|
170
|
-
subdivisions.push({
|
|
171
|
-
html: {
|
|
172
|
-
alineas: subdivisionAlineasHtml,
|
|
173
|
-
headers: subdivisionHeadersHtml
|
|
174
|
-
},
|
|
175
|
-
id: "D_" + nameComputed,
|
|
176
|
-
level: level + 1,
|
|
177
|
-
relativeLevel: levels.length,
|
|
178
|
-
text: {
|
|
179
|
-
alineas: subdivisionAlineasText,
|
|
180
|
-
headers: subdivisionHeadersText
|
|
181
|
-
}
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
lineElements = [];
|
|
185
|
-
state = "paragraphChild";
|
|
186
|
-
}
|
|
187
|
-
break;
|
|
188
|
-
case "firstSubAlineaElement":
|
|
189
|
-
subAlineaElement = alineaElement.children[0];
|
|
190
|
-
if (subAlineaElement === undefined) {
|
|
191
|
-
// No sub-alinea in current alinea: go to next alinea.
|
|
192
|
-
state = "nextAlineaElement";
|
|
193
|
-
} else {
|
|
194
|
-
state = "subAlineaElement";
|
|
195
|
-
}
|
|
196
|
-
break;
|
|
197
|
-
case "nextAlineaElement":
|
|
198
|
-
alineaElement = alineaElement.nextElementSibling;
|
|
199
|
-
if (alineaElement === null) {
|
|
200
|
-
// The bodyChild has been fully parsed. Go to next bodyChild
|
|
201
|
-
state = "nextBodyChild";
|
|
202
|
-
} else {
|
|
203
|
-
state = "alineaElement";
|
|
204
|
-
}
|
|
205
|
-
break;
|
|
206
|
-
case "nextBodyChild":
|
|
207
|
-
if (bodyChild.nextElementSibling === null) {
|
|
208
|
-
// The document has been fully parsed.
|
|
209
|
-
state = null;
|
|
210
|
-
} else {
|
|
211
|
-
bodyChild = bodyChild.nextElementSibling;
|
|
212
|
-
if (bodyChild.tagName === "DIV") {
|
|
213
|
-
state = "firstAlineaElement";
|
|
214
|
-
} else {
|
|
215
|
-
// <P/> is for footnotes
|
|
216
|
-
assert(["BR", "HR", "P"].includes(bodyChild.tagName), `Unexpected tag name "${bodyChild.tagName}" for body child`);
|
|
217
|
-
// Stay in the same state to go to next bodyChild.
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
break;
|
|
221
|
-
case "nextParagraphChild":
|
|
222
|
-
paragraphChild = paragraphChild.nextElementSibling;
|
|
223
|
-
if (paragraphChild === null) {
|
|
224
|
-
// The paragraph element has been fully parsed. Go to next parent element.
|
|
225
|
-
const lineText = lineElements.map(element => element.textContent).join("").trim();
|
|
226
|
-
if (lineText) {
|
|
227
|
-
const lineHtml = lineElements.map(element => element.outerHTML).join("");
|
|
228
|
-
if (subdivisionHeadersText.length === 0 || isMultiLinesHeader && subdivisionAlineasText.length === 0) {
|
|
229
|
-
subdivisionHeadersHtml.push(lineHtml);
|
|
230
|
-
subdivisionHeadersText.push(lineText);
|
|
231
|
-
} else {
|
|
232
|
-
subdivisionAlineasHtml.push(lineHtml);
|
|
233
|
-
subdivisionAlineasText.push(lineText);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
if (isMultiLinesHeader && subdivisionHeadersText.length >= 2) {
|
|
237
|
-
isMultiLinesHeader = false;
|
|
238
|
-
}
|
|
239
|
-
lineElements = null;
|
|
240
|
-
state = nextParentState;
|
|
241
|
-
} else {
|
|
242
|
-
state = "paragraphChild";
|
|
243
|
-
}
|
|
244
|
-
break;
|
|
245
|
-
case "nextSubAlineaElement":
|
|
246
|
-
subAlineaElement = subAlineaElement.nextElementSibling;
|
|
247
|
-
if (subAlineaElement === null) {
|
|
248
|
-
// The alineaElement has been fully parsed. Go to next alineaElement.
|
|
249
|
-
state = "nextAlineaElement";
|
|
250
|
-
} else {
|
|
251
|
-
state = "subAlineaElement";
|
|
252
|
-
}
|
|
253
|
-
break;
|
|
254
|
-
case "paragraphChild":
|
|
255
|
-
switch (paragraphChild.tagName) {
|
|
256
|
-
case "A":
|
|
257
|
-
{
|
|
258
|
-
lineElements.push(paragraphChild);
|
|
259
|
-
break;
|
|
260
|
-
}
|
|
261
|
-
case "BR":
|
|
262
|
-
{
|
|
263
|
-
const lineText = lineElements.map(element => element.textContent).join("").trim();
|
|
264
|
-
if (lineText) {
|
|
265
|
-
const lineHtml = lineElements.map(element => element.outerHTML).join("");
|
|
266
|
-
if (subdivisionHeadersText.length === 0 || isMultiLinesHeader && subdivisionAlineasText.length === 0) {
|
|
267
|
-
subdivisionHeadersHtml.push(lineHtml);
|
|
268
|
-
subdivisionHeadersText.push(lineText);
|
|
269
|
-
} else {
|
|
270
|
-
subdivisionAlineasHtml.push(lineHtml);
|
|
271
|
-
subdivisionAlineasText.push(lineText);
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
lineElements = [];
|
|
275
|
-
break;
|
|
276
|
-
}
|
|
277
|
-
case "DEL":
|
|
278
|
-
{
|
|
279
|
-
lineElements.push(paragraphChild);
|
|
280
|
-
break;
|
|
281
|
-
}
|
|
282
|
-
case "IMG":
|
|
283
|
-
{
|
|
284
|
-
lineElements.push(paragraphChild);
|
|
285
|
-
break;
|
|
286
|
-
}
|
|
287
|
-
case "SPAN":
|
|
288
|
-
{
|
|
289
|
-
const className = paragraphChild.getAttribute("class");
|
|
290
|
-
switch (className) {
|
|
291
|
-
case "aEloiPastille":
|
|
292
|
-
{
|
|
293
|
-
// Skip pastillé SPAN.
|
|
294
|
-
break;
|
|
295
|
-
}
|
|
296
|
-
case "aEloiPastille0":
|
|
297
|
-
{
|
|
298
|
-
// Skip pastillé SPAN.
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
default:
|
|
302
|
-
lineElements.push(paragraphChild);
|
|
303
|
-
}
|
|
304
|
-
break;
|
|
305
|
-
}
|
|
306
|
-
default:
|
|
307
|
-
return {
|
|
308
|
-
error: {
|
|
309
|
-
code: -3,
|
|
310
|
-
message: `Unexpected tag name for paragraph child: ${paragraphChild.tagName}`
|
|
311
|
-
},
|
|
312
|
-
html,
|
|
313
|
-
page
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
state = "nextParagraphChild";
|
|
317
|
-
break;
|
|
318
|
-
case "subAlineaElement":
|
|
319
|
-
switch (subAlineaElement.tagName) {
|
|
320
|
-
case "P":
|
|
321
|
-
nextParentState = "nextSubAlineaElement";
|
|
322
|
-
paragraphElement = subAlineaElement;
|
|
323
|
-
state = "firstParagraphChild";
|
|
324
|
-
break;
|
|
325
|
-
case "TABLE":
|
|
326
|
-
// TODO
|
|
327
|
-
state = "nextSubAlineaElement";
|
|
328
|
-
break;
|
|
329
|
-
default:
|
|
330
|
-
return {
|
|
331
|
-
error: {
|
|
332
|
-
code: -4,
|
|
333
|
-
message: `Unexpected tag name for sub alinea element: ${subAlineaElement.tagName}`
|
|
334
|
-
},
|
|
335
|
-
html,
|
|
336
|
-
page
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
break;
|
|
340
|
-
state = "nextSubAlineaElement";
|
|
341
|
-
break;
|
|
342
|
-
default:
|
|
343
|
-
throw `Unexpected state: ${state}`;
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
window.close(); // Free memory.
|
|
347
|
-
|
|
348
|
-
return {
|
|
349
|
-
error: null,
|
|
350
|
-
html,
|
|
351
|
-
page,
|
|
352
|
-
subdivisions,
|
|
353
|
-
url: assembleeUrl
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
export async function retrieveTexteLoiParsed(fetch, assembleeUrl) {
|
|
357
|
-
const response = await fetch(assembleeUrl);
|
|
358
|
-
const page = await response.text();
|
|
359
|
-
if (!response.ok) {
|
|
360
|
-
return {
|
|
361
|
-
error: {
|
|
362
|
-
code: response.status,
|
|
363
|
-
message: response.statusText
|
|
364
|
-
},
|
|
365
|
-
page
|
|
366
|
-
};
|
|
367
|
-
}
|
|
368
|
-
return parseTexteLoi(assembleeUrl, page);
|
|
369
|
-
}
|
|
370
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJKU0RPTSIsInBhcnNlVGV4dGVMb2kiLCJhc3NlbWJsZWVVcmwiLCJwYWdlIiwicGFnZVNlZ21lbnRzIiwic3BsaXQiLCJzdHJpY3RFcXVhbCIsImxlbmd0aCIsImh0bWwiLCJ0cmltIiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwic3Vic3RyaW5nIiwid2luZG93IiwiZG9jdW1lbnQiLCJjaGlsZHJlbiIsImh0bWxFbGVtZW50IiwiYm9keUVsZW1lbnQiLCJkaXZFbGVtZW50IiwidGFnTmFtZSIsIm5ld0RpdkVsZW1lbnQiLCJpbnNlcnRCZWZvcmUiLCJjcmVhdGVFbGVtZW50IiwiZGl2Q2hpbGQiLCJnZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNsb3NlIiwiZXJyb3IiLCJjb2RlIiwibWVzc2FnZSIsImJvZHlDaGlsZCIsImFsaW5lYUVsZW1lbnQiLCJpc011bHRpTGluZXNIZWFkZXIiLCJsZXZlbCIsImxldmVscyIsImxpbmVFbGVtZW50cyIsIm5leHRQYXJlbnRTdGF0ZSIsInBhcmFncmFwaENoaWxkIiwicGFyYWdyYXBoRWxlbWVudCIsInN0YXRlIiwic3ViQWxpbmVhRWxlbWVudCIsInN1YmRpdmlzaW9ucyIsInN1YmRpdmlzaW9uQWxpbmVhc0h0bWwiLCJzdWJkaXZpc2lvbkFsaW5lYXNUZXh0Iiwic3ViZGl2aXNpb25IZWFkZXJzSHRtbCIsInN1YmRpdmlzaW9uSGVhZGVyc1RleHQiLCJ1bmRlZmluZWQiLCJoZWFkZXJUZXh0IiwidGV4dENvbnRlbnQiLCJuYW1lQ29tcHV0ZWQiLCJub3JtYWxpemUiLCJyZXBsYWNlIiwibmFtZVVwcGVyIiwidG9VcHBlckNhc2UiLCJuZXh0TGV2ZWwiLCJtYXRjaCIsImNvbnNvbGUiLCJsb2ciLCJwb3AiLCJwdXNoIiwiYWxpbmVhcyIsImhlYWRlcnMiLCJpZCIsInJlbGF0aXZlTGV2ZWwiLCJ0ZXh0IiwibmV4dEVsZW1lbnRTaWJsaW5nIiwiaW5jbHVkZXMiLCJsaW5lVGV4dCIsIm1hcCIsImVsZW1lbnQiLCJqb2luIiwibGluZUh0bWwiLCJvdXRlckhUTUwiLCJjbGFzc05hbWUiLCJ1cmwiLCJyZXRyaWV2ZVRleHRlTG9pUGFyc2VkIiwiZmV0Y2giLCJyZXNwb25zZSIsIm9rIiwic3RhdHVzIiwic3RhdHVzVGV4dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYXJzZXJzL2RvY3VtZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IHsgSlNET00gfSBmcm9tIFwianNkb21cIlxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VUZXh0ZUxvaShhc3NlbWJsZWVVcmw6IHN0cmluZywgcGFnZTogc3RyaW5nKSB7XG4gIC8vIFJlcGFpciBIVE1MLlxuICBjb25zdCBwYWdlU2VnbWVudHMgPSBwYWdlLnNwbGl0KFwiPC9zdHlsZT5cIilcbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHBhZ2VTZWdtZW50cy5sZW5ndGgsIDIsIHBhZ2UpXG4gIGxldCBodG1sID0gcGFnZVNlZ21lbnRzWzFdLnRyaW0oKVxuICBhc3NlcnQoaHRtbC5zdGFydHNXaXRoKFwiPGRpdlwiKSlcbiAgYXNzZXJ0KGh0bWwuZW5kc1dpdGgoXCI8L2Rpdj5cIikpXG4gIGh0bWwgPSBgPGh0bWwke2h0bWwuc3Vic3RyaW5nKDQsIGh0bWwubGVuZ3RoIC0gNil9PC9odG1sPmBcblxuICAvLyBFeHRyYWN0IHN1YmRpdmlzaW9ucyBmcm9tIEhUTUwuXG4gIGNvbnN0IHsgd2luZG93IH0gPSBuZXcgSlNET00oaHRtbClcbiAgY29uc3QgeyBkb2N1bWVudCB9ID0gd2luZG93XG4gIGFzc2VydC5zdHJpY3RFcXVhbChkb2N1bWVudC5jaGlsZHJlbi5sZW5ndGgsIDEpXG4gIGNvbnN0IGh0bWxFbGVtZW50ID0gZG9jdW1lbnQuY2hpbGRyZW5bMF1cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKGh0bWxFbGVtZW50LmNoaWxkcmVuLmxlbmd0aCwgMilcbiAgY29uc3QgYm9keUVsZW1lbnQgPSBodG1sRWxlbWVudC5jaGlsZHJlblsxXVxuICBpZiAoYXNzZW1ibGVlVXJsID09PSBcImh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDY3NS5hc3BcIikge1xuICAgIC8vIFJlcGFpciBkb2N1bWVudC5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwoYm9keUVsZW1lbnQuY2hpbGRyZW4ubGVuZ3RoLCAxKVxuICAgIGNvbnN0IGRpdkVsZW1lbnQgPSBib2R5RWxlbWVudC5jaGlsZHJlblswXVxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChkaXZFbGVtZW50LnRhZ05hbWUsIFwiRElWXCIpXG4gICAgY29uc3QgbmV3RGl2RWxlbWVudCA9IGJvZHlFbGVtZW50Lmluc2VydEJlZm9yZShcbiAgICAgIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICBkaXZFbGVtZW50LFxuICAgIClcbiAgICBib2R5RWxlbWVudC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpLCBkaXZFbGVtZW50KVxuICAgIGZvciAoY29uc3QgZGl2Q2hpbGQgb2YgWy4uLmRpdkVsZW1lbnQuY2hpbGRyZW5dKSB7XG4gICAgICBpZiAoZGl2Q2hpbGQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikgPT09IFwiYTlBcnRpY2xlTnVtXCIpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIG5ld0RpdkVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2Q2hpbGQpXG4gICAgfVxuICB9XG4gIGlmIChib2R5RWxlbWVudC5jaGlsZHJlbi5sZW5ndGggPCAzKSB7XG4gICAgLy8gT2NjdXJzIGluIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDMyNi5hc3AuXG4gICAgd2luZG93LmNsb3NlKCkgLy8gRnJlZSBtZW1vcnkuXG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6IC0xLCBtZXNzYWdlOiBcIlRleHRlIGRlIGxvaSBzYW5zIGNvbnRlbnVcIiB9LFxuICAgICAgaHRtbCxcbiAgICAgIHBhZ2UsXG4gICAgfVxuICB9XG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5RWxlbWVudC5jaGlsZHJlblswXS50YWdOYW1lLCBcIkRJVlwiKVxuICAvLyBGaXJzdCBjaGlsZCBpcyBhIERJViBkZXNjcmliaW5nIHRoZSBkb2N1bWVudCAoQXNzZW1ibMOpZSdzIGhlYWRlcikuIFNraXAgaXQgZm9yIG5vdy5cbiAgbGV0IGJvZHlDaGlsZCA9IGJvZHlFbGVtZW50LmNoaWxkcmVuWzFdXG4gIGFzc2VydC5zdHJpY3RFcXVhbChib2R5Q2hpbGQudGFnTmFtZSwgXCJCUlwiKVxuICBsZXQgYWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGxldCBpc011bHRpTGluZXNIZWFkZXI6IGJvb2xlYW4gPSBmYWxzZVxuICBsZXQgbGV2ZWw6IG51bWJlciB8IG51bGwgPSBudWxsXG4gIGxldCBsZXZlbHM6IG51bWJlcltdID0gW11cbiAgbGV0IGxpbmVFbGVtZW50czogRWxlbWVudFtdIHwgbnVsbCA9IG51bGxcbiAgbGV0IG5leHRQYXJlbnRTdGF0ZSA9IG51bGxcbiAgbGV0IHBhcmFncmFwaENoaWxkOiBFbGVtZW50IHwgbnVsbCA9IG51bGxcbiAgbGV0IHBhcmFncmFwaEVsZW1lbnQ6IEVsZW1lbnQgfCBudWxsID0gbnVsbFxuICBsZXQgc3RhdGU6IHN0cmluZyB8IG51bGwgPSBcIm5leHRCb2R5Q2hpbGRcIlxuICBsZXQgc3ViQWxpbmVhRWxlbWVudDogRWxlbWVudCB8IG51bGwgPSBudWxsXG4gIGNvbnN0IHN1YmRpdmlzaW9ucyA9IFtdXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNIdG1sOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIGxldCBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0OiBzdHJpbmdbXSB8IG51bGwgPSBudWxsXG4gIHdoaWxlIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgXCJhbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN3aXRjaCAoYWxpbmVhRWxlbWVudCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJESVZcIjpcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiSDRcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIlBcIjpcbiAgICAgICAgICAgIG5leHRQYXJlbnRTdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgcGFyYWdyYXBoRWxlbWVudCA9IGFsaW5lYUVsZW1lbnRcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdFBhcmFncmFwaENoaWxkXCJcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSBcIk9MXCI6XG4gICAgICAgICAgICAvLyBUT0RPXG4gICAgICAgICAgICBzdGF0ZSA9IFwibmV4dEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiVEFCTEVcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIGNvZGU6IC0yLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHRhZyBuYW1lIGZvciBhbGluZWEgZWxlbWVudDogJHtcbiAgICAgICAgICAgICAgICAgIGFsaW5lYUVsZW1lbnQhLnRhZ05hbWVcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgaHRtbCxcbiAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcImZpcnN0QWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBhbGluZWFFbGVtZW50ID0gYm9keUNoaWxkLmNoaWxkcmVuWzBdXG4gICAgICAgIGlmIChhbGluZWFFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBhbGluZWEgaW4gY3VycmVudCBib2R5Q2hpbGQ6IGdvIHRvIG5leHQgYm9keUNoaWxkLlxuICAgICAgICAgIHN0YXRlID0gXCJuZXh0Qm9keUNoaWxkXCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwiYWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJmaXJzdFBhcmFncmFwaENoaWxkXCI6XG4gICAgICAgIHBhcmFncmFwaENoaWxkID0gcGFyYWdyYXBoRWxlbWVudCEuY2hpbGRyZW5bMF1cbiAgICAgICAgaWYgKHBhcmFncmFwaENoaWxkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBObyBjaGlsZCBpbiBjdXJyZW50IHBhcmFncmFwaDogZ28gdG8gbmV4dCBwYXJlbnQgZWxlbWVudC5cbiAgICAgICAgICBzdGF0ZSA9IG5leHRQYXJlbnRTdGF0ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGhlYWRlclRleHQgPSBwYXJhZ3JhcGhFbGVtZW50IS50ZXh0Q29udGVudFxuICAgICAgICAgIGNvbnN0IG5hbWVDb21wdXRlZCA9IChoZWFkZXJUZXh0IHx8IFwiXCIpXG4gICAgICAgICAgICAubm9ybWFsaXplKFwiTkZEXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChub3V2ZWF1XFwpLywgXCJcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChQb3VyIGNvb3JkaW5hdGlvblxcKS8sIFwiXCIpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoU3VwcHJpbcOpcz9cXCkvLCBcIlwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL8KgL2csIFwiIFwiKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXC0sLuKApl0vZywgXCJcIilcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlKC8gezEsfS9nLCBcIl9cIilcbiAgICAgICAgICBjb25zdCBuYW1lVXBwZXIgPSBuYW1lQ29tcHV0ZWQudG9VcHBlckNhc2UoKVxuICAgICAgICAgIGlmIChuYW1lVXBwZXIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIC8vIE9jY3VycyBpbjpcbiAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wNDQ1LmFzcFxuICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2MjYuYXNwXG4gICAgICAgICAgICAvLyBTa2lwIHBhcmFncmFwaC5cbiAgICAgICAgICAgIHN0YXRlID0gbmV4dFBhcmVudFN0YXRlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuZXh0TGV2ZWwgPVxuICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eKFJBUFBPUlRfKT9BTk5FWEUoX3wkKS8pICE9PSBudWxsIHx8XG4gICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FVEFUXy8pICE9PSBudWxsXG4gICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICA6IG5hbWVVcHBlci5tYXRjaCgvXlRPTUVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IDFcbiAgICAgICAgICAgICAgICA6IG5hbWVVcHBlci5tYXRjaCgvXlBBUlRJRV8vKSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goXG4gICAgICAgICAgICAgICAgICAgICAgL14oUFJFTUlFUkV8U0VDT05ERXxERVVYSUVNRXxUUk9JU0lFTUV8UVVBVFJJRU1FKV9QQVJUSUUoX3wkKS8sXG4gICAgICAgICAgICAgICAgICAgICkgIT09IG51bGxcbiAgICAgICAgICAgICAgICAgID8gMlxuICAgICAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15MSVZSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICA/IDNcbiAgICAgICAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15USVRSRV8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgID8gNFxuICAgICAgICAgICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eU09VU1RJVFJFXy8pICE9PSBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICA/IDVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eQ0hBUElUUkVfLykgIT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyA2XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eU0VDVElPTl8vKSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gN1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmFtZVVwcGVyLm1hdGNoKC9eU09VU1NFQ1RJT05fLykgIT09IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gOFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuYW1lVXBwZXIubWF0Y2goL15BUlRJQ0xFUz9fLykgIT09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIG11c3QgYmUgYXQgdGhlIHNhbWUgbGV2ZWwgYXMgYXJ0aWNsZS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGhvdXQgY29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDcwMi5hc3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIHdpdGggY29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTMyNi5hc3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMTYxMC5hc3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15FWFBPU0VfREVTX01PVElGUyQvKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyA5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIGlmIChuZXh0TGV2ZWwgPT09IG51bGwgJiYgc3ViZGl2aXNpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKG5hbWVVcHBlci5tYXRjaCgvXihQUk9KRVR8UFJPUE9TSVRJT04pX0RFX0xPSShffCQpLykgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gT2NjdXJzIGluOlxuICAgICAgICAgICAgICAvLyAqIGh0dHA6Ly93d3cuYXNzZW1ibGVlLW5hdGlvbmFsZS5mci8xNS90ZXh0ZXMvMDIzMi5hc3BcbiAgICAgICAgICAgICAgLy8gKiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2MjYuYXNwXG4gICAgICAgICAgICAgIC8vICogaHR0cDovL3d3dy5hc3NlbWJsZWUtbmF0aW9uYWxlLmZyLzE1L3RleHRlcy8wNjc2LmFzcFxuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgbmFtZVVwcGVyID09PSBcIkpFVVhfT0xZTVBJUVVFU19FVF9QQVJBTFlNUElRVUVTX0RFXzIwMjRcIlxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIE9jY3VycyBpbiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzA2NzYuYXNwXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVVcHBlciA9PT0gXCJURVhURV9ERV9MQV9DT01NSVNTSU9OX01JWFRFX1BBUklUQUlSRVwiKSB7XG4gICAgICAgICAgICAgIC8vIE9jY3VycyBpbiBodHRwOi8vd3d3LmFzc2VtYmxlZS1uYXRpb25hbGUuZnIvMTUvdGV4dGVzLzEyOTQuYXNwXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICBgVW5leHBlY3RlZCBuYW1lVXBwZXIgPSBcIiR7bmFtZVVwcGVyfVwiIGF0IGJlZ2lubmluZyBvZiBcInRleHRlIGRlIGxvaVwiIGF0ICR7YXNzZW1ibGVlVXJsfWAsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNraXAgcGFyYWdyYXBoLlxuICAgICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChuZXh0TGV2ZWwgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldmVsID0gbmV4dExldmVsXG4gICAgICAgICAgICB3aGlsZSAobGV2ZWxzLmxlbmd0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbHNbbGV2ZWxzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICAgIGxldmVscy5wb3AoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxldmVscy5sZW5ndGggPT09IDAgfHwgbGV2ZWwgPiBsZXZlbHNbbGV2ZWxzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgICAgICAgIGxldmVscy5wdXNoKGxldmVsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQXJ0aWNsZXMgJiBcIkV4cG9zw6kgZGVzIG1vdGlmc1wiIGFyZSB0aGUgb25seSBkaXZpc2lvbnMgd2l0aG91dCBzZWNvbmQgdGl0bGUuXG4gICAgICAgICAgICBpc011bHRpTGluZXNIZWFkZXIgPVxuICAgICAgICAgICAgICBuYW1lVXBwZXIubWF0Y2goL15BUlRJQ0xFUz9fLykgPT09IG51bGwgJiZcbiAgICAgICAgICAgICAgbmFtZVVwcGVyLm1hdGNoKC9eRVhQT1NFX0RFU19NT1RJRlMkLykgPT09IG51bGxcbiAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc0h0bWwgPSBbXVxuICAgICAgICAgICAgc3ViZGl2aXNpb25BbGluZWFzVGV4dCA9IFtdXG4gICAgICAgICAgICBzdWJkaXZpc2lvbkhlYWRlcnNIdG1sID0gW11cbiAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVyc1RleHQgPSBbXVxuICAgICAgICAgICAgc3ViZGl2aXNpb25zLnB1c2goe1xuICAgICAgICAgICAgICBodG1sOiB7XG4gICAgICAgICAgICAgICAgYWxpbmVhczogc3ViZGl2aXNpb25BbGluZWFzSHRtbCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBzdWJkaXZpc2lvbkhlYWRlcnNIdG1sLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBpZDogXCJEX1wiICsgbmFtZUNvbXB1dGVkLFxuICAgICAgICAgICAgICBsZXZlbDogbGV2ZWwgKyAxLFxuICAgICAgICAgICAgICByZWxhdGl2ZUxldmVsOiBsZXZlbHMubGVuZ3RoLFxuICAgICAgICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgICAgICAgYWxpbmVhczogc3ViZGl2aXNpb25BbGluZWFzVGV4dCxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBzdWJkaXZpc2lvbkhlYWRlcnNUZXh0LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgbGluZUVsZW1lbnRzID0gW11cbiAgICAgICAgICBzdGF0ZSA9IFwicGFyYWdyYXBoQ2hpbGRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwiZmlyc3RTdWJBbGluZWFFbGVtZW50XCI6XG4gICAgICAgIHN1YkFsaW5lYUVsZW1lbnQgPSBhbGluZWFFbGVtZW50IS5jaGlsZHJlblswXVxuICAgICAgICBpZiAoc3ViQWxpbmVhRWxlbWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gTm8gc3ViLWFsaW5lYSBpbiBjdXJyZW50IGFsaW5lYTogZ28gdG8gbmV4dCBhbGluZWEuXG4gICAgICAgICAgc3RhdGUgPSBcIm5leHRBbGluZWFFbGVtZW50XCJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwic3ViQWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJuZXh0QWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBhbGluZWFFbGVtZW50ID0gYWxpbmVhRWxlbWVudCEubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICAgIGlmIChhbGluZWFFbGVtZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVGhlIGJvZHlDaGlsZCBoYXMgYmVlbiBmdWxseSBwYXJzZWQuIEdvIHRvIG5leHQgYm9keUNoaWxkXG4gICAgICAgICAgc3RhdGUgPSBcIm5leHRCb2R5Q2hpbGRcIlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0YXRlID0gXCJhbGluZWFFbGVtZW50XCJcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBcIm5leHRCb2R5Q2hpbGRcIjpcbiAgICAgICAgaWYgKGJvZHlDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBUaGUgZG9jdW1lbnQgaGFzIGJlZW4gZnVsbHkgcGFyc2VkLlxuICAgICAgICAgIHN0YXRlID0gbnVsbFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJvZHlDaGlsZCA9IGJvZHlDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICAgICAgICBpZiAoYm9keUNoaWxkLnRhZ05hbWUgPT09IFwiRElWXCIpIHtcbiAgICAgICAgICAgIHN0YXRlID0gXCJmaXJzdEFsaW5lYUVsZW1lbnRcIlxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyA8UC8+IGlzIGZvciBmb290bm90ZXNcbiAgICAgICAgICAgIGFzc2VydChcbiAgICAgICAgICAgICAgW1wiQlJcIiwgXCJIUlwiLCBcIlBcIl0uaW5jbHVkZXMoYm9keUNoaWxkLnRhZ05hbWUpLFxuICAgICAgICAgICAgICBgVW5leHBlY3RlZCB0YWcgbmFtZSBcIiR7Ym9keUNoaWxkLnRhZ05hbWV9XCIgZm9yIGJvZHkgY2hpbGRgLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLy8gU3RheSBpbiB0aGUgc2FtZSBzdGF0ZSB0byBnbyB0byBuZXh0IGJvZHlDaGlsZC5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJuZXh0UGFyYWdyYXBoQ2hpbGRcIjpcbiAgICAgICAgcGFyYWdyYXBoQ2hpbGQgPSBwYXJhZ3JhcGhDaGlsZCEubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgICAgIGlmIChwYXJhZ3JhcGhDaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBwYXJhZ3JhcGggZWxlbWVudCBoYXMgYmVlbiBmdWxseSBwYXJzZWQuIEdvIHRvIG5leHQgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgICAgY29uc3QgbGluZVRleHQgPSBsaW5lRWxlbWVudHMhXG4gICAgICAgICAgICAubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LnRleHRDb250ZW50KVxuICAgICAgICAgICAgLmpvaW4oXCJcIilcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICBpZiAobGluZVRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVIdG1sID0gbGluZUVsZW1lbnRzIVxuICAgICAgICAgICAgICAubWFwKChlbGVtZW50KSA9PiBlbGVtZW50Lm91dGVySFRNTClcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIilcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgIChpc011bHRpTGluZXNIZWFkZXIgJiYgc3ViZGl2aXNpb25BbGluZWFzVGV4dCEubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVyc1RleHQhLnB1c2gobGluZVRleHQpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sIS5wdXNoKGxpbmVIdG1sKVxuICAgICAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0IS5wdXNoKGxpbmVUZXh0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNNdWx0aUxpbmVzSGVhZGVyICYmIHN1YmRpdmlzaW9uSGVhZGVyc1RleHQhLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICBpc011bHRpTGluZXNIZWFkZXIgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICBsaW5lRWxlbWVudHMgPSBudWxsXG4gICAgICAgICAgc3RhdGUgPSBuZXh0UGFyZW50U3RhdGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZSA9IFwicGFyYWdyYXBoQ2hpbGRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwibmV4dFN1YkFsaW5lYUVsZW1lbnRcIjpcbiAgICAgICAgc3ViQWxpbmVhRWxlbWVudCA9IHN1YkFsaW5lYUVsZW1lbnQhLm5leHRFbGVtZW50U2libGluZ1xuICAgICAgICBpZiAoc3ViQWxpbmVhRWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRoZSBhbGluZWFFbGVtZW50IGhhcyBiZWVuIGZ1bGx5IHBhcnNlZC4gR28gdG8gbmV4dCBhbGluZWFFbGVtZW50LlxuICAgICAgICAgIHN0YXRlID0gXCJuZXh0QWxpbmVhRWxlbWVudFwiXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RhdGUgPSBcInN1YkFsaW5lYUVsZW1lbnRcIlxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwicGFyYWdyYXBoQ2hpbGRcIjpcbiAgICAgICAgc3dpdGNoIChwYXJhZ3JhcGhDaGlsZCEudGFnTmFtZSkge1xuICAgICAgICAgIGNhc2UgXCJBXCI6IHtcbiAgICAgICAgICAgIGxpbmVFbGVtZW50cyEucHVzaChwYXJhZ3JhcGhDaGlsZCEpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiQlJcIjoge1xuICAgICAgICAgICAgY29uc3QgbGluZVRleHQgPSBsaW5lRWxlbWVudHMhXG4gICAgICAgICAgICAgIC5tYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQudGV4dENvbnRlbnQpXG4gICAgICAgICAgICAgIC5qb2luKFwiXCIpXG4gICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIGlmIChsaW5lVGV4dCkge1xuICAgICAgICAgICAgICBjb25zdCBsaW5lSHRtbCA9IGxpbmVFbGVtZW50cyFcbiAgICAgICAgICAgICAgICAubWFwKChlbGVtZW50KSA9PiBlbGVtZW50Lm91dGVySFRNTClcbiAgICAgICAgICAgICAgICAuam9pbihcIlwiKVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgICAgICAgKGlzTXVsdGlMaW5lc0hlYWRlciAmJiBzdWJkaXZpc2lvbkFsaW5lYXNUZXh0IS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHN1YmRpdmlzaW9uSGVhZGVyc0h0bWwhLnB1c2gobGluZUh0bWwpXG4gICAgICAgICAgICAgICAgc3ViZGl2aXNpb25IZWFkZXJzVGV4dCEucHVzaChsaW5lVGV4dClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJkaXZpc2lvbkFsaW5lYXNIdG1sIS5wdXNoKGxpbmVIdG1sKVxuICAgICAgICAgICAgICAgIHN1YmRpdmlzaW9uQWxpbmVhc1RleHQhLnB1c2gobGluZVRleHQpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVFbGVtZW50cyA9IFtdXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiREVMXCI6IHtcbiAgICAgICAgICAgIGxpbmVFbGVtZW50cyEucHVzaChwYXJhZ3JhcGhDaGlsZCEpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiSU1HXCI6IHtcbiAgICAgICAgICAgIGxpbmVFbGVtZW50cyEucHVzaChwYXJhZ3JhcGhDaGlsZCEpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIFwiU1BBTlwiOiB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBwYXJhZ3JhcGhDaGlsZCEuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIilcbiAgICAgICAgICAgIHN3aXRjaCAoY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgIGNhc2UgXCJhRWxvaVBhc3RpbGxlXCI6IHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHBhc3RpbGzDqSBTUEFOLlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSBcImFFbG9pUGFzdGlsbGUwXCI6IHtcbiAgICAgICAgICAgICAgICAvLyBTa2lwIHBhc3RpbGzDqSBTUEFOLlxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBsaW5lRWxlbWVudHMhLnB1c2gocGFyYWdyYXBoQ2hpbGQhKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGVycm9yOiB7XG4gICAgICAgICAgICAgICAgY29kZTogLTMsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYFVuZXhwZWN0ZWQgdGFnIG5hbWUgZm9yIHBhcmFncmFwaCBjaGlsZDogJHtcbiAgICAgICAgICAgICAgICAgIHBhcmFncmFwaENoaWxkIS50YWdOYW1lXG4gICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSBcIm5leHRQYXJhZ3JhcGhDaGlsZFwiXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwic3ViQWxpbmVhRWxlbWVudFwiOlxuICAgICAgICBzd2l0Y2ggKHN1YkFsaW5lYUVsZW1lbnQhLnRhZ05hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiUFwiOlxuICAgICAgICAgICAgbmV4dFBhcmVudFN0YXRlID0gXCJuZXh0U3ViQWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBwYXJhZ3JhcGhFbGVtZW50ID0gc3ViQWxpbmVhRWxlbWVudFxuICAgICAgICAgICAgc3RhdGUgPSBcImZpcnN0UGFyYWdyYXBoQ2hpbGRcIlxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlIFwiVEFCTEVcIjpcbiAgICAgICAgICAgIC8vIFRPRE9cbiAgICAgICAgICAgIHN0YXRlID0gXCJuZXh0U3ViQWxpbmVhRWxlbWVudFwiXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgICAgIGNvZGU6IC00LFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBVbmV4cGVjdGVkIHRhZyBuYW1lIGZvciBzdWIgYWxpbmVhIGVsZW1lbnQ6ICR7XG4gICAgICAgICAgICAgICAgICBzdWJBbGluZWFFbGVtZW50IS50YWdOYW1lXG4gICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGh0bWwsXG4gICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgICAgc3RhdGUgPSBcIm5leHRTdWJBbGluZWFFbGVtZW50XCJcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IGBVbmV4cGVjdGVkIHN0YXRlOiAke3N0YXRlfWBcbiAgICB9XG4gIH1cblxuICB3aW5kb3cuY2xvc2UoKSAvLyBGcmVlIG1lbW9yeS5cblxuICByZXR1cm4ge1xuICAgIGVycm9yOiBudWxsLFxuICAgIGh0bWwsXG4gICAgcGFnZSxcbiAgICBzdWJkaXZpc2lvbnMsXG4gICAgdXJsOiBhc3NlbWJsZWVVcmwsXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJpZXZlVGV4dGVMb2lQYXJzZWQoXG4gIGZldGNoOiAoXG4gICAgdXJsOiBzdHJpbmcgfCBSZXF1ZXN0LFxuICAgIGluaXQ/OiBSZXF1ZXN0SW5pdCB8IHVuZGVmaW5lZCxcbiAgKSA9PiBQcm9taXNlPFJlc3BvbnNlPixcbiAgYXNzZW1ibGVlVXJsOiBzdHJpbmcsXG4pIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhc3NlbWJsZWVVcmwpXG4gIGNvbnN0IHBhZ2UgPSBhd2FpdCByZXNwb25zZS50ZXh0KClcbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcjogeyBjb2RlOiByZXNwb25zZS5zdGF0dXMsIG1lc3NhZ2U6IHJlc3BvbnNlLnN0YXR1c1RleHQgfSxcbiAgICAgIHBhZ2UsXG4gICAgfVxuICB9XG4gIHJldHVybiBwYXJzZVRleHRlTG9pKGFzc2VtYmxlZVVybCwgcGFnZSlcbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsS0FBSyxRQUFRLE9BQU87QUFFN0IsT0FBTyxTQUFTQyxhQUFhQSxDQUFDQyxZQUFvQixFQUFFQyxJQUFZLEVBQUU7RUFDaEU7RUFDQSxNQUFNQyxZQUFZLEdBQUdELElBQUksQ0FBQ0UsS0FBSyxDQUFDLFVBQVUsQ0FBQztFQUMzQ04sTUFBTSxDQUFDTyxXQUFXLENBQUNGLFlBQVksQ0FBQ0csTUFBTSxFQUFFLENB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
|
package/lib/parsers/index.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("core-js/modules/es.object.define-property.js");
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
Object.defineProperty(exports, "iterRechercheAmendements", {
|
|
8
|
-
enumerable: true,
|
|
9
|
-
get: function get() {
|
|
10
|
-
return _recherche_amendements.iterRechercheAmendements;
|
|
11
|
-
}
|
|
12
|
-
});
|
|
13
|
-
Object.defineProperty(exports, "iterRechercheRawAmendements", {
|
|
14
|
-
enumerable: true,
|
|
15
|
-
get: function get() {
|
|
16
|
-
return _recherche_amendements.iterRechercheRawAmendements;
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
Object.defineProperty(exports, "parseTexte", {
|
|
20
|
-
enumerable: true,
|
|
21
|
-
get: function get() {
|
|
22
|
-
return _textes_lois.parseTexte;
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
Object.defineProperty(exports, "parseTexteLoi", {
|
|
26
|
-
enumerable: true,
|
|
27
|
-
get: function get() {
|
|
28
|
-
return _documents.parseTexteLoi;
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
Object.defineProperty(exports, "retrieveTexteLoiParsed", {
|
|
32
|
-
enumerable: true,
|
|
33
|
-
get: function get() {
|
|
34
|
-
return _documents.retrieveTexteLoiParsed;
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
var _documents = require("./documents");
|
|
38
|
-
var _textes_lois = require("./textes_lois");
|
|
39
|
-
var _recherche_amendements = require("./recherche_amendements");
|
|
40
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZG9jdW1lbnRzIiwicmVxdWlyZSIsIl90ZXh0ZXNfbG9pcyIsIl9yZWNoZXJjaGVfYW1lbmRlbWVudHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2Vycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBwYXJzZVRleHRlTG9pLCByZXRyaWV2ZVRleHRlTG9pUGFyc2VkIH0gZnJvbSBcIi4vZG9jdW1lbnRzXCJcbmV4cG9ydCB7IHBhcnNlVGV4dGUgfSBmcm9tIFwiLi90ZXh0ZXNfbG9pc1wiXG5leHBvcnQge1xuICBpdGVyUmVjaGVyY2hlQW1lbmRlbWVudHMsXG4gIGl0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyxcbn0gZnJvbSBcIi4vcmVjaGVyY2hlX2FtZW5kZW1lbnRzXCJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsVUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsc0JBQUEsR0FBQUYsT0FBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
package/lib/parsers/index.mjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export { parseTexteLoi, retrieveTexteLoiParsed } from "./documents.mjs";
|
|
2
|
-
export { parseTexte } from "./textes_lois.mjs";
|
|
3
|
-
export { iterRechercheAmendements, iterRechercheRawAmendements } from "./recherche_amendements.mjs";
|
|
4
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXJzZVRleHRlTG9pIiwicmV0cmlldmVUZXh0ZUxvaVBhcnNlZCIsInBhcnNlVGV4dGUiLCJpdGVyUmVjaGVyY2hlQW1lbmRlbWVudHMiLCJpdGVyUmVjaGVyY2hlUmF3QW1lbmRlbWVudHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2Vycy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBwYXJzZVRleHRlTG9pLCByZXRyaWV2ZVRleHRlTG9pUGFyc2VkIH0gZnJvbSBcIi4vZG9jdW1lbnRzXCJcbmV4cG9ydCB7IHBhcnNlVGV4dGUgfSBmcm9tIFwiLi90ZXh0ZXNfbG9pc1wiXG5leHBvcnQge1xuICBpdGVyUmVjaGVyY2hlQW1lbmRlbWVudHMsXG4gIGl0ZXJSZWNoZXJjaGVSYXdBbWVuZGVtZW50cyxcbn0gZnJvbSBcIi4vcmVjaGVyY2hlX2FtZW5kZW1lbnRzXCJcbiJdLCJtYXBwaW5ncyI6IlNBQVNBLGFBQWEsRUFBRUMsc0JBQXNCO0FBQUEsU0FDckNDLFVBQVU7QUFBQSxTQUVqQkMsd0JBQXdCLEVBQ3hCQywyQkFBMkIiLCJpZ25vcmVMaXN0IjpbXX0=
|